参考:http://blog.youkuaiyun.com/believejava/article/details/43229361
一、加载的顺序
在启动WEB项目时,容器首先会读取web.xml的配置。当这项工作无误时,项目才会被启动。
加载web.xml的顺序如下:
1、context-param:将对应的值存入ServletContext,WEB项目所有部分都将共享这个上下文。
2、listener:根据配置的class类路径来创建监听,项目启动时系统调用对应的监听事件。
3、filter:指定的类路径来实例化过滤器。
4、Servlet:指定对应的Servlet类。在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。
二、主要标签详解
1、基本格式:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
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">
</web-app>
2、display-name:定义了web应用的名称。
3、context-param:用作应用的Servlet上下文初始化参数。
特点:
整个项目唯一;
存在项目的整个生命周期;
任意的Servlet和jsp都可以随时随地访问;
<!-- 定义项目的webAppRootKey,用于区分同一容器下多个项目 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
4、session-config:设置容器的session参数。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
5、listener:为web应用程序定义监听器,监听器用来监听各种事件。监听器的方式定义相同,功能取决去它们各自实现的接口。
常用接口:
ServletContextListener:用于监听Web应用的启动和关闭;
ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变;
ServletRequestListener:用于监听用户的请求;
ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变;
HttpSessionListener:用于监听用户session的开始和结束;
HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。
<!-- Spring的log4j监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
6、Filter:用于对用户请求request进行预处理,也可以对Response进行后处理,是个典型的处理链。
Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截。创建方法:
创建Filter处理类
Web.xml文件中配置Filter
Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
void init(FilterConfig config):用于完成Filter的初始化。FilteConfig用于访问Filter的配置信息。
void destroy():用于Filter销毁前,完成某些资源的回收。
Filter:可包含filter-name、filter-class、init-param、filter-mapping等。
filter-name:用来定义过滤器的名称,该名称在整个程序中都必须唯一。
filter-class:元素指定过滤器类的完全限定的名称,即Filter的实现类。
init-param:为Filter配置参数。
filter-mapping:用来声明Web应用中的过滤器映射,过滤器被映射到一个servlet或一个URL模式。过滤是按照部署描述符的filter-mapping出现的顺序执行的。
<!-- 字符集 过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
7、Servlet:通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户的请求。
配置:
description:为Servlet指定一个文本描述。
display-name:为Servlet提供一个简短的名字被某些工具显示。
icon:为Servlet指定一个图标,在图形管理工具中表示该Servlet。
servlet-name:用来定义servlet的名称,该名称在整个应用中必须是惟一的。
servlet-class:用来指定servlet的完全限定的名称
jsp-file:用来指定应用中JSP文件的完整路径。这个完整路径必须由/开始。
load-on-startup:内容可以为空,或者是一个整数。这个值表示由Web容器载入内存的顺序。
servlet-mapping:将URL模式映射到某个Servlet,即该Servlet处理的URL。
<!-- Spring view分发器 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
8、welcome-file-list:用来指定首页文件名称,包含多个时会查找第一个,如果不存在则查找第二个。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>