前言
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>