2.2 第一个JSP程序

本节介绍如何在Tomcat服务器上创建和发布JSP程序。这里首先讲解Tomcat的目录结构以及Web应用的目录结构,接着介绍如何将JSP部署到Web应用中,运行第一个JSP程序并测试它。

2.2.1 JSP的工作原理

图2.13 JSP执行过程图

JSP服务器管理JSP页面有两个阶段:转换阶段(translation phase)和执行阶段(execution phase)。当有一个客户请求到来时,JSP服务器检验JSP页面的语法是否正确,将JSP页面转换为Servlet(Servlet就是用Java语言实现的CGI程序,后面章节将详细介绍)源文件,然后调用javac工具类编译Servlet源文件生成class文件,这一阶段是转换阶段。接下来,Servlet容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,在请求处理完成后,响应对象被JSP服务器接收,服务器将HTML格式的响应信息发送到客户端,这一阶段是执行阶段,如图2.13所示。

从整个过程中可以知道,当第一次加载JSP页面时,因为要将JSP文件转换为Servlet类,所以响应速度较慢。当再次请求时,JSP服务器就会直接执行第一次请求时产生的Servlet,而不会再重新转换JSP文件,所以其执行速度和原始的Servlet执行速度几乎就相同了。在JSP执行期间,JSP服务器会检查JSP文件,看是否有更新或修改。如果有更新或修改,JSP服务器会再次编译JSP或Servlet;如果没有更新或修改,就直接执行前面产生的Servlet。这也是JSP相对于Servlet的好处之一。

2.2.2 JSP目录结构

在Tomcat上发布Web应用之前,首先要了解Tomcat的目录结构,参见表2.1。这些目录都是其子目录。Tomcat 6.0与以前的版本相比,对目录结构做了很大改动,合并和简化了一些目录,现在的结构简单而且清晰。

表2.1 Tomcat 6.0目录结构

Web应用具有固定的目录结构,这里举例假定正在开发的Web应用名为jsp_example。首先,应该在/webapps目录下创建这个Web应用的目录结构,参见表2.2。

注意

此处介绍的Web目录结构不仅仅针对Tomcat,在所有的JSP服务器中都适用。

表2.2 Web应用的目录结构

图2.14 Web应用的目录结构

在classes以及lib子目录下,都可以存放Java类文件。在运行过程中,Tomcat的装载器会先装载classes目录下的类,再装载lib目录下的类。因此,如果两个目录下存在同名的类,classes目录下的类具有优先权。一般情况下lib中只应存放外部引用的类,如JDBC驱动程序的JAR文件和后文中会提到的开源项目的包,而用户自己编写的类文件应该放在classes目录下。用一个图来说明更加清楚,如图2.14所示。

注意

WEB-INF目录对用户来说是隐藏的,用户不能通过浏览器直接访问这个目录中的文件。

2.2.3 解读web.xml

Java Web应用通过一个基于XML的发布描述符文件来配置其发布信息,这个文件名为web.xml,它存放于WEB-INF子目录下。在web.xml文件中可主要包含如下配置信息:

1)Servlet的定义。

2)Servlet的初始化参数。

3)Servlet以及JSP的映射。

4)Filter的定义。

5)安全域配置参数。

6)welcome文件清单。

7)资源引用。

8)环境变量的定义。

创建一个默认的web.xml文件,并把这个文件放到WEB-INF目录中,该文件的内容如实例2-1所示。

【实例2-1】默认web.xml页面

01   <?xml version="1.0" encoding="UTF-8"?>
02   <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
03     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
05     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
06     <!--空web配置, 只包含欢迎页面-->
07     <welcome-file-list>
08        <welcome-file>index.jsp</welcome-file>
09     </welcome-file-list>
10   </web-app>

【代码剖析】上面代码中的第7行标签<welcome-file-list>为文件清单,这里只包含欢迎页面。

2.2.4 编写第一个JSP

创建两个JSP文件,其中一个是login.jsp,如实例2-2,它显示登录页面,要求输入用户名和口令。这个页面链接到另一个JSP文件welcome.jsp,如实例2-3,显示欢迎页面。JSP的语法将在以后的章节详细讨论,本节侧重于介绍JSP的发布过程。这两个JSP文件都应放在jsp_example自己的目录下。

【实例2-2】login.jsp示例

01   <html>
02     <head>
03        <title>第一个JSP</title>
04     </head>
05     <body>
06        <form name="loginForm" method="post" action="welcome.jsp">
07           <table>
08             <tr>
09                <td>
10                  用户名:
11                </td>
12                 <td>            <!--用户名输入框-->
13                   <input type="text" name="username">
14                </td>
15             </tr>
16             <tr>
17                <td>
18                  密码:
19                </td>
20                <td>            <!--密码输入框-->
21                  <input type="口令" name="password">
22                </td>
23             </tr>
24             <tr>
25                <td>            <!--提交按钮-->
26                  <input type="Submit" name="Submit" value="确定">
27                </td>
28             </tr>
29           </table>
30        </form>
31     </body>
32   </html>

【代码剖析】上面代码中第13行创建了一个文本框类型input标签,在第21行创建了一个密码类型input标签,最后又通过第26行创建了一个“确定”按钮。

【实例2-3】welcome.jsp示例

01   <html>
02     <head>
03        <title>欢迎</title>
04     </head>
05     <body>
06        欢迎您:
07        <%=request.getParameter("username")%>     <!--显示相应的信息-->
08     </body>
09   </html>

【代码剖析】上面代码中第7行通过类request的getParameter()方法获取参数username的值。

2.2.5 发布与测试

按表2.2中Web应用的目录结构,在Tomcat的webapps目录下创建目录jsp_example,将写好的两个jsp文件和web.xml文件放入指定目录,重新启动Tomcat。访问JSP可以看到结果,如图2.15和图2.16所示。

图2.15 登录界面

图2.16 欢迎页面