Java Web部署描述文件:web.xml [部分翻译]

前言

Java web应用使用部署描述文件来绝对URL映射到Servlets的规则,哪些URL需要验证,以及一些其他的信息,这个文件就是web.xml,在servlet标准中这个文件位于应用war包的WEB-INF/目录下。
更多web.xml标准的信息,可以访问: the Metawerx web.xml reference wiki the Metawerx web.xml reference wiki

About Deployment Descriptors

web应用部署描述文件可以反映class文件,资源,配置,以及Java web server 使用它们来应对web请求。当web应用接收到请求时,通过应用部署描述文件把url映射到处理请求的代码上。
部署描述文件是一个名为web.xml的文件,它存在于war包下面的WEB-INF/目录下,是一个以<web-app>为根的XML文件。
以下是一个简单的web.xml示例,其将所有的URL路径映射到mysite.server.ComingSoonServlet:

1
2
3
4
5
6
7
8
9
10
<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>

如果你将应用程序分为多个模块,则需要为每个模块配置额外的参数,这个在 Modules 有详解。

Servlets and URL Paths

web.xml定义了URL的路径和处理请求的servlets之间的映射关系。例如web服务器使用配置用来把HTTP GET请求映射到请求处理函数doGet()
通过<servlet>元素声明一个servlet,然后通过<servlet -mapping>元素定义一个映射关系。
<servlet> 元素声明了servlet,包括一个servlet名,servlet使用的类,初始化参数。您可以声明多个servlet使用相同的类有不同的初始化参数。每个servlet的名称必须是惟一的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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>元素指定一个URL模式和模式名。URL模式可以使用星号(*)的开头或结尾的模式来表示零个或多个任意字符。(标准不支持在中间的通配符,并且不允许多个通配符) 模式匹配的完整路径的URL,开始,包括域名后的正斜杠(/)

1
2
3
4
5
6
7
8
9
<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>

在上述例子中可以看出,请求URLhttp://www.example.com/blue/teamProfile带着ServletConfig的参数被 TeamServlet类处理,Servlet也可以用过request.getPathInfo()得到URL的一部分。

静态文件,文件逐字用户比如图像、CSS或JavaScript,分开处理路径在部署描述符中提到。请求URL路径相匹配的路径到一个文件在战争中,被认为是一个静态文件将提供文件,无论servlet和过滤器映射在部署描述符中。您可以排除文件从那些使用appengine-web视为静态文件。xml文件。

servlet可以访问它的初始化参数通过servlet的getServletConfig()方法和getInitParameter()方法使用参数的名称作为参数,如下:
String teamColor = getServletConfig().getInitParameter("teamColor");

JSPs

一个应用可以使用JSP来扩展web页面,jsp就是HTML代码与Java代码的混合页面。
App Engine支持jsp的自动编译和URL映射。JSP文件在应用程序的war包(WEB-INF/之外)的以.jsp结尾是自动编译成servlet类和映射到URL路径相当于jsp文件的路径从WAR根源。例如,如果应用程序有一个JSP文件命名的开始。jsp在子目录命名register/ WAR中,App Engine编译它并将它映射到URL路径/register/ start.jsp

1
2
3
4
5
6
7
8
9
<servlet>
<servlet-name>register</servlet-name>
<jsp-file>/register/start.jsp</jsp-file>
</servlet>

<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/register/*</url-pattern>
</servlet-mapping>

Security and Authentication

Secure URLs

The Welcome File List

Filters

Error Handlers

web.xml Features Not Supported

原文链接:The Deployment Descriptor: web.xml