web.xml 分析

1. web.xml 作用 

启动一个web工程的时候,容器(Tomcat、Jboss)会先读取 web.xml,处理 web.xml 里定义的配置,比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等!

 

2. 各个节点的作用

2.1 context-param 

<context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>coffeeTest</param-value>
</context-param>

<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.xml</param-value>
</context-param>

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:coffeeTest-application.xml
        </param-value>
</context-param>

context-param 的配置以 key-value 对读入内存

2.2 listener

<listener>
        <listener-class>
                org.springframework.web.util.Log4jConfigListener
        </listener-class>
</listener>

<listener>
        <listener-class>
                org.springframework.web.context.ContextLoaderListener
        </listener-class>
</listener>

监听器,基于 Servlet 规范中的 Listener,用于监听 web 应用程序中的 ServletContext, HttpSession 和 ServletRequest 等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

2.3 filter

<filter>
	<filter-name>encodingFilter</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>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

过滤器,基于 Servlet 规范中的 Filter,通过 Filter,对 web 服务器管理的所有 web 资源:例如 JSP、Servlet、静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

2.4 servlet

<servlet>
        <servlet-name>coffeeTest-dispatch</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-default.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
        <servlet-name>coffeeTest-dispatch</servlet-name>
        <url-pattern>*.action</url-pattern>
</servlet-mapping>

基于 Servlet 规范中的 HttpServlet,通过 url-pattern 匹配对应的请求转到 servlet-class 中配置的 servlet 类,可以用于扩展,处理业务逻辑。

2.5 welcome

<welcome-file-list>
        <welcome-file>index.html</welcome-file>
</welcome-file-list>

 

欢迎页面

3. 加载顺序

  1. 启动一个 web 项目的时候,容器会去读它的配置文件 web.xml 读两个节点 listener 和 context-param

  2. 紧接着,容器创建一个 ServletContext ,这个 web 项目所有部分都将共享这个上下文
  3. 容器将 context-param 转化为 K-V 对,并交给 ServletContext
  4. 容器按 web.xml 中定义的顺序初始化 Listener 中的类实例,即创建监听器

  5. 容器按 web.xml 中定义的顺序初始化 Filter 中的类实例,即创建过滤器

  6. 容器按 web.xml 中定义的顺序初始化 Servlet 中的类实例

猜你喜欢

转载自kafeiwu.iteye.com/blog/2300777