SpringMVC的请求处理流程及核心组件

前言:SpringMVC请求处理流程,核心组件,主要注解等知识是面试中经常被问到的问题,简单看了下之前看的视频的笔记,并结合自己的理解写下了这篇博客,希望能加深自己的印象以及帮助的诸位小伙伴儿们🤞🤞
如果有什么需要改进的地方还请大佬斧正😁
小威在此先感谢诸佬了👏👏
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:目前大二,在一家满意的公司实习👏👏

🎁如果大佬在准备面试,找工作,刷算法,可以使用我找实习前用的刷题神器哦刷题神器点这里哟
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

牛客部分使用反馈,个人感觉还不错,帮我找到了心仪的公司,希望各位伙伴儿们通过它也能提高不少🥂🥂🥂

以下正文开始

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访问(默认)

配置处理器映射器:

  • 在SpringMVC的配置文件中通过bean标签声明处理器映射器

  • 配置BeanNameUrlHandlerMapping

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    
  • 配置SimpleUrlHandlerMapping

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/aaa">bookController</prop>
                <prop key="/bbb">studentController</prop>
            </props>
        </property>
    </bean>
    

视图解析器

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

  • UrlBasedViewResolver
  • InternalResourceViewResolver
  • UrlBasedViewResolver 需要依赖jstl

    • 添加JSTL的依赖
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
    • 配置视图解析器
    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
  • InternalResourceViewResolver

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    

SpringMVC的注解

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

@Controller
@RequestMapping("book")
public class BookController {

    /*接收请求行数据*/
    @RequestMapping("/add") // 请求路径:/boot/add
    public String addBook(String name, String author, double price,HttpServletRequest request){
        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 price){

        ModelAndView modelAndView = new ModelAndView("/tips.jsp");
        modelAndView.addObject("key2","value2");
        modelAndView.addObject("book",new Book(1,"C++","老张",2.22));
        return modelAndView;
    }
}

@RequestBody:注解实现接收http请求的json数据,主要用来接收前端传递给后端的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") String id){
    System.out.println("通过id删除用户,id为:" +id);// 访问的时候只需要访问/user/所要删除的id即可,如.../user/1。
    return "success";
}

文章到这里就结束了,以后还会记录一些其他的知识,喜欢的大佬可以多多支持哦😉😉。
如果有什么疑问的地方请指出,诸佬们一起讨论🍻🍻
在这里插入图片描述

最后再次给大家安利一波牛客,牛客真的很不错的软件,点击刷题神器
注册牛客,快来和博主一起刷题吧嘿嘿嘿👏
同时祝伙伴儿找到理想的工作及猛猛地提升算法能力哦😏

再次感谢各位小伙伴儿们的支持🤞
在这里插入图片描述

  • 45
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 54
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小威要向诸佬学习呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值