注意代码中以粗体显示的部分,这部分代码使用了<servlet>和<servlet-mapping>元素,以及它们的子元素来部署HelloWorldServlet.在web.xml文件中,可以包含多个<servlet>和<servlet-mapping>元素,用于部署多个Servlet.
<servlet>元素用于声明Servlet,<servlet-name>子元素用于指定Servlet的名字,在同一个Web应用程序中,每一个Servlet的名字必须是唯一的,该元素的内容不能为空。<servlet-class>子元素用于指定Servlet类的完整限定名(如果有包名,要同时给出包名)。
<servlet-mapping>元素用于在Servlet和URL样式之间定义一个映射。它的子元素<servlet-name>指定的 Servlet 名字必须和<servlet>元素中的子元素<servlet-name>给出的名字相同。<url-pattern>子元素用于指定访问该Servlet的URL路径,该路径是相对于Web应用程序上下文根的路径。
经过这样的配置之后,我们可以在浏览器的地址栏中输入http://localhost:8080/ch12/helloworld来访问HelloWorldServlet.当Servlet容器接收到/ch12/helloworld的请求后,就会将请求发送给ch12 Web应用程序的Context(参见第11.6节),ch12 Web应用程序的Context首先移除该Web应用程序上下文路径的前缀/ch12,然后将剩余部分与web.xml文件中配置的<url-pattern>元素的内容相比较,找到对应的Servlet名字为HelloWorldServlet,再根据这个名字找到HelloWorldServlet类,进而实例化这个类,对请求进行处理。
将编写好的web.xml文件保存到%CATALINA_HOME%\webapps\ch12\WEB-INF目录下。读者也可以将%CATALINA_HOME%\webapps\ROOT\WEB-INF目录下的web.xml复制一份,存放到%CATALINA_HOME%\ webapps\ch12\WEB-INF目录下,这个文件的内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
</web-app>
然后编辑这个文件,添加HelloWorldServlet的配置,如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>org.sunxin.ch12.servlet.HelloWorldServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>
%CATALINA_HOME%\webapps\ROOT目录是Tomcat默认的Web应用程序的起始路径,当我们输入http://localhost:8080/时,访问的就是该目录下的Web应用程序资源。如果将本例的Servlet部署在该目录下,访问时只需输入http://localhost:8080/helloworld即可。
Step4:访问HelloWorldServlet
当部署好Servlet之后,对客户端来说,访问Servlet和访问静态页面没有什么区别。为了让读者对Servlet的访问有一个较好的感性认识,在这里我们通过两种方式来访问SimpleHello.