详解Spring mvc的web.xml配置说明
在说明web.xml配置之前我们先来了解一下需要配置的配置项的作用。
1、监听器(listener)
事件监听,js里应用广泛,各种事件函数的实现,Android和javase也是广泛的应用,各种点击事件的监听。当触发某个事件时,会触发监听在该事件上的所有监听器。spring的org.springframework.web.context.ContextLoaderListener就是实现了ServletContextListener接口的监听器,该监听器会在容器(tomcat,jetty)启动的时候触发,然后就可以启动spring相应的配置信息。
2、过滤器(filter)
一个HTTP请求就是一次浏览器客户端与服务器的交互,在这次交互中有浏览器向服务器发送数据的过程,还有服务器接收到请求数据后处理完将处理结果返回的过程,当返回结果成功就完成了一次HTTP请求(其中的握手,路由等就不细说了)。在浏览器与服务器一来一回的过程中我们可以做一些事情,例如将请求数据编码方式统一,添加IP校验,session校验等相关servlet处理前的工作,在servlet处理后响应给浏览器客户端的过程中我们也可以进行过滤工作。spring的org.springframework.web.filter.CharacterEncodingFilter就是一个过滤器,它在请求未到达servlet之前将请求编码转换为我们在<param-value>UTF-8</param-value>中配置的编码方式,过滤的路径是filter-mapping的url-pattern配置的路径。
3、处理请求(servlet)
一个HTTP请求路径根据web.xml配置的拦截路径匹配后会被相应的servlet处理(在处理之前会被配置的过滤器处理),在这个servlet中能够拿到请求的数据信息,然后进行相应的处理,处理完成后再响应给浏览器。spring的org.springframework.web.servlet.DispatcherServlet就是一个servlet,不过这个servlet是spring自己实现的,它处理的请求路径在servlet-mapping下的url-pattern中进行配置,配置完成后会将所有该配置拦截到的请求交给spring的DispatcherServlet进行处理,这个spring核心的servlet我将它理解为一个路由的作用,它会将拦截到的请求根据请求路径和请求方式进一步的分发下去,分发到spring的@Controller下的@RequestMapping(value={"/xxx"},method=RequestMethod.xox)下的方法下进行处理。
详细配置如下
4、spring容器的初始化
<!--上下文配置文件位置--> <context-param> <param-name>contextConfigLocation</param-name> <!--spring配置文件所在位置,启动spring时会去该路径下查找该配置文件--> <param-value>classpath*:spring/spring-config.xml</param-value> </context-param> <!--spring上下文监听器,初始化启动容器时启动spring--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
spring的上下文监听器配置,ContextLoaderListener实现了ServletContextListener接口,当容器加载时启动spring容器。ServletContextListener在contextInitialized方法中初始化spring容器。有几种办法可以加载spring容器,通过在web.xml的<context-param>标签中配置spring的applicationContext.xml路径,文件名可以任意取,如果没有配置,将在/WEB-INF/路径下查找默认的applicationContext.xml文件。
5、spring容器的核心servlet,拦截的请求路径
<!--spring核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理--> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/META-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <!----> <url-pattern>/</url-pattern> </servlet-mapping>
spring的核心servlet配置,该servlet会将在这里配置拦截的路径转发到spring的controller拦截的路径进行处理,这个servlet相当于一个spring的路由中心,将spring拦截的请求对应的转发下去进行处理。
6、spring的编码过滤器
<!--spring编码过滤器--> <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>
spring的编码过滤器,将该过滤器配置的路径的数据格式统一编码
7、url-pattern配置讲解
在servlet和filter中我们都需要配置url-pattern,但这个配置的解析规则有哪几种我们接下来就详细的说一下。
1、精确匹配:如/xxx.html就只会匹配xxx.html。
2、路径匹配:如/xxx/会匹配以xxx为前缀的url。
3、后缀匹配:如.html会匹配所有以html为后缀的url。
但是对于url-pattern的匹配来说可能会存在冲突的情况,这种情况下就需要排个优先级了,以上三者的优先级为精确匹配>路径匹配>后缀匹配。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。