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

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

SpringMvc 第二篇

有趣的符号

今天的内容相对就比较少了

主要是讲一下今天学习遇到的很好玩的事情,

1.png

下图是配置我们上篇讲到的控制器,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等路径问题的异常状态码

所以一般我们在使用过滤器等需要覆盖全部请求的组件中使用 / 来匹配全部

流程图:

2.png


关于" / "的A:

经过阅读一些博客和讨论得知,在使用 / 来处理请求的时候

Servlet执行是有排序的,如下:


1、最先匹配jsp,优先处理(由tomcat处理)

2、@RequestMapping映射的请求(由DispatcherServlet处理)

3、其他请求如html(由DispatcherServlet处理,如果没有映射则无法处理)

所以一般我们会在DispatcherServlet的配置用用到 “/” 来处理所有被@RequestMapping映射的请求

流程图:

3.png

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

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

别着急!Spring他都想到了!

在SpringMVC.xml中mvc支持有这么两个好用的功能


mvc:default-servlet-handler/

这个功能有什么作用呢?

他将DispatcherServlet处理的请求转发给tomcat的DefaultServlet来处理,解决了静态请求的问题


mvc:annotation-driven/

这个想必大家也猜到了,

这个功能用来处理使用@@RequestMapping映射的请求


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

详细执行图:

4.png


相关文章
|
1月前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
61 0
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
42 1
|
1月前
|
前端开发 搜索推荐 Java
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
|
28天前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
65 1
|
28天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
66 0
|
1天前
|
安全 Java API
Spring工厂API与原理
Spring工厂API与原理
22 10
|
1天前
|
XML JSON Java
[AIGC] 在Spring Boot中指定请求体格式
[AIGC] 在Spring Boot中指定请求体格式
|
28天前
|
XML 缓存 Java
天天用 Spring,bean 实例化原理你懂吗
天天用 Spring,bean 实例化原理你懂吗
17 0
|
29天前
|
敏捷开发 监控 前端开发
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
69 0