spring MVC 的 web.xml 配置讲解

一、在说明web.xml配置之前我们先来了解一下需要配置的各个配置项的作用。

1、监听器(listener):事件监听,js里应用广泛,各种事件函数的实现,Android和java se也是广泛的应用,各种点击事件的监听。当触发某个事件时,会触发监听在该事件上的所有监听器。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 ) 下的方法下进行处理。


二、详细配置如下

1、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文件。

2、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 > / </ url-pattern >
</ servlet-mapping >
spring的核心servlet配置,该servlet会将在这里配置拦截的路径转发到spring的controller拦截的路径进行处理,这个servlet相当于一个spring的路由中心,将spring拦截的请求对应的转发下去进行处理。

3、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的编码过滤器,将该过滤器配置的路径的数据格式统一编码


三、url-pattern配置讲解

在 servlet 和 filter 中我们都需要配置 url-pattern,但这个配置的解析规则有哪几种我们接下来就详细的说一下。

1、精确匹配:如 /xxx.html 就只会匹配 xxx.html。
2、路径匹配:如 /xxx/* 会匹配以 xxx 为前缀的 url。
3、后缀匹配:如 *.html 会匹配所有以 html 为后缀的 url。

但是对于 url-pattern 的匹配来说可能会存在冲突的情况,这种情况下就需要排个优先级了,以上三者的优先级为  精确匹配 > 路径匹配 > 后缀匹配 。





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值