【重温SSM框架系列】6 - SpringMVC执行流程与组件解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【重温SSM框架系列】6 - SpringMVC执行流程与组件解析

SpringMVC执行流程

  1. 用户在浏览器发送请求;
  2. 用户请求达到前端控制器DispatcherServlet,DispatcherServlet收到请求调用HandlerMapping处理器映射器;
  3. 处理器映射器根据XML配置或者注解找到具体的处理器,并将结果返会给前端控制器;
  4. 前端控制器DispatcherServlet调用HandlerAdapter处理器适配器;
  5. 处理器适配器再调用后端控制器Controller执行;
  6. Controller执行并将结果ModelAndView返会给处理器适配器HandlerAdapter;
  7. HandlerAdapter再将Controller执行结果ModelAndView返回给前端控制器;
  8. DispatcherServlet将ModelAndView传给视图解析器ViewReslover;
  9. ViewReslover进行解析并将具体View返回给DispatcherServlet;
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中);
  11. 将渲染后的视图返会给用户。

在这里插入图片描述

SpringMVC的相关组件

组件解析

1. 前端控制器:DispatcherServlet
用户请求到达前端控制器,它就相当于MVC 模式中的C,DispatcherServlet是整个流程控制的中心,由
它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。

2. 处理器映射器:HandlerMapping
HandlerMapping负责根据用户请求找到Handler 即处理器,SpringMVC提供了不同的映射器实现不同的
映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3. 处理器适配器:HandlerAdapter
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理
器进行执行。

4. 处理器:Handler
它就是我们开发中要编写的具体业务控制器。由DispatcherServlet把用户请求转发到Handler。由
Handler 对具体的用户请求进行处理。

5. 视图解析器:View Resolver
View Resolver 负责将处理结果生成View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成View 视图对象,最后对View 进行渲染将处理结果通过页面展示给用户。

6. 视图:View
SpringMVC框架提供了很多的View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面

@RequestMapping注解

@RequestMapping注解用于建立请求URL 和处理请求方法之间的对应关系。
就相当于代替了Servlet的配置:

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.java.code.Servlet<servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
<servlet-mapping>

相当于@RequestMapping("/login")

接下来来到@RequestMapping的源码中,如下:
RequestMapping.class

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}

@Target具有 ElementType.METHOD 和 ElementType.TYPE 两个属性,表示@RequestMapping可以使用在类和方法上。

  • 类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录;
  • 方法上,请求URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径。

RequestMapping属性解析

  • value

用于指定请求的URL。它和path属性的作用是一样的.

  • method

用于指定请求的方式,包括GET、POST、PUT、DELETE等。

  • params

用于指定限制请求参数的条件。request中必须包含某些参数值时,才让该方法处理。

  • headers

用于指定request中必须包含某些指定的header值,才能让该方法处理请求。

  • consumes

用于指定处理请求的Content-Type,例如application/json, text/html。

  • produces

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

自定义视图解析器

通过属性注入的方式修改视图的的前后缀。

    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

这样在Controller中方法重定向至某个jsp页面是,只需要返回相对于/WEB-INF/views/的相对路径即可,并且不需要再写.jsp后缀名。

例如,一个请求需要重定向至views文件夹中的success.jsp页面,那么就只需要return “success”
在这里插入图片描述
若是要重定向至views下的user中的profile.jsp页面,那么就只需要return “user/profile”
在这里插入图片描述

目录
相关文章
|
2月前
|
监控 安全 开发工具
鸿蒙HarmonyOS应用开发 | HarmonyOS Next-从应用开发到上架全流程解析
HarmonyOS Next是华为推出的最新版本鸿蒙操作系统,强调多设备协同和分布式技术,提供丰富的开发工具和API接口。本文详细解析了从应用开发到上架的全流程,包括环境搭建、应用设计与开发、多设备适配、测试调试、应用上架及推广等环节,并介绍了鸿蒙原生应用开发者激励计划,帮助开发者更好地融入鸿蒙生态。通过DevEco Studio集成开发环境和华为提供的多种支持工具,开发者可以轻松创建并发布高质量的鸿蒙应用,享受技术和市场推广的双重支持。
342 11
|
2月前
|
域名解析 弹性计算 安全
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
|
3月前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
70 12
|
4月前
|
JavaScript 前端开发 UED
Vue执行流程及渲染解析
【10月更文挑战第5天】
|
4月前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
68 3
|
4月前
|
存储 缓存 边缘计算
揭秘直播带货背后的黑科技:播放流程全解析!
大家好,我是小米,今天聊聊社区直播带货的技术细节。我们将探讨直播播放流程中的关键技术,包括 HTTP DASH 协议、POP(Point of Presence)缓存和一致性哈希算法等。通过这些技术,直播流能根据网络状况动态调整清晰度,保证流畅体验。POP 和 DC 的多层次缓存设计减少了延迟,提升了观看效果。无论是技术人员还是直播运营者,都能从中受益。希望通过本文,你能更好地理解直播背后的技术原理。
79 3
|
4月前
|
敏捷开发 数据可视化 测试技术
解析软件项目管理:以板栗看板为例,其如何有效影响并优化软件开发流程
软件项目管理是一个复杂而重要的过程,涵盖了软件产品的创建、维护和优化。其核心目标是确保软件项目能够顺利完成,同时满足预定的质量、时间和预算目标。本文将深入探讨软件项目管理的内涵及其对软件开发过程的影响,并介绍一些有效的管理工具。
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
121 2
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
2月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

推荐镜像

更多