一直以来都在用java的springmvc,没有深刻去探究关于spring以及mvc的一些内在的工做过程,今天利用休息时间,仔细阅读了一下咱们的源码,并结合搜索引擎,明白了几个以前解决了问题,还没理解原理的缘由所在. html
本文将对SpringMVC的理解进行追踪描述,一来但愿你们批评指正,纠正错误的理解,二来给本身一个留念,当之后忘记的时候,还有个记录,能够再次回想起来,三来总结技术经验,但愿从此的路走的更好.java
早两天我部署了一个项目,全部的配置都是从公司项目中抽取出来的.公司项目运行得很好,而我本身的项目却老是404,在这以前,为了看项目是否部署好,作了个html页面作静态资源测试,因而增长了静态资源配置以下:web
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>spring
</servlet-mapping> mvc
项目中有两个配置文件,一个是MyProject-sevlet.xml,另外一个是ApplicationContext-Services.xmlapp
在web.xml中配置是这样的webapp
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/ApplicationContext-Services.xml</param-value>
</context-param> jsp
<servlet>
<servlet-name>MyProject</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/MyProject-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>测试
注解驱动<mvc:annotation-driven/>是写在ApplicationContext-Services.xml,而不是MyProject-sevlet.xml,不管怎么访问jsp页面,都是404 ,后来发现,只要在MyProject-sevlet.xml加上<mvc:annotation-driven/>就能正常访问.猜测应该是没有优先加载ApplicationContext-Services.xml所致使的问题,但奇怪的是,公司项目配置文件就是这么写的,也没有其余特殊的配置,为何那个项目能优先记载这个配置呢? 查资料说是由于增长了default这个servlet配置,但感受解释的不够通透,不能彻底理解,但愿各位大神指点迷津.ui
另外,从application来讲,使用WebApplicationContextUtils对象时,发现它有findWebApplicationContext,getRequiredWebApplicationContext,getWebApplicationContext,initServletPropertySources,registerEnvironmentBeans,registerWebApplicationScopes等方法
经过查阅相关资料,总结以下
findWebApplicationContext实际上最终也是调用getWebApplicationContext方法,来获取webapplicationcontext
initServletPropertySources在spring classloader类初始化的时候被调用,用于初始化servlet配置参数
其余方面的总结后续再补充,敬请期待