<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../../wtp.xsl"?>
<html>
    <head>
        <meta
            name="root"
            content="../../../../" />
        <title>WTP Tutorials - Building a School Schedule Web Application</title>
    </head>
    <body>
        <h1>WTP Tutorials - Building a School Schedule Web Application</h1>
        <p>
            <b>By Lawrence Mandel</b>
            <br />
            January 24, 2005
            <br />
            <br />
        </p>
        <p>
            In this tutorial you will create a school schedule Web application. This application will allow students to input their courses and create a schedule. This tutorial will introduce you to JSP's, servlets and the Web Tools Platform project's server tools.
            <br />
        </p>
        <h2>Prerequisites For The Tutorial</h2>
        <ol>
            <li>
                Web Tools Platform (WTP) project
                <br />
                The WTP project can be downloaded from
                <a href="http://download.eclipse.org/webtools/downloads/">http://download.eclipse.org/webtools/downloads/</a>
                <br />
                <br />
            </li>
            <li>
                Tomcat 5.0.28
                <br />
                Tomcat is available from
                <a
                    href="http://jakarta.apache.org/tomcat/"
                    target="_top">
                    http://jakarta.apache.org/tomcat/
                </a>
                <br />
                <br />
            </li>
            <li>
                JDK 1.4.2
                <br />
                Sun's JDK is available from
                <a
                    href="http://java.sun.com/j2se/1.4.2/download.html"
                    target="_top">
                    http://java.sun.com/j2se/1.4.2/download.html
                </a>
                <br />
                <br />
            </li>
        </ol>
        <h2>Installing The Tomcat Runtime In Eclipse</h2>
        <p>In order to run the Web application from Eclipse (which will allow you to test and debug the application) Eclipse has to be told where to find Tomcat and where to find the JDK. Tomcat requires a JDK so it can compile servlets and JSPs.</p>
        <ol>
            <li>
                Select Window -&gt; Preferences
                <B></B>
                .
                <br />
                <img
                    border="0"
                    src="images/webapp1.gif"
                    width="550"
                    height="340" />
                <br />
                <br />
            </li>
            <li>
                Select Java -&gt; Installed JREs from the menu on the left.
                <br />
                <img
                    border="0"
                    src="images/webapp2.gif"
                    width="574"
                    height="513" />
                <br />
                <br />
            </li>
            <li>
                Select Add... The Add JRE dialog will open. Select Browse for the JRE home directory and choose the location where you installed the JDK 1.4.2. Name the runtime Sun JDK 1.4.2 and click OK.
                <br />
                <img
                    border="0"
                    src="images/webapp3.gif"
                    width="485"
                    height="441" />
                <br />
                <br />
            </li>
            <li>
                The Sun JDK 1.4.2 now shows on the list of installed runtimes. Click OK.
                <br />
                <img
                    border="0"
                    src="images/webapp4.gif"
                    width="574"
                    height="513" />
                <br />
                <br />
            </li>
            <li>
                Select Window -&gt; Preferences.
                <br />
                <br />
            </li>
            <li>
                Select Server -&gt; Installed Runtimes from the menu on the left.
                <br />
                <img
                    border="0"
                    src="images/webapp5.gif"
                    width="574"
                    height="513" />
                <br />
                <br />
            </li>
            <li>
                Click on Add... Select Apache -&gt; Apache Tomcat v5.0 and click Next. Click Browse and select the location where you installed Tomcat. Select the Sun JDK 1.4.2 that you just installed and click Finish.
                <br />
                <img
                    border="0"
                    src="images/webapp6.gif"
                    width="438"
                    height="422" />
                <br />
                <br />
            </li>
            <li>Click OK to close the preferences dialog. Both the JDK and Tomcat are now configured in Eclipse.</li>
        </ol>
        <h2>Creating A J2EE Project</h2>
        <p>You will now create a J2EE Web project in which you will create the School Schedule application.</p>
        <ol>
            <li>
                Select File -&gt; New -&gt; Project. Select Web -&gt; J2EE Web Project and click Next.
                <br />
                <img
                    border="0"
                    src="images/webapp7.gif"
                    width="500"
                    height="500" />
                <br />
                <br />
            </li>
            <li>
                Name the project SchoolSchedule, deselect Add module to an EAR project and click Finish.
                <br />
                <img
                    border="0"
                    src="images/webapp8.gif"
                    width="504"
                    height="502" />
                <br />
                You will be prompted to switch to the J2EE perspective. Click Yes.
                <br />
                <br />
            </li>
        </ol>
        The Project Explorer is populated with different types of Web applications. Your newly created project is located under Dynamic Web Projects. Expand your SchoolSchedule project. The Deployment Descriptor contains information about your Web project such as the servlets that your project
        contains. Expanding the Java Resources folder will reveal the JavaSource folder. This is where you will store all of your Java files including any servlets and supporting classes you create. The WebContent folder holds all of the files that will be directly accessible from your project once
        it is deployed. This folder will hold the JSP you will create that will display the schedule for your application.
        <br />
        <h2>Creating Class and Schedule Containers</h2>
        <p>
            For your web application to pass class information between the JSP page that displays the schedule and the servlet that registers the classes with the schedule you will need a representation of a class and a representation of a schedule. A class will have a title, day of week, start time
            and end time. A schedule will be a collection of classes. To implement these two objects you will create two classes; SchoolClass and SchoolSchedule.
        </p>
        <ol>
            <li>
                Right click on the JavaSource folder and select New -&gt; Class. Name the class SchoolClass and set the package to org.eclipse.wtp.sample.classschedule. Click Finish. The SchoolClass class will now appear in the JavaSource folder and open in the Java editor.
                <br />
                <img
                    border="0"
                    src="images/webapp9.gif"
                    width="495"
                    height="563" />
                <br />
                <br />
            </li>
            <li>
                We said earlier that a SchoolClass object will need to hold a title, day, start time and end time. Create private variables for each of these.The title should be of type String and the rest should be of type int.
                <p id="code">
                    private String title;
                    <br />
                    private int startTime;
                    <br />
                    private int endTime;
                    <br />
                    private int day;
                    </p>
            </li>
            <li>
                This information should be set when an instance of SchoolClass is created so you will need to create a constructor that will accept the four pieces of information. Create a constructor that takes in the four parameters and sets the class variables.
                <p id="code">
                    public SchoolClass(String title, int startTime, int endTime, int day)
                    <br />
                    {
                    <br />
                    this.title = title;
                    <br />
                    this.startTime = startTime;
                    <br />
                    this.endTime = endTime;
                    <br />
                    this.day = day;
                    <br />
                    }
                    </p>
            </li>
            <li>
                You now need to create a way to access the object's information. Right click in the editor and select Source -&gt; Generate Getters and Setters... (Note: ensure you click within the class' curly braces.)
                <br />
                <img
                    border="0"
                    src="images/webapp10.gif"
                    width="640"
                    height="396" />
                <br />
                <br />
            </li>
            <li>
                Click Select Getters on the right. The four getter methods are now selected. Click OK.
                <br />
                <img
                    border="0"
                    src="images/webapp11.gif"
                    width="432"
                    height="581" />
                <br />
                <br />
            </li>
            <li>
                Save the SchoolClass file.
                <br />
                <br />
            </li>
            <li>
                You will now create the SchoolSchedule class which will act as a container for all of the classes. Right click on the package org.eclipse.wtp.sample.classschedule and select New -&gt; Class. Notice that the package field is automatically populated. Name the class SchoolSchedule and
                click Finish.
                <br />
                <br />
            </li>
            <li>
                Add a private list of classes to the SchoolSchedule class.
                <p id="code">
                    private List classes = new ArrayList();
                    </p>
                    The List and ArrayList classes are underlined and flagged as errors as they have not yet been imported. Right click in the editor and select Source -&gt; Organize Imports. Select java.util.List and click Finish. The necessary import statements will be added to the class.
                    <br />
                    <br />
            </li>
            <li>
                Create the getter method for the classes list by right clicking in the editor within the class and selecting Source -&gt; Generate Getters and Setters... Click Select Getters on the right and click OK.
                <br />
                <br />
            </li>
            <li>
                You now need to create a method to add new classes to the list. Create a method named addClass that takes a parameter of SchoolClass and adds it to the list.
                <p id="code">
                    public void addClass(SchoolClass schoolClass)
                    <br />
                    {
                    <br />
                    classes.add(schoolClass);
                    <br />
                    }
                    </p>
            </li>
            <li>
                Save the file.
                <br />
                <br />
            </li>
        </ol>
        <h2>Adding Classes To The Schedule</h2>
        <p>
            You will now create a Java Server Page (JSP) that will allow students to add a class to their schedule. JSPs provide a way to access information stored in Java objects and perform Java operations within an HTML page. Your JSP will contain a form where students can submit their
            information. In the following section you will create an action to process the form submission.
        </p>
        <ol>
            <li>
                Right click on the WebContent folder and select New -&gt; Other... Select Simple and then File. Click Next.
                <br />
                <img
                    border="0"
                    src="images/webapp12.gif"
                    width="500"
                    height="400" />
                <br />
                Name the file Schedule.jsp and click Finish. The Schedule.jsp file opens in the JSP source page editor.
                <br />
                <br />
            </li>
            <li>
                You now need to create the form to submit courses. The structure of a JSP page is very similar to that of an HTML page. A JSP page can simply use more tags and offer more functionality. In this step you will really just be creating an HTML page with a form. Create an HTML page with a
                form that has a text box for submitting a title, check boxes for the days of the week, and a drop-down menu for both the start time and end time of the class. The form will also need a submit button. You should ignore the action attribute on the FORM element for now. We will look at
                this in the next section when you create your submit action.
                <p id="code">
                    &lt;HTML&gt;
                    <br />
                    &lt;HEAD&gt;
                    <br />
                    &lt;TITLE&gt;Student Schedule&lt;/TITLE&gt;
                    <br />
                    &lt;/HEAD&gt;
                    <br />
                    <br />
                    &lt;BODY&gt;
                    <br />
                    &lt;FORM action=&quot;&quot; method=&quot;post&quot;&gt;
                    <br />
                    Course Name: &lt;INPUT type=&quot;text&quot; name=&quot;title&quot; size=&quot;35&quot;&gt;&lt;BR&gt;
                    <br />
                    Course Time:
                    <br />
                    Sun&lt;INPUT type=&quot;checkbox&quot; name=&quot;day&quot; value=&quot;sun&quot;&gt;
                    <br />
                    Mon&lt;INPUT type=&quot;checkbox&quot; name=&quot;day&quot; value=&quot;mon&quot;&gt;
                    <br />
                    Tue&lt;INPUT type=&quot;checkbox&quot; name=&quot;day&quot; value=&quot;tue&quot;&gt;
                    <br />
                    Wed&lt;INPUT type=&quot;checkbox&quot; name=&quot;day&quot; value=&quot;wed&quot;&gt;
                    <br />
                    Thu&lt;INPUT type=&quot;checkbox&quot; name=&quot;day&quot; value=&quot;thu&quot;&gt;
                    <br />
                    Fri&lt;INPUT type=&quot;checkbox&quot; name=&quot;day&quot; value=&quot;fri&quot;&gt;
                    <br />
                    Sat&lt;INPUT type=&quot;checkbox&quot; name=&quot;day&quot; value=&quot;sat&quot;&gt;
                    <br />
                    &lt;SELECT name=&quot;starttime&quot;&gt;
                    <br />
                    &lt;OPTION value=&quot;8&quot;&gt;8:00am&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;9&quot;&gt;9:00am&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;10&quot;&gt;10:00am&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;11&quot;&gt;11:00am&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;12&quot;&gt;12:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;13&quot;&gt;1:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;14&quot;&gt;2:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;15&quot;&gt;3:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;16&quot;&gt;4:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;17&quot;&gt;5:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;18&quot;&gt;6:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;19&quot;&gt;7:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;20&quot;&gt;8:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;21&quot;&gt;9:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;/SELECT&gt;
                    <br />
                    to
                    <br />
                    &lt;SELECT name=&quot;endtime&quot;&gt;
                    <br />
                    &lt;OPTION value=&quot;9&quot;&gt;9:00am&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;10&quot;&gt;10:00am&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;11&quot;&gt;11:00am&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;12&quot;&gt;12:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;13&quot;&gt;1:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;14&quot;&gt;2:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;15&quot;&gt;3:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;16&quot;&gt;4:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;17&quot;&gt;5:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;18&quot;&gt;6:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;19&quot;&gt;7:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;20&quot;&gt;8:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;21&quot;&gt;9:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;OPTION value=&quot;22&quot;&gt;10:00pm&lt;/OPTION&gt;
                    <br />
                    &lt;/SELECT&gt;
                    <br />
                    &lt;BR&gt;
                    <br />
                    &lt;BR&gt;
                    <br />
                    &lt;INPUT type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Add Course&quot;&gt;
                    <br />
                    &lt;/FORM&gt;
                    <br />
                    <br />
                    &lt;/BODY&gt;
                    <br />
                    &lt;/HTML&gt;
                    </p>
                    Save the file.
            </li>
            <li>
                You should now test that your page looks correct. To do this you will run the current version of your application of the Tomcat server you configured earlier. Right click on Schedule.jsp and select Run As -&gt; Run on Server... Select Tomcat v5.0 Server. Ensure that Set server as
                project default is selected and click Next.
                <br />
                <img
                    border="0"
                    src="images/webapp13.gif"
                    width="536"
                    height="594" />
                <br />
                <br />
            </li>
            <li>
                Ensure that your SchoolSchedule project is listed under Configured projects. If it is not, add it to the list of Configured projects by selecting it and then selecting Add. Click Finish.
                <br />
                <br />
            </li>
            <li>
                Eclipse will now startup the Tomcat server and then display your page in the internal Web browser. Your page should look something like the following screen shot.
                <br />
                <img
                    border="0"
                    src="images/webapp14.gif"
                    width="653"
                    height="408" />
            </li>
        </ol>
        <h2>The Submit Action</h2>
        <p>
            When the form in Schedule.jsp is submitted an action needs to be performed on the data. In this section you will create a servlet that processes the input from the form, creates the necessary SchoolClass objects and adds them to the SchoolSchedule. A servlet is a Java class that executes
            on the server. In order to have the class information from previous submits stay available the SchoolSchedule will be added to a session object. (If you do not do this the schedule will only be able to show the information from the last form submission.)
        </p>
        <ol>
            <li>
                To create the servlet right click on the org.eclipse.wtp.sample.classschedule package and select New -&gt; Class. Name the servlet ScheduleServlet. Select Browse next to Superclass and select javax.servlet.http.HttpServlet. Select Add next to Interfaces and add javax.servlet.Servlet.
                Click Finish.
                <br />
                <img
                    border="0"
                    src="images/webapp15.gif"
                    width="495"
                    height="563" />
                <br />
                <br />
            </li>
            <li>
                Your newly created ScheduleServlet will appear in the JavaSource folder and open in the Java editor. Right click in the editor and select Source -&gt; Override/Implement Methods...
                <br />
                <img
                    border="0"
                    src="images/webapp16.gif"
                    width="595"
                    height="327" />
                <br />
                <br />
            </li>
            <li>
                Select the doPost(HttpServletRequest, HttpServletResponse) method and click OK. The doPost method will now show in your ScheduleServlet class. Rename arg0 to request and arg1 to response.
                <br />
                <br />
            </li>
            <li>
                The doPost method is where you will take the input from the form and perform your actions. The doPost method is used because you specified that your form would submit data using the POST method. You could also have used the GET method in which case your servlet would need to
                implement doGet instead of doPost.
                <br />
                <br />
                The first thing you need to do in the doPost method is read in the information submitted by the form. This information can be obtained through the request object's getParameter method. the getParameterValues method is used for the days as there may be more than one day selected.
                <p id="code">
                    String title = request.getParameter(&quot;title&quot;);
                    <br />
                    int starttime = Integer.parseInt(request.getParameter(&quot;starttime&quot;));
                    <br />
                    int endtime = Integer.parseInt(request.getParameter(&quot;endtime&quot;));
                    <br />
                    String[] days = request.getParameterValues(&quot;day&quot;);
                    </p>
            </li>
            <li>
                The next step is to obtain the existing SchoolSchedule, if there is one, or to create a new one if one hasn't been created yet.
                <p id="code">
                    SchoolSchedule schedule =
                    <br />
                    (SchoolSchedule)request.getSession(true).getAttribute(&quot;schoolschedule&quot;);
                    <br />
                    if(schedule == null)
                    <br />
                    {
                    <br />
                    schedule = new SchoolSchedule();
                    <br />
                    }
                    </p>
            </li>
            <li>
                Now you will create new SchoolClass objects. As there may be many days for the school class you are adding you will iterate over all of the days and create a new SchoolClass object for each day that was selected. Creating SchoolClass objects in this way will make displaying them via
                the Schedule.jsp easier. After a SchoolClass object is created you will add it to the schedule.
                <p id="code">
                    if(days != null)
                    <br />
                    {
                    <br />
                    for(int i = 0; i &lt; days.length; i++)
                    <br />
                    {
                    <br />
                    String dayString = days[i];
                    <br />
                    int day;
                    <br />
                    if(dayString.equalsIgnoreCase(&quot;SUN&quot;)) day = 0;
                    <br />
                    else if(dayString.equalsIgnoreCase(&quot;MON&quot;)) day = 1;
                    <br />
                    else if(dayString.equalsIgnoreCase(&quot;TUE&quot;)) day = 2;
                    <br />
                    else if(dayString.equalsIgnoreCase(&quot;WED&quot;)) day = 3;
                    <br />
                    else if(dayString.equalsIgnoreCase(&quot;THU&quot;)) day = 4;
                    <br />
                    else if(dayString.equalsIgnoreCase(&quot;FRI&quot;)) day = 5;
                    <br />
                    else day = 6;
                    <br />
                    <br />
                    SchoolClass clazz = new SchoolClass(title, starttime, endtime, day);
                    <br />
                    schedule.addClass(clazz);
                    <br />
                    }
                    <br />
                    }
                    </p>
            </li>
            <li>
                You need to set the schedule in the session so Schedule.jsp will have access to it and forward control back to Schedule.jsp.
                <p id="code">
                    request.getSession().setAttribute(&quot;schoolschedule&quot;, schedule);
                    <br />
                    getServletContext().getRequestDispatcher(&quot;/Schedule.jsp&quot;).forward(request, response);
                    </p>
            </li>
            <li>
                Save the class.
                <br />
                <br />
            </li>
            <li>
                You have now created your servlet but your Web application does not yet know about it. In order for your Web application to know about the servlet you will have to define it in the Deployment Descriptor. Double click on the Deployment Descriptor under the SchoolSchedule project and
                copy the following lines under the display element
                <p id="code">
                    &lt;servlet&gt;
                    <br />
                    &lt;description&gt;&lt;/description&gt;
                    <br />
                    &lt;display-name&gt;Schedule&lt;/display-name&gt;
                    <br />
                    &lt;servlet-name&gt;Schedule&lt;/servlet-name&gt;
                    <br />
                    &lt;servlet-class&gt;
                    <br />
                    org.eclipse.wtp.sample.classschedule.ScheduleServlet
                    <br />
                    &lt;/servlet-class&gt;
                    <br />
                    &lt;/servlet&gt;
                    <br />
                    &lt;servlet-mapping&gt;
                    <br />
                    &lt;servlet-name&gt;Schedule&lt;/servlet-name&gt;
                    <br />
                    &lt;url-pattern&gt;/Schedule&lt;/url-pattern&gt;
                    <br />
                    &lt;/servlet-mapping&gt;
                    </p>
            </li>
            <li>
                Now that you have defined where your servlet action is located you can specify the location in your Schedule JSP. Open the Schedule.jsp file and specify the action location of your form.
                <p id="code">
                    &lt;FORM action=&quot;/SchoolSchedule/Schedule&quot; method=&quot;post&quot;&gt;
                    <br />
                    </p>
            </li>
        </ol>
        <h2>Displaying The Schedule</h2>
        <p>Your servlet has now been defined with your Web application and is ready to be used. You can now return to Schedule.jsp and work on displaying the Schedule. In this section you will use some of the custom tag libraries that are available for working with JSPs.</p>
        <ol>
            <li>
                In order to use the standard tag libraries you will first have to download and install them into our project. Open your Web browser to
                <a
                    href="http://jakarta.apache.org/taglibs/"
                    target="_top">
                    http://jakarta.apache.org/taglibs/
                </a>
                . Under JCP Standardized Tag Libraries on the left select Standar-1.1:JSTL 1.1(2.0). Scroll down to the Download section and select the first link, Download the Standard Tag Library Release from an Apache Jakara Project Mirror. Select Taglibs and then Library Releases. Select
                standard and then select to download jakarta-taglibs-standard-current.zip. Once the zip file download, open it and extract jstl.jar and standard.jar into the WebContent/WEB-INF/lib folder in your project. Select your project, right click on it and select Refresh. The libraries are
                automatically added to your Java classpath. Your project should now look like this.
                <br />
                <img
                    border="0"
                    src="images/webapp17.gif"
                    width="265"
                    height="436" />
                <br />
                <br />
            </li>
            <li>
                Open Schedule.jsp in the JSP source page editor.
                <br />
                <br />
            </li>
            <li>
                In order to use the tag libraries you have just downloaded you will have to declare them in your JSP. At the top of the JSP file (above the HTML element) add in the following line
                <p id="code">
                    &lt;%@taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; prefix=&quot;c&quot;%&gt;
                    </p>
            </li>
            <li>
                Next we will dynamically create a table that will hold our schedule. The table will list the days of the week and the time from 8:00am until 9:00pm. For each time slot we will check to see if there is a class and if there is we will display the title of the class.
                <br />
                <br />
                First create the header of the table as follows.
                <p id="code">
                    &lt;TABLE border=&quot;1&quot; cellspacing=&quot;0&quot;&gt;
                    <br />
                    &lt;TBODY&gt;
                    <br />
                    &lt;TR&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot; width=&quot;80&quot;&gt;&lt;/TH&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot; width=&quot;100&quot;&gt;Sunday&lt;/TH&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot;&gt;Monday&lt;/TH&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot;&gt;Tuesday&lt;/TH&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot;&gt;Wednesday&lt;/TH&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot;&gt;Thursday&lt;/TH&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot;&gt;Friday&lt;/TH&gt;
                    <br />
                    &lt;TH align=&quot;center&quot; valign=&quot;middle&quot;&gt;Saturday&lt;/TH&gt;
                    <br />
                    &lt;/TR&gt;
                    </p>
            </li>
            <li>
                Now you will create the content of the table. In order to create the content you will iterate through the times of the day and the days of the week. As your schedule will display from 8:00am to 9:00pm you will iterate from 8 to 21 for the time. For the days of the week you will
                iterate from 0 to 6. There is some simple logic for displaying the time in a nice way. As you can see below, the tags that are prefixed with 'c' are from the custom tag library you imported earlier. These tags allow for the iteration and conditional logic you are using. In the third
                forEach loop you can see where the information is retrieved from the school schedule object your servlet creates and where the individual information is retrieved from each SchoolClass object.
                <p id="code">
                    &lt;c:forEach begin=&quot;8&quot; end=&quot;21&quot; step=&quot;1&quot; var=&quot;time&quot;&gt;
                    <br />
                    &lt;TR&gt;
                    <br />
                    &lt;TD align=&quot;center&quot; valign=&quot;middle&quot; width=&quot;80&quot;&gt;
                    <br />
                    &lt;c:choose&gt;
                    <br />
                    &lt;c:when test=&quot;${time == 12}&quot;&gt;
                    <br />
                    &lt;c:out value=&quot;${time}&quot; /&gt;:00pm
                    <br />
                    &lt;/c:when&gt;
                    <br />
                    &lt;c:when test=&quot;${time &gt; 12}&quot;&gt;
                    <br />
                    &lt;c:out value=&quot;${time - 12}&quot; /&gt;:00pm
                    <br />
                    &lt;/c:when&gt;
                    <br />
                    &lt;c:otherwise&gt;
                    <br />
                    &lt;c:out value=&quot;${time}&quot; /&gt;:00am
                    <br />
                    &lt;/c:otherwise&gt;
                    <br />
                    &lt;/c:choose&gt;&lt;/TD&gt;
                    <br />
                    &lt;c:forEach begin=&quot;0&quot; end=&quot;6&quot; step=&quot;1&quot; var=&quot;day&quot;&gt;
                    <br />
                    &lt;TD align=&quot;center&quot; valign=&quot;middle&quot; width=&quot;100&quot;&gt;
                    <br />
                    &lt;c:forEach items=&quot;${schoolschedule.classes}&quot; var=&quot;clazz&quot;&gt;
                    <br />
                    &lt;c:if test=&quot;${clazz.startTime &lt;= time
                    <br />
                    &amp;&amp; clazz.endTime &gt; time
                    <br />
                    &amp;&amp; clazz.day == day}&quot;&gt;
                    <br />
                    &lt;c:out value=&quot;${clazz.title}&quot; /&gt;
                    <br />
                    &lt;/c:if&gt;
                    <br />
                    &lt;/c:forEach&gt;
                    <br />
                    &lt;/TD&gt;
                    <br />
                    &lt;/c:forEach&gt;
                    <br />
                    &lt;/TR&gt;
                    <br />
                    &lt;/c:forEach&gt;
                    <br />
                    &lt;/TBODY&gt;
                    <br />
                    &lt;/TABLE&gt;
                    </p>
            </li>
            <li>Save the Schedule.jsp file.</li>
        </ol>
        <h2>Running And Testing The School Schedule Web Application</h2>
        <p>Your school schedule application is now complete. Now it is time to take it for a spin.</p>
        <ol>
            <li>
                Right click on Schedule.jsp and select Run As -&gt; Run on Server...
                <br />
                <br />
            </li>
            <li>
                A Web browser window will open with the application. Notice that the calendar is initially empty. Add a class to the calendar and click Add Course. The course is now added to the calendar. For example, if you add the course &quot;Intro to Computer Programming 101&quot; on Mon, Wed
                and Fri from 10:00am until 11:00am your schedule will now look like the following.
                <br />
                <img
                    border="0"
                    src="images/webapp18.gif"
                    width="655"
                    height="603" />
                <br />
                <br />
            </li>
            <li>Experiment adding more courses into your schedule.</li>
        </ol>
        <h2>Summary</h2>
        <p>
            In this tutorial you learned how to configure Eclipse to work with Tomcat and create a J2EE Web project that uses a servlet and a JSP to create a student class schedule Web application. This application, while simple, provides a good introduction to Java Web development and some of the
            Web development tools available in the Eclipse Web Tools Platform project.
        </p>
        <p></p>
        <p></p>
    </body>
</html>
