4.1.1 编写web.xml文件
在Web服务器中运行Servlet的部分被称为Servlet容器。Servlet要想在Servlet容器中正常运行,必须要使用web.xml(在WEB-INF目录中)文件进行配置(虽然使用Java IDE在大多数情况下是不需要手工配置web.xml的,但理解和掌握web.xml的常用配置将会有助于更进一步学习Java Web技术)。web.xml是一个标准的XML格式文件。下面是一个标准的web.xml配置文件的内容:
<!-- web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!-- web.xml中的顶层元素 -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<!-- 定义欢迎页 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 定义Servlet -->
<servlet>
<description></description>
<display-name>QueryBook</display-name>
<servlet-name>QueryBook</servlet-name>
<servlet-class>chapter3.QueryBook</servlet-class>
</servlet>
<!-- 定义Servlet映射 -->
<servlet-mapping>
<servlet-name>QueryBook</servlet-name>
<url-pattern>/QueryBook</url-pattern>
</servlet-mapping>
</web-app>
在上面的web.xml文件中中有四个主要的元素:
1. <web-app>:最顶层的元素。所有的web.xml文件都必须拥有这个元素。<web-app>主要描述了当前使用的Servlet的版本以及其他一些文档类型声明,如上面的web.xml文件中描述了Servlet的版本是2.5
2. <servlet>:用于定义和Servlet相关的信息,这个元素含有四个子元素:
(1)<servlet-class>:用来定义Servlet和哪一个具体的类对应,如本例中定义的是chapter3.QueryBook。
(2)<servlet-name>:用于定义Servlet的唯一标识(也就是Servlet名)。如本例中定义了QueryBook。<servlet>元素可以有多个,但是每个<servlet>的<servlet-name>元素的值不能重复,否则Tomcat在启动时会抛出异常。
(3)<description>:该元素提供了用于描述Servlet的文本信息。
(4)<display-name>:该元素提供了一些GUI工具可以显示的Servlet的文本信息。
3. <serlvet-mapping>:该元素一般和<servlet>元素成对出现。用于将Servlet映射成用户可访问的Web路径。其中<url-pattern>定义了可访问的Web路径,但要注意,这个Web路径必须以“/”开头,否则Tomcat在启动时会抛出异常。在第3章访问QueryBook的URL是“http://localhost:8080/demo/QueryBook”。而在<url-pattern>中定义的就是“/QueryBook”部分。当然,也可以将其定义成其他的形式,甚至可以将其模拟成其他语言的Web程序,如将<url-pattern>元素的值设为如下形式:
<url-pattern>/abc.php</url-pattern>
在IE地址栏中只要输入http://localhost:8080/demo/abc.php就可以访问QueryBook了。<url-pattern>中的<servlet-name>与<servlet>中的<servlet-name>完全一样,表示当前的<servlet-mapping>要映射的Servlet名。<servlet-mapping>和<servlet>是多对一的关系。也就是说,多个<servlet-mapping>可以对应一个<servlet>,这样就可以为一个Servlet定义多个可访问的Web路径。如下面的配置代码所示:
<servlet>
<servlet-name>QueryBook</servlet-name>
<servlet-class>chapter3.QueryBook</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>QueryBook</servlet-name>
<url-pattern>/QueryBook</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>QueryBook</servlet-name>
<url-pattern>/querybook.abc</url-pattern>
</servlet-mapping>
如果使用上面的配置,就可以同时通过如下两个URL来访问QueryBook:
http://localhost:8080/demo/QueryBook
http://localhost:8080/demo/querybook.abc
4. <webcome-file-list>:该元素其实就相当于IIS中的默认页。也就是说,如果在浏览器中只访问http://localhost:8080/demo,而不指定具体的Servlet或其他Web资源的路径,系统会自动访问<webcome-file-list>元素中<webcome-file>子元素所指定的文件或Web路径。要注意的是,<webcome-file>元素只能是相对于当前Web工程的相对路径,不能是绝对路径,如http://www.sina.com.cn是不合法的。<webcome-file>元素的值可以是任何形式的相对路径,但前面不能加“/”,这一点和<url-pattern>元素恰恰相反。如<webcome-file>元素的值可以是“index.jsp”,但不能是“/index.jsp”,否则将无法访问。<webcome-file-list>元素可以有多个<webcome-file>子元素,如果第一个<webcome-file>元素所指的相对路径无法访问,系统就会访问第二个<webcome-file>元素所指的相对路径,以此类推。