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的处理结果,除了包含数据之外,还包含要跳转的页面。

相关推荐
共享家952717 小时前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
We1ky1 天前
从零到一:我的javascript记忆翻转卡牌游戏诞生记
状态模式
Elieal1 天前
Spring MVC 全局异常处理实战
spring·mvc·状态模式
Elieal1 天前
统一 JSON 格式,JacksonObjectMapper 定制 Spring Boot JSON 转换规则
spring boot·json·状态模式
前端不太难1 天前
HarmonyOS PC 应用,先做文档模型
华为·状态模式·harmonyos
前端不太难1 天前
HarmonyOS 走向 PC,应用模型正在重构
重构·状态模式·harmonyos
进击的小头2 天前
行为型模式:状态模式——嵌入式状态管理的优雅解决方案
c语言·状态模式
洋不写bug2 天前
JavaEE基础,计算机是如何工作的
java·java-ee·状态模式
前端不太难2 天前
HarmonyOS 游戏里的“假异步”,为什么会卡
游戏·状态模式·harmonyos
阿珊和她的猫3 天前
React 路由:构建单页面应用的导航系统
前端·react.js·状态模式