原力计划SpringMVC的请求处理流程及核心组件

网友投稿 562 2022-10-17

原力计划SpringMVC的请求处理流程及核心组件

原力计划SpringMVC的请求处理流程及核心组件

前言:SpringMVC请求处理流程,核心组件,主要注解等知识是面试中经常被问到的问题,简单看了下之前看的视频的笔记,并结合自己的理解写下了这篇博客,希望能加深自己的印象以及帮助的诸位小伙伴儿们爛爛

如果有什么需要改进的地方还请大佬斧正

文章目录

SpringMVC的请求处理流程

SpringMVC通过前端控制器(DispatcherServlet)拦截并处理用户请求

1.前端发送请求被前端控制器DispatcherServlet拦截2.前端控制器调用处理器映射器HandlerMapping对请求的URL进行解析,解析之后返回调用给前端控制器3.前端控制器调用处理器适配器处理调用链4.处理器适配器HandlerAdapter基于反射通过适配器设计模式完成处理器(控制器Handler)的调用处理用户请求5.处理器适配器HandlerAdapter将控制器返回的视图和数据信息封装成ModelAndView响应给前端控制器6.前端控制器调DispatcherServlet调用视图解析器ViewResolver对ModelAndView进行解析,将解析结果(视图资源和数据)响应给前端控制器7.前端控制器调用视图view组件将数据进行渲染,将渲染结果(静态视图)响应给前端控制器8.前端控制器响应用户请求

SpringMVC的核心组件

​DispatcherServlet​​ 前端控制器、总控制器

作用:接收请求,调用其他组件处理用户的请求,协同各组件工作、响应请求

​HandlerMapping​​ 处理器映射器

作用:负责根据用户请求的URL找到对应的处理器Handler,在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,具体接收到一个请求之后使用哪个Handler进行处理需要处理器映射器来匹配可配置SpringMVC提供多个处理器映射的实现,可以根据需要进行配置

​HandlerAdapter​​ 处理器适配器

作用:按照处理器映射器解析的用户请求的调用链,通过适配器模式完成Handler的调用

​Handler​​ 处理器/控制器

由工程师根据业务的需求进行开发作用:处理请求

​ModelAndView​​ 视图模型

作用:用于封装处理器返回的数据以及相应的视图ModelAndView = Model + View

​ViewResolver​​ 视图解析器

作用:对ModelAndView进行解析可配置SpringMVC提供多个视图解析器的实现,可以根据需要进行配置

​View​​ 视图

作用:完成数据渲染

处理器映射器

不同的处理器映射器对URL处理的方式也不相同,使用对应的处理器映射器之后我们的前端请求规则也需要发生相应的变化

SpringMVC提供的处理器映射器:

BeanNameUrlHandlerMapping 根据控制器的ID访问控制器SimpleUrlHandlerMapping 根据控制器配置的URL访问(默认)

配置处理器映射器:

class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

配置SimpleUrlHandlerMapping

bookController studentController

视图解析器

Spring提供了多个视图解析器:

UrlBasedViewResolverInternalResourceViewResolverUrlBasedViewResolver 需要依赖jstl

添加JSTL的依赖

javax.servlet jstl 1.2

* 配置视图解析器

InternalResourceViewResolver

"viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

SpringMVC的注解

@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径,用在方法上表示父类路径后面的内容。

@Controller@RequestMapping("book")public class BookController{ /*接收请求行数据*/ @RequestMapping("/add") // 请求路径:/boot/add public String addBook(String name, String author, double{ System.out.println("---book add"); request.setAttribute("key1","value1"); request.setAttribute("book",new Book(1,"Java","老张",2.22)); return "tips"; } @RequestMapping("/add2") //请求路径:/boot/add2 public ModelAndView addBook2(String name, String author, double{ ModelAndView modelAndView = new ModelAndView("/tips.jsp"); modelAndView.addObject("key2","value2"); modelAndView.addObject("book",new Book(1,"C++","老张",2.22)); return

@RequestBody:注解实现接收 主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据) ,如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到, 即将json转换为java对象 。

@ResponseBody: @ResponseBody是作用在方法上的 ,@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据, 即注解实现将conreoller方法返回对象转化为json对象响应给客户 。

@Resource和@Autowired:自动装配,@Resource和@Autowired都是做bean的注入时使用, @Autowired是Spring的注解,可以标注在属性上、方法上和构造器上,来完成自动装配 。默认是根据类型,spring自动将匹配到的属性值进行注入,而@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入,并且@Resource默认是名称查找。

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

@RequestMapping("/user/{id}")public String deleteById(@PathVariable("id"){ System.out.println("通过id删除用户,id为:" +id);// 访问的时候只需要访问/user/所要删除的id即可,如.../user/1。 return "success";}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Coreos-bootstrap- CoreOS 主机启动程序
下一篇:Minimap2 是一个快速序列映射和校准程序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~