今天主要学习spring mvc 框架的内容,以及相关的配置,如果有哪里不对,希望大家可以给指正,小弟在这里先谢谢大家!!!
spring mvc 的 DispatcherServlet在web.xml文件中配置的情况,因为它是一个servlet,所以就可以被配置多次,这个类相当于将uri-pattern中的uri获取到,就像一堆uri中找到自己的相关请求,这样的就可以分离uri,比如说有.do结尾的还有.form结尾的,那我们就需要用不同的servlet进行分解处理,这里有一点很重要,就是dispatcherServlet每一个配置,都会产生一个webApplectionContext上下文对象,同时保存在servletContext,request中!!!这里也就是spring对于uri的一次分解。
spring在servlet初始化的时候通常有2种加载配置文件的方式,一种是spring中在servlelt中配置文件的方式,另外就是web.xml配置一个监听器进行配置文件的加载。
第一种默认情况下; DispatcherServlet初始化的时候,会在WEB-INF下寻找,【servlet-name】-servlet.xml的配置文件,这个servlet-name就是在web.xml文件中配置的servlet-name,这样在多个DispatcherServlet中的配置时就可以将配置分开,进行解耦。
第一种在配置文件中进行配置;在servlet中配置init-param,这样在servlet进行初始化的时候就会就会加载相应的配置文件,在这里配置文件有两种写法:
<param-value>/WEB-INF/classes/springMvc.xml</param-value>
<param-value>classpath*:/springMVC.xml</param-value>
这里的对比就可以看出classpath就相当于/WEB-INF/classes/文件按目录,在这里还有一点需要注意。
classpath:表示知识加载寻找到的第一个资源,而不进行多次全部遍历寻找;
classpath*:表示会在加载配置文件时会在目录下便利查询符合条件的配置文件;
这里还有一个技巧,就是在classpath后面的文件通配符的使用**/springMVC.xml表示任何目录下的springMVC.xml文件,*.xml表示所有已xml结尾的文件(这个大家肯定都知道)
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/springMVC.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
第二种加载配置文件的方式,就是配置一个监听器,
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
配置监听器在加载的时候,spring会产生一个webApplictionContext的对象,这个对象表示的父上下文的对象,而在servlet中配置的会产生一个子类的DispatcherServlet对象,就是子上下文对象,这两个对象有一定的关系,父上下文对象加载,每一个子类都可以使用父类上下文对象的相关信息,而父类不能使用子类上下文的相关对象,在servlet中进行配置的子类上下文对象的时候,每一个servlet都会出现一个子类的上下文对象,这个servletContext对象当有请求过来以后,产生了request对象时,会将servletContext对象保存到request对象中。