一文彻底搞懂SpringMVC执行流程

文章目录

  • 1. MVC
  • 2. SpringMVC
  • 3. 执行流程
  • 4. 配置文件
  • 5. 常用注解

1. MVC

MVC(Model-View-Controller)是一种软件架构模式,旨在将应用程序分为三个核心组件:

  • 模型(Model): 模型代表应用程序的数据和业务逻辑。它负责管理数据的状态和行为,并且不直接处理用户界面或用户输入。通常,模型对象用于检索、存储、修改和操作应用程序的数据,以及定义应用程序的业务规则。

  • 视图(View): 视图是模型的可视化表示,负责将数据呈现给用户,并与用户进行交互。视图通常是用户界面的一部分,例如网页、图形界面或移动应用程序的用户界面。视图接收模型的数据,并根据数据呈现用户界面。

  • 控制器(Controller): 控制器是模型和视图之间的中介,负责处理用户输入并更新模型或视图。它接收来自用户的输入(例如请求或命令),然后根据输入调用适当的模型操作或选择合适的视图进行显示。控制器负责应用程序的流程控制和业务逻辑。

MVC 模式的主要目标是将应用程序的不同方面分离开来,以便更好地组织代码、提高代码的可维护性和可扩展性。通过将数据、显示和控制逻辑分离,MVC 模式使得应用程序的各个部分能够相互独立地进行开发、测试和维护。

2. SpringMVC

Spring MVC 是 Spring Framework 的一部分,是一个基于 Java 的开源 Web MVC 框架,用于构建 Web 应用程序。它提供了一种轻量级的、灵活的方式来开发 Web 应用程序,并借助依赖注入和面向切面编程等技术来促进松耦合和高效的开发。

Spring MVC 框架基于 MVC(Model-View-Controller)设计模式,采用了前端控制器(Front Controller)的架构,其核心组件包括:

  • DispatcherServlet(前端控制器):DispatcherServlet 是 Spring MVC 框架的入口点,负责接收所有客户端请求,并将请求分派给合适的处理器(Controller)。它是一个 Servlet,通常配置在 web.xml 文件中,并拦截所有请求。

  • Controller(控制器):控制器负责处理客户端请求,执行相应的业务逻辑,并返回适当的响应给客户端。在 Spring MVC 中,控制器通常是一个 POJO(Plain Old Java Object)类,可以通过注解或 XML 配置来定义。

  • HandlerMapping(处理器映射器):处理器映射器负责将客户端请求映射到相应的控制器处理程序。Spring MVC 提供了多种类型的处理器映射器,如注解映射、路径映射等,以便灵活地配置请求映射规则。

  • ViewResolver(视图解析器):视图解析器负责将逻辑视图名称解析为实际的视图对象,用于呈现给客户端。视图解析器根据视图名称查找视图模板,并返回给 DispatcherServlet 进行渲染。

  • View(视图):视图负责呈现模型数据给用户,并与用户进行交互。视图通常是一个模板文件,如 JSP、Thymeleaf、Freemarker 等,用于生成客户端可视化的页面内容。

  • Model(模型):模型代表应用程序的数据和业务逻辑,负责封装数据并执行业务逻辑操作。控制器可以与模型进行交互,获取或更新数据,并将数据传递给视图进行显示。

Spring MVC 框架还提供了许多功能和特性,如拦截器、数据绑定、表单处理、文件上传、国际化、异常处理等,以便开发者能够更轻松地构建灵活、高效的 Web 应用程序。

3. 执行流程

下图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

简要分析执行流程:

1.DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求,我们假设请求的url为:http://localhost:9999/SpringMVC/input-product

如上url拆分成三部分:

(1)http://localhost:9999 服务器域名

(2)SpringMVC部署在服务器(http://localhost:9999)上的web站点

(3)input-product表示控制器

通过分析,如上url表示为:请求位于服务器localhost:9999上的SpringMVC站点的input-product控制器

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

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

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

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

6.Handler让具体的Controller执行

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

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

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

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

11.DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图

12.最终视图呈现给用户。

在这里插入图片描述

4. 配置文件

Spring MVC 的配置文件通常是一个 XML 文件,其中包含了配置 Spring MVC 框架的各种组件和特性。主要的配置文件是 web.xml 和 springmvc-servlet.xml(或者是通过 Java Config 类配置的方式)。下面是一个典型的 Spring MVC 配置文件的示例:

1.web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"id="WebApp_ID" version="4.0"><!-- 配置 DispatcherServlet --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置 Spring MVC 的配置文件位置 --><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springmvc-servlet.xml</param-value></init-param><!-- 启动时加载 --><load-on-startup>1</load-on-startup></servlet><!-- 映射 DispatcherServlet 的 URL --><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

2.springmvc-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 启用注解驱动 --><mvc:annotation-driven/><!-- 扫描控制器包 --><context:component-scan base-package="com.example.controllers"/><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean></beans>

在这个示例中,web.xml 配置了 DispatcherServlet,并指定了其配置文件的位置为 /WEB-INF/springmvc-servlet.xml。而 springmvc-servlet.xml 文件则配置了 Spring MVC 的各种组件,包括启用注解驱动、扫描控制器包、配置视图解析器等。

5. 常用注解

@Controller: 用于标识一个类是 Spring MVC 的控制器,处理用户请求并返回相应的视图或数据。

@RequestMapping: 用于映射请求 URL 到处理方法,可以用在类级别和方法级别,用于指定处理器的访问路径。

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping: 这些注解是@RequestMapping的快捷方式,用于标识对应的 HTTP 请求方法的处理器方法。

@RequestParam: 用于从请求中获取参数值,可以指定参数的名称、是否必需等。

@PathVariable: 用于将 URL 中的模板变量绑定到处理方法的参数上,用于获取 RESTful 风格的 URL 中的路径参数。

@RequestBody: 用于将请求体中的数据绑定到处理方法的参数上,通常用于处理 POST 请求中的 JSON 或 XML 格式的数据。

@ResponseBody: 用于将处理方法的返回值直接作为 HTTP 响应体返回给客户端,通常用于返回 JSON 或 XML 格式的数据。

@ModelAttribute: 用于将请求参数绑定到处理方法的模型属性上,也可以用于在请求处理之前初始化模型数据。

@SessionAttributes: 用于将模型属性存储到会话中,以便多个请求之间共享数据。

@ExceptionHandler: 用于处理控制器内部抛出的异常,可以将特定类型的异常映射到处理方法上。

@InitBinder: 用于初始化数据绑定器,可以自定义数据绑定规则。

@CrossOrigin: 用于配置跨域资源共享 (CORS)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/586676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【three.js】简介和入门

目录 Three.js简介Three.js的应用Three.js的基础知识利用Three.js实现一个3D页面 Three.js简介 Three.js是一个基于JavaScript编写的开源3D图形库&#xff0c;利用WebGL技术在网页上渲染3D图形。它提供了许多高级功能&#xff0c;如几何体、纹理、光照、阴影等&#xff0c;以便…

剑指Offer题目笔记20(在数组范围内二分查找)

面试题72&#xff1a; 问题&#xff1a; ​ 输入一个非负整数&#xff0c;计算它的平方根。 解决方案&#xff1a; 使用二分查找。一个数x的平方根一定小于或等于x&#xff0c;同时&#xff0c;除了0之外的所有非负整数的平方根都大于等于1&#xff0c;故该数的平方根在1到x…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/4/1]

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 专栏介绍 YOLOv9作为最新的YOLO系列模型&#xff0c;对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

什么是智慧城管?智慧城管的应用场景有哪些?

智慧城管管理系统是一种基于现代数字信息技术的城市管理平台&#xff0c;它以数字地图和单元网格划分为基础&#xff0c;集成基础地图、地理编码、市政及社区服务部件事件的多种数据资源。这一系统通过创建城市管理和市民服务综合指挥系统&#xff0c;利用多部门信息共享和协同…

Python中的全栈开发前端与后端的完美融合【第160篇—全栈开发】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的全栈开发&#xff1a;前端与后端的完美融合 全栈开发已成为当今软件开发领域中的…

芒果YOLOv5改进89:卷积SPConv篇,即插即用,去除特征图中的冗余,FLOPs 和参数急剧下降,提升小目标检测

芒果专栏 基于 SPConv 的改进结构,改进源码教程 | 详情如下🥇 👉1. SPConv 结构、👉2. CfSPConv 结构 💡本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 即插即用 结构。博客 包括改进所需的 核心结构代码 文件 YOLOv5改进专栏完整目录链接:…

透视苹果手机系统文件结构:深入了解iOS文件系统的组织方式

​ 目录 引言 用户登录工具和连接设备 查看设备信息&#xff0c;电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同&#xff0c;无法直接访问系统文件…

哪个品牌是专业做洗地机的?四大质量翘楚佳品推荐

随着科技的不断发展&#xff0c;家庭清洁方式也在不断升级。传统的拖把已经不能满足现代家庭对清洁的需求&#xff0c;因此&#xff0c;智能家电如洗地机的出现成为了一种必然趋势。本文将为您介绍几款家用洗地机&#xff0c;让您在选择清洁设备时能够更加明智。 洗地机怎么选…

鸿蒙实战开发-如何实现多设备自适应服务卡片

​介绍 本示例展示Js工程中服务卡片的布局和使用&#xff0c;其中卡片内容显示使用了一次开发&#xff0c;多端部署的能力实现多设备自适应。用到了卡片扩展模块接口&#xff0c;ohos.app.form.FormExtensionAbility 。 卡片信息和状态等相关类型和枚举接口&#xff0c;ohos.…

Android adb ime 调试输入法

目录 前言列出所有输入法仅列出输入法 id列出所有输入法的所有信息 启用/禁用 输入法启用输入法禁用输入法 切换输入法还原输入法 前言 安装多个输入法后&#xff0c;可以在设置里进行切换。 既然是开发&#xff0c;能用命令就就命令~ ime 帮助说明&#xff1a; ime <c…

XenCenter 2024 导出虚拟机

选择导出 选择需要导出的虚拟机 导出位置&#xff0c;导出格式&#xff0c;名称 EULA 文档&#xff0c;根据自己需求配置 OVA是否需要加密验证&#xff0c;自己需要看&#xff0c;是否单独的OVA 确认导出配置&#xff0c;等待导出完成。 本地目录查看导出完成

解析Flutter应用在iOS环境中的性能优化技巧

本文探讨了使用Flutter开发的iOS应用能否上架&#xff0c;以及上架的具体流程。苹果提供了App Store作为正式上架渠道&#xff0c;同时也有TestFlight供开发者进行内测。合规并通过审核后&#xff0c;Flutter应用可以顺利上架。但上架过程可能存在一些挑战&#xff0c;因此可能…