SpringMvc:spring中的请求处理过程原理分析

SpringMvc 第二篇

有趣的符号

今天的内容相对就比较少了
主要是讲一下今天学习遇到的很好玩的事情,

下图是配置我们上篇讲到的控制器,DispatcherServlet的web.xml中的配置

DispatcherServlet这个控制器本质上呢他是一个Serlvet,所以说我们可以在web.xml中配置它,
在第二个箭头指向的

  <!--
  在SpringMVC中 :/ 与 /*的区别
  /:只匹配所有的请求,不匹配jsp
  /*:匹配所有的请求,包括jsp页面

  -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

/中的这个/
就是我说的十分有趣的点,这个代表的DispatcherServlet匹配范围,
/*:代表匹配所选定的目录下所有的请求包括静态资源如 html,css,jsp等
/:代表匹配所有选定目录下的所有请求不包括静态资源

Q:这个时候就会有人提出极限二连问:他们是如何执行的呢?,我们该如何判断什么情况去使用他们呢?

关于" / * "的A:

当把所有的请求交给DispatcherServlet来处理的时候,
没有被 @RequestMapping() 映射的资源就无法成功响应,比如静态资源,jsp,html等文件
我们是不会去写@RequestMapping("/.jsp")或是@RequestMapping("/.html")这样的映射
所以当我们在/使用的是 / 的话就会导致我们的所有静态资源无法被访问
报出404等路径问题的异常状态码
所以一般我们在使用过滤器等需要覆盖全部请求的组件中使用 / 来匹配全部
流程图:

关于" / "的A:

经过阅读一些博客和讨论得知,在使用 / 来处理请求的时候
Servlet执行是有排序的,如下:

  1. 最先匹配jsp,优先处理(由tomcat处理)
  2. @RequestMapping映射的请求(由DispatcherServlet处理)
  3. 其他请求如html(由DispatcherServlet处理,如果没有映射则无法处理)
    所以一般我们会在DispatcherServlet的配置用用到 “/” 来处理所有被@RequestMapping映射的请求
    流程图:

细心的伙伴们会发现,唉这两个家伙一个匹配全部但是不包括html等的一个只匹配映射的那我们在开发中如何去两者都使用呢?

万一我既有静态也有映射的请求呢?

别着急!Spring他都想到了!
在SpringMVC.xml中mvc支持有这么两个好用的功能

mvc:default-servlet-handler/

这个功能有什么作用呢?
他将DispatcherServlet处理的请求转发给tomcat的DefaultServlet来处理,解决了静态请求的问题

mvc:annotation-driven/

这个想必大家也猜到了,
这个功能用来处理使用@@RequestMapping映射的请求

将以上二者搭配使用就可以达到让程序有效处理全部请求了
详细执行图:

今天的记录博客就到这里啦,晚安各位还在努力奋斗的小伙伴们

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷环渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值