Java Web 应用程序部署描述符「deployment descriptor」文件的功能与它的名称所描述的非常相似:它描述了应该如何部署web应用程序。web应用程序部署描述符不仅仅描述web应用程序的安全信息,还描述了更多关于web应用程序的内容,但是本章只讨论与安全相关的应用程序部署描述符的元素。
对于使用Java编程语言编写的web应用程序,web应用程序部署描述符是使用可扩展标记语言(XML)语法编写的。web应用程序部署描述符名为web。当包含在web应用程序中时,它必须驻留在web应用程序根目录的web - inf子目录中。该文件的内容指导部署工具使用指定的安全设置部署模块或应用程序,并描述其他特定的配置要求和/或容器选项。
Java 网络应用使用部署描述符文件来确定如何将网址映射到 servlet、哪些网址需要身份验证以及其他信息。此文件名为 web.xml
,位于应用 WAR 中的 WEB-INF/
目录下。 web.xml
是网络应用的 servlet 标准的一部分。
下面是 web.xml
的一个简单示例,它将所有网址路径 (/*) 映射到 servlet 类 mysite.server.ComingSoonServlet
:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<servlet>
<servlet-name>comingsoon</servlet-name>
<servlet-class>mysite.server.ComingSoonServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>comingsoon</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
web.xml
定义网址路径与通过这些路径来处理请求的 servlet 之间的映射。网络服务器使用此配置来标识用于处理指定请求的 servlet,以及调用与请求方法相对应的类方法。例如,doGet()
方法用于处理 HTTP GET
请求。
要将网址映射到 servlet,您需要用 <servlet>
元素声明 servlet,然后通过 <servlet-mapping>
元素定义从网址路径到 servlet 声明的映射。
<servlet>
元素用于声明 servlet,其中包括用文件中的其他元素指代 servlet 的名称、用于 servlet 的类,以及初始化参数。您可以使用具有不同初始化参数的同一类声明多个 servlet。每个 servlet 的名称在部署描述符中必须是唯一的。
<servlet>
<servlet-name>redteam</servlet-name>
<servlet-class>mysite.server.TeamServlet</servlet-class>
<init-param>
<param-name>teamColor</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<param-name>bgColor</param-name>
<param-value>#CC0000</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>blueteam</servlet-name>
<servlet-class>mysite.server.TeamServlet</servlet-class>
<init-param>
<param-name>teamColor</param-name>
<param-value>blue</param-value>
</init-param>
<init-param>
<param-name>bgColor</param-name>
<param-value>#0000CC</param-value>
</init-param>
</servlet>
<servlet-mapping>
元素用于指定网址格式以及已声明 servlet 的名称(用于网址与格式匹配的请求)。网址格式可以在格式的开头或结尾使用星号 (*),以指示零个或多个任意字符。该标准不支持在字符串中间使用通配符,并且不允许在一个格式中使用多个通配符。模式会与网址的完整路径匹配,从域名后面的正斜线 (/) 开始(含正斜线)。网址路径不能以英文句点 (.) 开头。
<servlet-mapping>
<servlet-name>redteam</servlet-name>
<url-pattern>/red/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>blueteam</servlet-name>
<url-pattern>/blue/*</url-pattern>
</servlet-mapping>
在此示例中,TeamServlet
类处理了网址 http://www.example.com/blue/teamProfile
的请求,其中 teamColor
参数等于 blue,bgColor
参数等于 #0000CC
。Servlet 可以使用 ServletRequest
对象的 getPathInfo()
方法获取网址路径中与通配符匹配的部分。
Servlet 可以访问其初始化参数,方法是使用自己的 getServletConfig()
方法获取其 servlet 配置,然后以参数形式使用参数名称来对配置对象调用 getInitParameter()
方法。
String teamColor = getServletConfig().getInitParameter("teamColor");