Web.xml详解


Web.xml分为如下几部分:

  1. context-param;
  2. filter/filter-mapping;
  3. servlet/servlet-mapping;
  4. listener;
  5. welcome-file-list;
  6. 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()之后的代码,最后返回响应。