部署
首先,部署描述符必须被命名为web.xml并且位于WEB-INF目录下,Java类必须放置在WEB-INF/classes目录下,而Java类库则必须位于WEB-INF/lib目录下。
一. 概述
虽然web.xml不再是必须的文件,但是,若村咋如下场景,则依然需要部署描述符:
- 需要传递初始参数给ServletContext
- 有多个过滤器,并要指定调用顺序
- 需要更改会话超时设置
- 要限制资源的访问,并配置用户身份验证方式
描述符的框架:
<?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"
>
</web-app>
- xsi:schemaLocation属性指定了模式文档的位置,以便可以进行验证。version属性指定了Servlet规范的版本。
- 可选的metadata-complete属性指定部署描述符是否是完整的,若值为True,则Servlet/JSP容器将忽略掉Servlet注解。若值为False或不存在,则容器必须检查类文件的Servlet注解,并扫描web.xml文件。
每个元素的配置规则可见app_3_0.xsd文档,可以从如下网站下载:
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsdapp_3_0.xsd包括另外一种模式(webcommon_3_0.xsd),其中包含了大部分信息。可以从如下网站下载:
http://java.sun.com/xml/ns/javaee/web-common_3_0.xsdwebcommon_3_0.xsd包括了javaee_6.xsd,jsp_2_2.xsd两种模式。
二. 核心知识点
2.1 web-app元素是文档的根元素,并且可以具有如下子元素:
- Servlet声明
- Servlet映射
- ServletContext的初始化参数
- 会话配置
- 监听器类
- 过滤器定义和映射
- MIME类型映射
- 欢迎文件列表
- 错误页面
- JSP特定的设置
- JNDI设置
2.2 web-app核心元素
- context-param
- distributable
- error-page
- filter
- filter-mapping
- listener
- locale-encoding-mapping-list
- locale-encoding-mapping
- login-config
- mime-mapping
- security-constraint
- security-role
- Servlet
- servlet-mapping
- session-config
- welcome-file-list
- JSP-Specific-Elements
- taglib
- jsp-property-group
2.3 web fragment
Servlet 3 添加了web fragment特性,用来为已有的Web应用部署插件或框架。web fragment被设计成部署描述的补充,而无需编辑web.xml文件。一个web fragment基本上包含了常用的Web对象,如Servlet、过滤器和监听器,其他资源如JSP页面和静态图像的包文件(JAR文件)。一个web fragment也可以有一个描述符,类似的部署描述符的XML文档。web fragment描述符必须命名为web-fragment.xml,并位于包的META-INF目录下。一个web fragment描述可能包含任意可出现在部署描述符web-app元素下的所有元素,再加上一些web fragment的特定元素。一个应用程序可以有多个Web片段。