Spring MVC 加载流程
第一关: web.xml 配置文件
下面截取部分web.xml中配置
从上面可以很容易看出,web.xml 的加载顺序。
第一步 context-param
主要是加载配置, 上下文参数
contextConfigLocation
classpath:applicationContext.xml
第二步 listener
这步开启监听
org.springframework.web.util.IntrospectorCleanupListenerorg.springframework.web.context.ContextLoaderListenerlistener.SessionListener
2.1 org.springframework.web.util.IntrospectorCleanupListener用来检测处理Introspector内存泄漏问题的辅助类
java.beans.Introspector 这个是JDK中的类,主要用途是检测JavaBean 如果有符合规范的,就会启动一个系统级别的缓存。
有个缺点就是无法被回收,所以spring框架启动了一个 IntrospectorCleanupListener,
就是专门来对付这种内存泄漏问题的。
2.2 org.springframework.web.context.ContextLoaderListener 这个监听器在spring配置中起到非常重要的作用,自动装配ApplicationContext
的配置信息。在web.xml配置的监听器,启动容器时,就会默认执行它实现的方法。
如第一步添加的 contextConfigLocation ,就是在这步进行自动装配和加载的。 默认的加载路径:
/WEB-INF/applicationContext.xml 也可以添加自定义的。可以用通配符来加载:
/WEB-INF/class/applicationContext-*.xml
第三步 filter
encodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrue
这步可以加载很多过滤器,也可以自定义过滤器。 这里加载的是spring的字符集过滤器。
和前台交互的时候,会有不同的字符集,提交到后端 ,甚至出现乱码。
这个类就是来处理这种乱码的。
重要参数:forceEncoding 这个设置了true,强制所以的请求响应都使用encoding编码。
定位问题的时候,出现无论怎么设置,总乱码,可以检测下这个小开关。
第四步 servlet
springmvcorg.springframework.web.servlet.DispatcherServlet1springmvc*.do
4.1 DispatcherServlet 是Spring MVC 的控制层
4.2 从下向上的关系如下
4.3 可以看到 DispatcherServelet 类的本质还是Servlet,这个是由于web容器启动后首先调用的就是Servlet初始化 init 的方法。
4.4 DispatchServelet 被创建和继承如下: