目录
<?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" version="2.5"> <!-- 监听器监听其他的spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 解决post乱码 --> <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> <!--配置前端控制器--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
上面是SSM项目中web.xml配置文件中的内容,起初只知道怎么配置,但是对于其加载过程和含义并没有太多的理解.今天趁着空闲的时间对它做一个小小的总结合学习
加载过程
web项目启动的时候,首先对web.xml文件进行一个加载,只有此文件没有异常的时候,我们加载的web项目才算是真正的跑起来,而web.xml文件的内容加载也是由一定的顺序的.
listener和context-param
- 在启动tomcat的时候,会首先加载web.xml配置文件中的两个节点<listener>和<context-param>
- 然后tomcat会创建一个ServletContext,应用范围内都可以使用这个上下文
- 接着容器会将读取到的<context-param/>内容转换为键值对,交给ServletContext
- 容器创建<listener>中的类实例,即创建监听,(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)
- 在监听的类中有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
- 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
ContextLoaderListener作用
ContextLoaderListener监听器的作用是在启动web容器的时候,自动装配一些配置信息.如果在web.xml中不写任何参数配置信息,则默认配置路径是/WEB-INF/applicationContext.xml,在WEB-INF下目录创建的xml文件的名称必须是applicationContext.xml.如果想要加载自定义的参数配置信息,则需要使用<param-value>进行配置.
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext-*.xml</param-value> </context-param>
- <param-value>:指定相应的xml文件名,如果有多个xml文件,可以使用
{ <param-value>classpath*:文件夹名/applicationContext-*.xml</param-value>}
由此可见,applicationContext.xml的文件位置有两种默认实现:
- 第一种:直接将之放到/WEB-INF下,之在web.xml中声明一个listener;
- 第二种:将之放到classpath下,但是此时要在web.xml中加入<context-param>,用它来指明你的applicationContext.xml的位置以供web容器来加载
Filter
过滤器实际上就是对web提交过来的数据进行处理,然后在交付给对方,可以简单的理解为是一个中间加工处理的地方,通常用于拦截reqeust和response进行过滤处理
过滤器可以有多个,每个过滤器都有自己独立的功能,过滤器的执行顺序依赖于<filter-mapping>里配置的顺序.
servlet
当监听和过滤配置结束之后,接下来用户的请求的请求就需要被处理和响应,此时就需要使用servlet(关于servlet的介绍)的配置,web.xml文件中配置的是前端控制器的路径,代表着所有进入前端控制器的请求都会进入这个servlet进行处理.
<!-- 配置一个servlet -->
<!-- servlet的配置 -->
<servlet>
<!-- servlet的内部名称,自定义。尽量有意义 -->
<servlet-name>springmvc</servlet-name>
<!-- servlet的类全名: 包名+简单类名 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化参数-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
<servlet-name>springmvc</servlet-name>
<!-- servlet的映射路径(访问servlet的名称) -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
参考链接: