SpringMVC 的执行原理
Published on 2022-03-14 19:18 in 分类: Java with dutrmp19
分类: Java

SpringMVC 的执行原理

SpringMVC 的执行原理

关键词: Spring MVC

转自SpringMVC 执行流程-睿站-狂神说

SpringMVC 是一个web 框架,它实现了 MVC 三层架构。

大体上来说,SpringMVC 通过 DispatchServlet 拦截用户请求的 url,
然后决定交给哪一个 controller 处理

举一个例子:

  1. 假设用户输入 url 为 http://localhost:8080/SpringMVC/hello
  • http://localhost:8080 是服务器域名
  • SpringMVC 表示部署在服务器上的web站点
  • hello表示控制器

通过分析,如上url表示为:

请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

  1. HandlerMapping为处理器映射。
    DispatcherServlet调用 HandlerMapping,
    HandlerMapping根据请求url查找Handler。

  2. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为: hello。

  3. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

  4. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

  5. Handler让具体的Controller执行。

  6. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView.

  7. HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet.

  8. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

  9. 视图解析器将解析的逻辑视图名传给DispatcherServlet。

流程图如下,转自秦疆

SpringMVC 执行流程图

Controller 部分代码

import org.springframework.web.servlet.Mode1Andview;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpservletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:这里我们先导入controller接口
public class Hellocontroller implements Controller {
public NodelAndview handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView模型和视图
ModelAndview mv = new ModelAndview();
//调用业务层,暂时不写
//封装对象,放在ModelAndView中
mv.add0bject( attributeName: "msg" , attributeValue: "HelloSpringWVC!");
// 封装要跳转的视图,放在ModelAndView中
// 后续会依据配置,使用 name 拼接成 WEB-INF/jsp/hello.jsp,
// 相当于告诉 SpringMVC 要将数据交给哪个 jsp
mv.setviewName("hello");
return mv;
}
}

如果您有任何关于文章的建议,欢迎评论或在 GitHub 提 PR

作者:dutrmp19
本文为作者原创,转载请在 文章开头 注明出处:https://www.cnblogs.com/dutrmp19/p/16005567.html
遵循 CC 4.0 BY-SA 版权协议


posted @   dutrmp19  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示