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

Spring MVC整体结构介绍,图文+代码

  • 接收socket请求,可以是同步或者异步,阻塞或非阻塞等方式。

  • 处理请求中的协议,如Http协议等。

  • 路由请求到对应的servelt实例。

Spring MVC整体结构介绍,图文+代码;

核心组件DispatcherServlet

=====================

Spring MVC的核心组件就是DispatcherServlet,它是SpringWeb请求的调度中心,它的主要功能如下所示:

  • 在Spring容器启动阶段读取映射规则,如RequestMapping;

  • 在请求到来的时候,按照加载的请求映射规则找到合适的处理方法;

  • 当处理请求的过程中出现了异常,对异常进行处理,如返回合适的界面或状态码;

  • 解析返回View的主题、时区等信息;

  • 渲染返回的视图。

Spring MVC整体结构介绍,图文+代码;

请求映射HandlerMapping

==================

请求映射用于根据请求找到该请求需要调用的所有方法,包含过滤器和处理方法等。比较常用的一种请求映射是

RequestMappingHandlerMapping,从名称上可以看出来这个HandlerMapping是用于处理@RequestMapping注解请求映射的类。该类的工作原理如下所示,可以看到该类的主要作用是在收到请求之后,按顺序拿到所有需要调用的方法(主要包含拦截器和处理方法),然后一一调用这些方法。

Spring MVC整体结构介绍,图文+代码;

拦截器HandlerInterceptor

=====================

拦截器和Tomcat容器中的Valve有些类似,Spring的拦截器可以让用户灵活的在请求处理前、请求处理后和请求完成三个阶段自定义操作,比如用户权限校验等。拦截器的作用我们可以在上一节的图中看到,Spring关于拦截器的接口定义如下所示:

public interface HandlerInterceptor {

default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

throws Exception {

return true;

}

default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

@Nullable ModelAndView modelAndView) throws Exception {

}

default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,

@Nullable Exception ex) throws Exception {

}

}

Spring MVC整体结构介绍,图文+代码;

处理方法Handler

===========

处理方法在DispatcherServlet定义为Object类型,如果我们使用了@RequestMapping来根据请求查找处理方法,那么查找到的处理方法就是HandlerMethod类型,对应于Controller中添加了对应RequestMapping的方法。

Spring MVC整体结构介绍,图文+代码;

处理方法适配器HandlerAdapter

=====================

DispatcherServlet从HandlerMapping中获取到的处理方法是Object类型,意味着不同的处理方法可能返回不同的对象,DispatcherServlet本身是一个调度器,不应该关注如何调用不同的处理方法,所以Spring提供了HandlerAdapter列表用户处理不同的调度方法。

// 处理方法适配器接口定义

public interface HandlerAdapter {

boolean supports(Object handler);

@Nullable

ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

long getLastModified(HttpServletRequest request, Object handler);

}

Spring MVC整体结构介绍,图文+代码;

异常处理HandlerExceptionResolver

============================

HandlerExceptionResolver用于处理请求过程中出现的异常,其实现有很多中类型,不过我们日常开发中使用比较多的是

ExceptionHandlerExceptionResolver,也就是处理我们定义的@ExceptionHandler注解。典型的@ExceptionHander的使用方式如下所示,@ExceptionHander还可以放在@ControllerAdvice注解的类中,表示对所有的Controller都会生效。

@Controller


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

相关文章:

  • $route 和 $router 的区别是什么?
  • mongodb 使用内存过大分析
  • PlanLLM: 首个支持开放词汇与封闭集任务的跨模态视频程序规划框架
  • Redis --- 使用GEO实现经纬度距离计算
  • 115,【7】 攻防世界 web fileinclude
  • 02-合并两个有序数组
  • JVM的详细讲解
  • 爬虫抓取时遇到反爬策略怎么办?
  • 鸿蒙生态潮起:开发者的逐浪之旅
  • 【工具篇】深度剖析 Veo2 工具:解锁 AI 视频创作新境界
  • Android 中实现 PDF 预览三种方式
  • 【机器学习】K近邻算法的实现
  • (四)QT——QMainWindow——界面菜单设计
  • 【React】setState进阶
  • git 项目的更新
  • C++ auto的使用
  • CVPR2021 | VMI-FGSM VNI-FGSM | 通过方差调整增强对抗攻击的可迁移性
  • vs code 使用教程
  • 采用gitlab的package registry 方式 通过api 上传发布包,解决git命令拉取大文件异常退出问题
  • Deno vs Node.js:性能对比深度解析
  • 2025简约的打赏系统PHP网站源码
  • 语义分割简述
  • Python-memoryutils:内存泄漏检测与防止工具
  • JS:将JS对象格式化为php语法形式(完美支持无unicode编码匹配的正则)
  • Debian安装Seafile
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之修改密码和个人资料