Web.xml分为如下几部分:
- context-param;
- filter/filter-mapping;
- servlet/servlet-mapping;
- listener;
- welcome-file-list;
- mime-mapping;
初始化顺序:context-param -> listener -> filter -> servlet
context-prarm:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/application-context.xml
/WEB-INF/config/cache-context.xml
/WEB-INF/config/cacore-context.xml
/WEB-INF/config/cacms-context.xml
/WEB-INF/config/quartz-task.xml
</param-value>
</context-param>
param-name:设定上下文的参数名称。必须是唯一名称
param-value:设定的参数名称的值
可以通过getServletContext().getInitParameter(“contextConfigLocation”)得到。作为全局变量为每一个servlet初始化。所以,跟整个application有关。tomcat会首先加载它。
如果不定义context-param,web容器将通过listener加载默认的web-inf下的application.xml文件。
Filter:
创建Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法。
1. void init():初始化
2. void destroy():销毁
3. void doFilter(ServletRequest request, ServletResponse response,FilterChain chain):执行过滤处理
过滤链FilterChain:
两个过滤器,EncodingFilter负责设置编码,SecurityFilter负责控制权限,服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。执行的顺序就如下图所示,执行第一个过滤器的chain.doFilter()之前的代码,第二个过滤器的chain.doFilter()之前的代码,请求的资源,第二个过滤器的chain.doFilter()之后的代码,第一个过滤器的chain.doFilter()之后的代码,最后返回响应。