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. 加载顺序
-
启动一个 web 项目的时候,容器会去读它的配置文件 web.xml 读两个节点 listener 和 context-param
- 紧接着,容器创建一个 ServletContext ,这个 web 项目所有部分都将共享这个上下文
- 容器将 context-param 转化为 K-V 对,并交给 ServletContext
-
容器按 web.xml 中定义的顺序初始化 Listener 中的类实例,即创建监听器
-
容器按 web.xml 中定义的顺序初始化 Filter 中的类实例,即创建过滤器
- 容器按 web.xml 中定义的顺序初始化 Servlet 中的类实例