当前位置: 首页 > article >正文

SpringMVC的工作流程

1.工作流程

(1)用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet拦截。

(2)DispatcherServlet拦截到请求后,会调用HandlerMapping(处理器映射器)。

(3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

(4)DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器)。

(5) HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器。

(6)Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名。

(7)HandlerAdapter将ModelAndView对象返回给DispatcherServlet。

(8)前端控制器请求视图解析器根据逻辑视图名解析真正的视图。

(9)ViewResolver解析后,会向DispatcherServlet中返回具体的View(视图)。

(10)DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。

(11)前端控制器向用户响应结果,浏览器将结果呈现给用户。

在上述过程中,DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver对象的工作是在框架内部执行的,开发人员只需要配置DispatcherServlet,完成Controller中的业务处理并在View中展示相应信息。

2.DispatcherServlet****类

DispatcherServlet是前端控制器,是整个流程控制的中心。该类拦截了客户端的请求之后,会根据具体规则将请求交给其他组件处理,从而降低了组件之间的耦合性。

3.Controller****接口

SpringMVC将Controller接口的实现类组件名,作为请求访问的URL进行映射,进而执行handleRequest()方法中的业务逻辑代码。

4.@RequestMapping****注解

@RequestMapping注解用于建立请求URL和Handler(处理器)之间的映射关系,该注解可以标注在方法上和类上。

(1)标注在 方法上 时,注解内 value值 对应到浏览器中输入的 访问地址 (站点名之后 URL 字符串)。


请求地址:http://localhost:8080/chapter01/hello

@Controller
public class MyController {
   private static final Logger logger=Logger.getLogger(MyController.class);      
    @RequestMapping("/hello")
    public String sayHello() {
           logger.info("访问到MyController!"); 
           return "hello";
    }
}

(2) 标注在 类名上 时,注解内 value值 相当于设置了本处理器类的 命名空间 ,类中所有请求地址应为命名空间名 + 方法映射地址名。

请求地址:http://localhost:8080/chapter01/api/hello

@Controller
@RequestMapping("/api")
public class MyController {
    private static final Logger logger=Logger.getLogger(MyController.class);    
    @RequestMapping("/hello")
    public String sayHello() {
           logger.info("访问到MyController!"); 
           return "hello";
    }
}

(3)包含的传递参数

属性名

类型

描述

name

String

可选属性,用于为映射地址指定别名。

value

String[]

可选属性,也是默认属性,用于指定请求的URL。

method

RequestMethod[]

可选属性,用于指定该方法可以处理哪种类型的请求方式。

params

String[]

可选属性,用于指定客户端请求中参数的值,必须包含哪些参数的值,才可以通过其标注的方法处理。

headers

String[]

可选属性,用于指定客户端请求中,必须包含哪些header的值,才可以通过其标注的方法处理。

consumes

String[]

可选属性,用于指定处理请求的提交内容类型(Content-type)。

produces

String[]

可选属性,用于指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

(4) 组合注解

从Spring 4.3版本开始,还可以使用组合注解完成客户端请求方式的限定。

@GetMapping :匹配 GET 方式的请求 ;

@PostMapping :匹配 POST 方式的请求 ;

@PutMapping :匹配 PUT 方式的请求 ;

@DeleteMapping :匹配 DELETE 方式的请求 ;

@PatchMapping :匹配 PATCH 方式的请求 ;

5.ModelAndView****类

ModelAndView类用于封装Controller的处理结果,除了包含数据之外,还包含要跳转的页面。


http://www.kler.cn/a/463242.html

相关文章:

  • 【51单片机零基础-chapter6:LCD1602调试工具】
  • C# _ 数字分隔符的使用
  • 【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
  • MySQL中distinct和group by去重的区别
  • pip下载包出现SSLError
  • 智能手机多源传感器融合的室内定位方法综述
  • 数据结构————概述
  • Gitee在项目中的运用全解析
  • 65.基于SpringBoot + Vue实现的前后端分离-阿博图书馆管理系统(项目 + 论文PPT)
  • 基于Springboot + vue实现的课程答疑系统
  • 《Vue进阶教程》第三十三课:toRef的使用
  • 【TensorFlow】tensorflow简介和环境搭建、入门
  • 掌握 Stream API - Java 8 的力量
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之12 方案再探之3:特定于领域的模板 之2 首次尝试和遗留问题解决
  • 异常与中断(上)
  • C++设计模式:状态模式(自动售货机)
  • HIVE函数使用案例之----行列转换
  • nginx学习之路-nginx配置https服务器
  • 17爬虫:关于DrissionPage相关内容的学习01
  • 大模型—Ollama将Python函数作为参数传递,增强函数调用功能
  • shell脚本的【算数运算、分支结构、test表达式】
  • PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目
  • OpenCV 特征检测和特征匹配方法汇总
  • 如何使用大语言模型进行事件抽取与关系抽取
  • smolagents:一个用于构建代理的简单库
  • SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪