前言
接着前面一片文章,继续解析各配置文件是用来干嘛的。只有弄懂每一个配置项的意义,才能更好的掌握springMVC.
问题
web.xml文件详解:
1、web.xml文件作用是什么?
web.xml文件的作用是配置web工程启动,对于一个web工程来说,web.xml可以有也可以没有,如果存在web.xml文件;web工程在启动的时候,web容器(tomcat容器)会去加载web.xml文件,然后按照一定规则配置web.xml文件中的组件。2、web容器加载web.xml文件的规则是怎样的? web容器加载顺序:ServletContext -> context-param -> listener -> filter ->servlet ;不会因在web.xml中的书写顺序改变: a、web容器启动后,会去加载web.xml文件,读取listener和context-param两个节点 b、创建一个ServletContext(Servlet上下文)这个上下文供所有部分共享 c、容器将context-param转换成键值对,交给ServletContext d、接着按照上述顺序继续执行SpringMVC的web.xml文件
1、配置代码及流程图示例:
复制代码 Archetype Created Web Application contextConfigLocation classpath:/spring/* encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /* org.springframework.web.context.ContextLoaderListener SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/springmvc.xml 1 SpringMVC /
2、加载顺序
a、首先加载Spring容器加载器:ContextLoaderListener复制代码 org.springframework.web.context.ContextLoaderListener
查看ContextLoaderListener源码可以发现其实现了ServletContextListener并继承了ContextLoader类,ServletContextListener主要用于监听web容器的启动和销毁,ContextLoader用于web容器启动后加载springApplicationContext上下文。
ServletContextListener的两个方法为contextInitialized,contextDestroyed,主要用来监听Web应用的生命周期,当web应用初始化或者结束时会触发ServletContextEvent,并由监听器监听触发其他操作。 ContextLoader主要用于加载上下文:当web服务器开启时候,触发ServletContextEvent并被ContextLoaderListener监听到,此时执行,ContextLoaderListener中的contextInitialized方法,此方法为ContextLoader中的方法,查看源码可以发现其创建了WebApplicationContext,并将springApplicationContext中的bean注册到容器中供项目使用。b、加载过滤器Filter(此处以编码过滤器CharacterEncodingFilter为例)此过滤器的作用就是设置请求参数的编码为UTF-8.
encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 复制代码 encodingFilter /*
c、加载Servlet:初始化DispatcherServlet,在SpringMVC架构中,DispatchServlet负责请求分发,起到控制器的作用
SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/springmvc.xml 1 复制代码 SpringMVC /