| <?xml version="1.0" encoding="ISO-8859-1" ?> |
| <document> |
| <copyright> |
| Copyright 1999-2004 The Apache Software Foundation |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| </copyright> |
| <properties> |
| <title>IIS HowTo</title> |
| <author email="hgomez@apache.org">Henri Gomez</author> |
| <author email="shachor@il.ibm.com">Gal Shachor</author> |
| <author email="yoavs@apache.org">Yoav Shapira</author> |
| <date>$Date$</date> |
| </properties> |
| |
| <section name="Introduction"> |
| <p> |
| This document explains how to set up IIS to cooperate with Tomcat. |
| </p> |
| |
| <p> |
| Normally IIS can not execute Servlets and Java Server Pages (JSPs), |
| configuring IIS to use the JK ISAPI redirector plugin will let IIS send servlet and |
| JSP requests to Tomcat (and this way, serve them to clients). |
| </p> |
| |
| <p> |
| It is recommanded that you also read the <a href="jk/workershowto.html">Workers HowTo</a> document |
| to learn how to setup the working entities between your WebServer and Tomcat Engines. |
| </p> |
| |
| |
| <subsection name="Document Conventions and Assumptions"> |
| <p> |
| ${tomcat_home} is the root directory of tomcat. |
| Your Tomcat installation should have the following subdirectories: |
| |
| <ul> |
| <li> |
| ${tomcat_home}\conf - Where you can place various configuration files |
| </li> |
| <li> |
| ${tomcat_home}\webapps - Containing example applications |
| </li> |
| <li> |
| ${tomcat_home}\bin - Where you place web server plugins |
| </li> |
| </ul> |
| </p> |
| <p> |
| In all the examples in this document ${tomcat_home} will be <b>c:\jakarta-tomcat</b>. |
| A worker is defined to be a tomcat process that accepts work from the IIS server. |
| </p> |
| </subsection> |
| |
| |
| <subsection name="Supported Configuration"> |
| <p> |
| The IIS-Tomcat redirector was developed and tested on: |
| <ul> |
| <li> |
| WinNT4.0-i386 SP4/SP5/SP6a (should be able to work with other service packs), Win2K and WinXP and Win98 |
| </li> |
| <li> |
| IIS4.0 and PWS4.0 (numerous people have working IIS 5 and IIS 6 configurations) |
| </li> |
| <li> |
| Tomcat 3.2 and later, Tomcat 4.x and Tomcat 5 |
| </li> |
| </ul> |
| </p> |
| |
| <p> |
| The redirector uses <b>ajp12</b> and <b>ajp13</b> to send requests to the Tomcat containers. There is also an option to use Tomcat in process, |
| more about the in-process mode can be found in the in process howto. |
| </p> |
| </subsection> |
| |
| <subsection name="IIS 5 and 6 Notes"> |
| <p> |
| There are extra steps you need to take for configuring Tomcat with IIS 5 and 6. Please see the appropriate links from |
| <a href="http://wiki.apache.org/jakarta-tomcat/Tomcat_2fLinks">Tomcat Useful Links</a>. |
| </p> |
| </subsection> |
| |
| <subsection name="Who support ajp protocols ?"> |
| <p> |
| The ajp12 protocol is only available in Tomcat 3.2.x and 3.3.x. |
| </p> |
| |
| <p> |
| The <b>ajp12</b> has been <b>deprecated</b> with Tomcat 3.3.x and you should use instead |
| <b>ajp13</b> which is the only ajp protocol known by Tomcat 4.x and 5. |
| </p> |
| |
| <p> |
| Of course Tomcat 3.2.x and 3.3.x also support ajp13 protocol. |
| </p> |
| |
| <p> |
| Others servlet engines such as <b>jetty</b> have support for ajp13 protocol |
| </p> |
| |
| </subsection> |
| |
| <subsection name="How does it work ?"> |
| <p> |
| <ol> |
| <li> |
| The IIS-Tomcat redirector is an IIS plugin (filter + extension), IIS load the redirector plugin and calls its |
| filter function for each in-coming request. |
| </li> |
| <li> |
| The filter then tests the request URL against a list of URI-paths held inside uriworkermap.properties, |
| If the current request matches one of the entries in the list of URI-paths, |
| the filter transfer the request to the extension. |
| </li> |
| <li> |
| The extension collects the request parameters and forwards them to the appropriate worker using the defined |
| protocol like <b>ajp13</b>. |
| </li> |
| <li> |
| The extension collects the response from the worker and returns it to the browser. |
| </li> |
| </ol> |
| </p> |
| </subsection> |
| |
| </section> |
| |
| <section name="Installation"> |
| <p> |
| A pre-built version of the ISAPI redirector server plugin, isapi_redirect.dll, is available under |
| the win32/i386 directory of jakarta-tomcat-connectors distribution. |
| For those using Netscape as your browser, try downloading a zip version of the file, if available. |
| There can be problems using Netscape to download DLL files. |
| |
| You can also build a copy locally from the source present in jakarta-tomcat-connectors distribution. |
| |
| The Tomcat redirector requires three entities: |
| |
| <ul> |
| <li> |
| <b>isapi_redirect.dll</b> - The IIS server plugin, either obtain a pre-built DLL or build it yourself (see the build section). |
| </li> |
| <li> |
| <b>workers.properties</b> - A file that describes the host(s) and port(s) used by the workers (Tomcat processes). |
| A sample workers.properties can be found under the conf directory. |
| </li> |
| <li> |
| <b>uriworkermap.properties</b> - A file that maps URL-Path patterns to workers. |
| A sample uriworkermap.properties can be found under the conf directory as well. |
| </li> |
| </ul> |
| </p> |
| |
| <p> |
| The installation includes the following parts: |
| |
| <ul> |
| <li> |
| Configuring the ISAPI redirector with a default /examples context and checking that you can serve servlets with IIS. |
| </li> |
| <li> |
| Adding more contexts to the configuration. |
| </li> |
| </ul> |
| </p> |
| |
| </section> |
| |
| <section name="Configuring the ISAPI Redirector"> |
| <p> |
| In this document I will assume that isapi_redirect.dll is placed in |
| <b>c:\jakarta-tomcat\bin\win32\i386\isapi_redirect.dll</b> and |
| that you created the properties files are in <b>c:\jakarta-tomcat\conf</b>. |
| </p> |
| <p> |
| <ol> |
| <li> |
| In the registry, create a new registry key named |
| <b>"HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0"</b> |
| </li> |
| <li> |
| Add a string value with the name <b>extension_uri</b> and a value of <b>/jakarta/isapi_redirect.dll</b> |
| </li> |
| <li> |
| Add a string value with the name <b>log_file</b> and a value pointing to where you want your |
| log file to be (for example <b>c:\jakarta-tomcat\logs\isapi.log</b>). |
| </li> |
| <li> |
| Add a string value with the name <b>log_level</b> and a value for your log level |
| (can be debug, info, error or emerg). |
| </li> |
| <li> |
| Add a string value with the name <b>worker_file</b> and a value which is the full path |
| to your workers.properties file (for example <b>c:\jakarta-tomcat\conf\workers.properties</b>) |
| </li> |
| <li> |
| Add a string value with the name <b>worker_mount_file</b> and a value which is the full path |
| to your uriworkermap.properties file (for example <b>c:\jakarta-tomcat\conf\uriworkermap.properties</b>) |
| </li> |
| <li> |
| Using the IIS management console, add a new virtual directory to your IIS/PWS web site. |
| The name of the virtual directory must be jakarta. |
| Its physical path should be the directory where you placed isapi_redirect.dll |
| (in our example it is c:\jakarta-tomcat\bin\win32\i386). |
| While creating this new virtual directory assign it with execute access. |
| </li> |
| <li> |
| Using the IIS management console, add isapi_redirect.dll as a filter in your IIS/PWS web site. |
| The name of the filter should reflect its task (I use the name jakarta), |
| its executable must be our c:\jakarta-tomcat\bin\win32\i386\isapi_redirect.dll. |
| For PWS, you'll need to use regedit and add/edit the <b>"Filter DLLs"</b> key under |
| <b>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters</b>. |
| This key contains a "," separated list of dlls ( full paths ) - |
| you need to insert the full path to isapi_redirect.dll. |
| </li> |
| <li> |
| Restart IIS (stop + start the IIS service), make sure that the jakarta filter is marked with a green up-pointing arrow. |
| Under Win98 you may need to <b>cd WINDOWS\SYSTEM\inetsrv</b> and type PWS /stop |
| ( the DLL and log files are locked - even if you click the stop button, |
| PWS will still keep the DLLs in memory. ). Type pws to start it again. |
| </li> |
| </ol> |
| </p> |
| <p> |
| That's all, you should now start Tomcat and ask IIS to serve you the /examples context. |
| Try <a href="http://localhost/examples/jsp/index.html">http://localhost/examples/jsp/index.html</a> for example and |
| execute some of the JSP examples. |
| </p> |
| <p> |
| If this does not work successfully, refer to the Troubleshooting section below for help on correcting the problem. |
| </p> |
| |
| <subsection name="Adding additional Contexts"> |
| <p> |
| The examples context is useful for verifying your installation, |
| but you will also need to add your own contexts. Adding a new context requires two operations: |
| </p> |
| <p> |
| <ol> |
| <li> |
| Adding the context to Tomcat (I am not going to talk about this). |
| </li> |
| <li> |
| Adding the context to the ISAPI redirector. |
| </li> |
| </ol> |
| </p> |
| <p> |
| Adding a context to the ISAPI redirector is simple, all you need to do is to edit |
| your uriworkermap.properties and to add a line that looks like: |
| </p> |
| |
| <screen> |
| <read>/context/*=worker_name</read> |
| </screen> |
| |
| <p> |
| Workers and their name are defined in workers.properties, by default workers.properties comes |
| with a single pre-configured worker named <b>"defworker"</b> so you can use it. |
| As an example, if you want to add a context named "shop", the line that you should add to |
| uriworkermap.properties will be: |
| </p> |
| |
| <screen> |
| <read>/shop/*=defworker</read> |
| </screen> |
| |
| After saving uriworkermap.properties restart IIS and it will serve the new context. |
| |
| <p> |
| A feature is present till Tomcat 3.2, where a uriworkermap.properties-auto is automatically |
| written each time Tomcat is started. This file includes settings for each of the contexts that |
| Tomcat will serve during its run. |
| </p> |
| <p> |
| Each context has settings to have Tomcat handle servlet and JSP requests, |
| but by default static content is left to be served by IIS. |
| </p> |
| <p> |
| Each context also has a commented out setting to have Tomcat handle all requests to the context. |
| You can rename this file (so it won't be overwritten the next time Tomcat is started) and |
| uncomment this setting or make other customizations. |
| </p> |
| <p> |
| You may also use this file as is in your worker_mount_file setting. |
| </p> |
| </subsection> |
| |
| <subsection name="Advanced Context Configuration"> |
| <p> |
| Sometimes it is better to have IIS serve the static pages (html, gif, jpeg etc.) |
| even if these files are part of a context served by Tomcat. |
| </p> |
| <p> |
| For example, consider the html and gif files in the examples context, there is no need |
| to serve them from the Tomcat process, IIS will suffice. |
| </p> |
| |
| <p> |
| Making IIS serve static files that are part of the Tomcat contexts requires the following: |
| <ol> |
| <li> |
| Configuring IIS to know about the Tomcat contexts |
| </li> |
| <li> |
| Configuring the redirector to leave the static files for IIS |
| </li> |
| </ol> |
| </p> |
| |
| <p> |
| Adding a Tomcat context to IIS requires the addition of a new IIS virtual directory that covers the Tomcat context. |
| For example adding a /example IIS virtual directory that covers the c:\jakarta-tomcat\webapps\examples directory. |
| </p> |
| |
| <p> |
| Configuring the redirector is somewhat harder, you will need to specify the exact |
| URL-Path pattern(s) that you want Tomcat to handle (usually only JSP files and servlets). |
| This requires a change to the uriworkermap.properties : |
| |
| <screen> |
| <note>For the examples context it requires to replace the following line</note> |
| <read>/examples/*=defworker</read> |
| <note>with the following two lines</note> |
| <read>/examples/*.jsp=defworker</read> |
| <read>/examples/servlet/*=defworker</read> |
| </screen> |
| </p> |
| |
| <p> |
| As you can see the second configuration is more explicit, it actually instruct the redirector |
| to redirect only requests to resources under /examples/servlet/ and resources under /examples/ |
| whose name ends with .jsp. |
| This is similar to what is automically written to the uriworkermap.properties-auto file for each context. |
| </p> |
| |
| <p> |
| You can even be more explicit and provide lines such as: |
| |
| <screen> |
| <read>/example/servletname=defworker</read> |
| </screen> |
| </p> |
| |
| <p> |
| that instructs the redirector to redirect request whose URL-Path equals /example/servletname |
| to the worker named defworker. |
| </p> |
| |
| </subsection> |
| |
| <subsection name="Protecting the WEB-INF Directory"> |
| <p> |
| Each servlet application (context) has a special directory named WEB-INF, |
| this directory contains sensitive configurations data and Java classes and must be kept hidden from web users. |
| Using the IIS management console it is possible to protect the WEB-INF directory from user access, |
| this however requires the administrator to remember that. |
| </p> |
| <p> |
| To avoid this need the redirector plugin automatically protects your WEB-INF directories by rejecting |
| any request that contains WEB-INF in its URL-Path. |
| </p> |
| </subsection> |
| |
| <subsection name="Advanced Worker Configuration"> |
| <p> |
| Sometimes you want to serve different contexts with different Tomcat processes |
| (for example to spread the load among different machines). |
| To achieve such goal you will need to define several workers and assign each context with its own worker. |
| </p> |
| <p> |
| Defining workers is done in workers.properties, this file includes two types of entries: |
| </p> |
| |
| <p> |
| <screen> |
| <note>An entry that lists all the workers defined</note> |
| <read>worker.list=worker1, worker2</read> |
| <note>Entries that define the host and port associated with these workers</note> |
| <read>worker.worker1.host=localhost</read> |
| <read>worker.worker1.port=8009</read> |
| <read>worker.worker1.type=ajp13</read> |
| <read>worker.worker2.host=otherhost</read> |
| <read>worker.worker2.port=8009</read> |
| <read>worker.worker2.type=ajp13</read> |
| </screen> |
| </p> |
| |
| <p> |
| The above example defined two workers, now we can use these workers to serve two different contexts |
| each with its own worker : |
| <screen> |
| <note>example uriworkermap.properties fragment</note> |
| <read>/examples/*=worker1</read> |
| <read>/webpages/*=worker2</read> |
| </screen> |
| </p> |
| |
| <p> |
| As you can see the <b>examples</b> context is served by <b>worker1</b> while the |
| <b>webpages</b> context is served by <b>worker2</b>. |
| </p> |
| |
| <p> |
| More informations on using and configuring workers in the <a href="jk/workershowto.html">Workers HowTO</a> |
| </p> |
| |
| </subsection> |
| |
| </section> |
| |
| <section name="Building ISAPI redirector"> |
| <p> |
| The redirector was developed using Visual C++ Ver.6.0, so having this environment is a prereq if you want |
| to perform a custom build. You should also have IIS developer SDK |
| |
| The steps that you need to take are: |
| <ul> |
| <li> |
| Change directory to the isapi plugins source directory. |
| </li> |
| <li> |
| Make the source with MSDEV |
| </li> |
| </ul> |
| <screendos> |
| <notedos>Change directory to the isapi plugins source directory</notedos> |
| <typedos>cd c:\home\apache\jk\isapi</typedos> |
| <notedos>Build the sources using MSDEV</notedos> |
| <typedos>MSDEV isapi.dsp /MAKE ALL</typedos> |
| </screendos> |
| </p> |
| <p> |
| If msdev is not in your path, enter the full path to msdev.exe. |
| This will build both release and debug versions of the redirector plugin. |
| An alternative will be to open the isapi workspace file (isapi.dsw) in msdev and |
| build it using the build menu. |
| </p> |
| </section> |
| |
| <section name="Troubleshooting"> |
| <p> |
| It is easy to have the ISAPI redirector not work the first time you try to install it. |
| </p> |
| <p> |
| If this happens to you, here are some steps to follow to try to correct the problem. |
| </p> |
| <p> |
| These steps aren't guaranteed to cover all possible problems, |
| but they should help find the typical mistakes. |
| </p> |
| <p> |
| If you make any corrections during these steps, restart the IIS service as described above in the last step |
| of the installation, then retry the step. |
| </p> |
| |
| <p>To enable error tracking, make sure web site activity is being logged. |
| For PWS 4.0 make sure "Save Web Site Activity Log" is checked in the Advanced Options of the Personal Web Manager. |
| </p> |
| |
| <p> |
| Note: These steps assume your <b>worker_mount_file</b> setting points to an unmodified copy of the |
| <b>uriworkermap.properties</b> file.<br/> |
| Results may be misleading if <b>worker_mount_file</b> points to a modified <b>uriworkermap.properties</b> |
| or the <b>uriworkermap.properties-auto</b> file.<br/> |
| It is also assumed that the <b>"/examples" context</b> works correcly if you access Tomcat directly. |
| </p> |
| |
| <subsection name="Win98"> |
| <p> |
| Start the IIS service and Tomcat. |
| </p> |
| <p> |
| Check for the presence of the ISAPI redirector log file you specified in the log_file setting. |
| If not found, verify the following: |
| </p> |
| <ul> |
| <li> |
| Check the "Filter DLLs" setting in the "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters" |
| key and make sure the path is correct. |
| </li> |
| <li> |
| Check the spelling of the "HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0" key. |
| Case isn't important, but an incorrect letter will prevent the isapi_redirect.dll from finding its registry settings. |
| </li> |
| <li> |
| Check the log_file setting for typos, name and data. Also insure the directory in which the log file will appear already exists. |
| </li> |
| If the above are set correctly, the ISAPI redirector should be able to create the log file. |
| </ul> |
| <p> |
| Invoke the URL <a href="http://localhost/examples/jsp/index.html">http://localhost/examples/jsp/index.html</a> |
| in your browser. |
| Case is important in Tomcat. The characters following "localhost" in the URL must be lower case. |
| If the page fails to appear, stop the IIS service (required to view the IIS log file). |
| Then examine the last line in the IIS log file in found in SYSTEM/LogFiles/W3SVC1 : |
| </p> |
| <p> |
| If the last line contains: |
| </p> |
| <screen> |
| <read>GET "/examples/jsp/index.html HTTP/1.1" 404</read> |
| </screen> |
| <p> |
| then the ISAPI redirector is not recognizing that it should be handling requests for the "/examples" context. |
| Check the following: |
| </p> |
| <ul> |
| <li> |
| Check the extension_uri name for typos. |
| </li> |
| <li> |
| Check the worker_file setting for typos, name and data. |
| </li> |
| <li> |
| Check the worker_mount_file setting typos, name and data. |
| </li> |
| If these are set correctly, the ISAPI redirector should recognize that it should handle requests for the "/examples" context. |
| </ul> |
| |
| <p>If the last line contains something like: |
| </p> |
| |
| <screen> |
| <read>GET "/jakarta/isapi_redirect.dll HTTP1.1"</read> |
| </screen> |
| |
| <p> |
| then the ISAPI redirector is recognizing that it should handle the request, |
| but is not successful at getting Tomcat to service the request. |
| </p> |
| |
| <p> |
| You should check the HTTP error code following GET "/..." : |
| </p> |
| |
| <screen> |
| <note>Error 404</note> |
| <read>GET "/..." 404</read> |
| </screen> |
| |
| <ul> |
| <li> |
| Make sure you entered the URL correctly. |
| </li> |
| <li> |
| Make sure the virtual directory created was called "jakarta". |
| It should display in Personal Web Manager as "/jakarta" (without the quotes). |
| </li> |
| <li> |
| Make sure the extension_uri data begins with "/jakarta/" (without the quotes). |
| </li> |
| </ul> |
| |
| <screen> |
| <note>Error 500</note> |
| <read>GET "/..." 500</read> |
| </screen> |
| |
| <ul> |
| <li> |
| Make sure that "isapi_redirect.dll" follows "/jakarta/" in the extension_uri setting. |
| </li> |
| <li> |
| Check the workers.properties file and make sure the port setting for worker.ajp12.port is the same as the port specified in the server.xml for the "Apache AJP12 support". |
| </li> |
| </ul> |
| |
| <screen> |
| <note>Error 200 or 403</note> |
| <read>GET "/..." 200</read> |
| <read>GET "/..." 403</read> |
| </screen> |
| |
| <ul> |
| <li> |
| Make sure you have checked Execute Access |
| for the jakarta virtual directory in the Advanced Options of the Personal Web Manager. |
| </li> |
| </ul> |
| |
| <p> |
| If the above settings are correct, the index.html page should appear in your browser. |
| You should also be able to click the Execute links to execute the JSP examples. |
| </p> |
| |
| </subsection> |
| |
| <subsection name="WinNT/Win2K/WinXP"> |
| <p> |
| Start the World Wide Web Publishing Service and Tomcat. |
| </p> |
| <p> |
| Check for the presence of the ISAPI redirector log file you specified in the log_file setting. |
| If not found, check the following: |
| </p> |
| <ul> |
| <li> |
| Check the "executable" you set for the filter in the IIS Management Console and make sure the path is correct. |
| </li> |
| <li>Check the spelling of the "HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0" key. |
| Case isn't important, but an incorrect letter will prevent the isapi_redirect.dll from finding its registry settings. |
| </li> |
| <li> |
| Check the log_file setting for typos, name and data. Also insure the directory in which the log file will appear already exists. |
| </li> |
| If the above are set correctly, the ISAPI redirector should be able to create the log file. |
| </ul> |
| |
| <p> |
| Check the jakarta filter you added and make sure its status shows a green upward-pointing arrow. |
| If not, check the following: |
| </p> |
| <ul> |
| <li> |
| Check the worker_file setting for typos, name and data. |
| </li> |
| <li> |
| Check the worker_mount_file setting typos, name and data. |
| </li> |
| If the above are set correctly, the green upward-pointing arrow should appear, even if the other settings are wrong. |
| </ul> |
| |
| <p> |
| Invoke the URL <a href="http://localhost/examples/jsp/index.html">http://localhost/examples/jsp/index.html</a> |
| in your browser. Case is important in Tomcat. The characters following "localhost" in the URL must be lower case. |
| If the page fails to appear, examine the last line in the IIS server log file in found in SYSTEM32/LogFiles/W3SVC1. |
| </p> |
| |
| <p> |
| The last line should contain something like: GET "/jakarta/isapi_redirect.dll HTTP1.1", |
| which indicates the ISAPI redirector is recognizing that it should handle the request. |
| </p> |
| |
| <p> |
| You should check the HTTP error code following GET "/..." : |
| </p> |
| |
| <screen> |
| <note>Error 404</note> |
| <read>GET "/..." 404</read> |
| </screen> |
| |
| <ul> |
| <li> |
| Make sure you entered the URL correctly. |
| </li> |
| </ul> |
| |
| <screen> |
| <note>Error 500</note> |
| <read>GET "/..." 500</read> |
| </screen> |
| |
| <ul> |
| <li> |
| Make sure the virtual directory created was called "jakarta". |
| </li> |
| <li> |
| Make sure that the extension_uri setting is correct. |
| </li> |
| <li> |
| Check the workers.properties file and make sure the port setting for worker.ajp12.port is the same as the port specified in the server.xml for the "Apache AJP12 support". |
| </li> |
| </ul> |
| |
| <screen> |
| <note>Error 200 or 403</note> |
| <read>GET "/..." 200</read> |
| <read>GET "/..." 403</read> |
| </screen> |
| |
| <ul> |
| <li> |
| Make sure you have checked Execute Access for the jakarta virtual directory in the |
| Advanced Options of the Personal Web Manager. |
| </li> |
| </ul> |
| |
| <p> |
| If the above settings are correct, the index.html page should appear in your browser. |
| You should also be able to click the Execute links to execute the JSP examples. |
| </p> |
| </subsection> |
| |
| |
| </section> |
| |
| </document> |