Spring MVC

Spring MVC介绍 Spring MVC 全名是 Spring Web MVC,简称 Spring MVC或者 Spring Web.Spring MVC 是基于Servlet API的web框架,从一开始Spring框架是包含Spring MVC部分,也就是说Spring MVC是Spring 框架的一部分。 阅读详情

Spring MVC

MVC 体系结构

MVC 指 MVC 模式的某种框架,它强制性地使应用程序的输入、处理和输出分开。使用 MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的 MVC 就是 JSP + Servlet + JavaBean 的模式。

在这里插入图片描述

视图

视图是用户看到并与之交互的界面。对老式的 Web 应用程序来说,视图就是由 HTML 元素组成的界面,在新式的 Web 应用程序中,HTML 依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括 Adobe Flash 和像 XHTML,XML/XSL,WML 等一些标识语言和 Web services。

MVC 好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

模型

模型表示企业数据和业务规则。在 MVC 的三个部件中,模型拥有最多的处理任务。例如它可能用像 EJBs 和 ColdFusion Components 这样的构件对象来处理数据库,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器

控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击 Web 页面中的超链接和发送 HTML 表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

Spring MVC 简介

Spring Web MVC 是最初建立在 Servlet API 之上的 Web 框架,从一开始就包含在 Spring Framework 中。正式名称“ Spring Web MVC ”来自其源模块的名称 (spring-webmvc),但通常称为“Spring MVC”。

Spring MVC 围绕 DispatcherServlet 设计。DispatcherServlet 的作用是将请求分发到不同的处理器。从 Spring 2.5 开始,使用 Java 5 或者以上版本的用户可以采用基于注解 @Controller 的声明方式。

Spring MVC 框架同许多其他的 MVC 框架一样, 以请求为驱动 , 围绕一个中心 Servlet 分派请求以及提供其他功能,DispatcherServlet 实际上是一个Servlet (它继承自 HttpServlet 基类)。

在这里插入图片描述

Spring MVC 的原理:

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

在这里插入图片描述

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

Spring MVC 九大组件

  • HandlerMapping(处理器映射器)

    HandlerMapping 是⽤来查找 Handler 的,也就是处理器,具体的表现形式可以是类,也可以是⽅法。⽐如,标注了 @RequestMapping 的每个⽅法都可以看成是⼀个 Handler。Handler负责具体实际的请求处理,在请求到达后,HandlerMapping 的作⽤便是找到请求相应的处理器 Handler 和 Interceptor。

  • HandlerAdapter(处理器适配器)

    HandlerAdapter 是⼀个适配器。因为 Spring MVC 中 Handler 可以是任意形式的,只要能处理请求即可。但是把请求交给 Servlet 的时候,由于 Servlet 的⽅法结构都是 doService(HttpServletRequest req,HttpServletResponse resp) 形式的,要让固定的 Servlet 处理⽅法调⽤ Handler 来进⾏处理,便是 HandlerAdapter 的职责。

  • HandlerExceptionResolver
    HandlerExceptionResolver ⽤于处理 Handler 产⽣的异常情况。它的作⽤是根据异常设置 ModelAndView,之后交给渲染⽅法进⾏渲染,渲染⽅法会将 ModelAndView 渲染成⻚⾯。

  • ViewResolver

    ViewResolver 即视图解析器,⽤于将 String 类型的视图名和 Locale 解析为 View 类型的视图,只有⼀个resolveViewName() ⽅法。从⽅法的定义可以看出,Controller 层返回的 String 类型视图名 viewName 最终会在这⾥被解析成为 View。View 是⽤来渲染⻚⾯的,也就是说,它会将程序返回的参数和数据填⼊模板中,⽣成 HTML ⽂件。ViewResolver 在这个过程主要完成两件事情: ViewResolver 找到渲染所⽤的模板(第⼀件⼤事)和所⽤的技术(第⼆件⼤事,其实也就是找到视图的类型,如 JSP)并填⼊参数。默认情况下,Spring MVC 会⾃动为我们配置⼀个 InternalResourceViewResolver,是针对 JSP 类型视图的。

  • RequestToViewNameTranslator

    RequestToViewNameTranslator 组件的作⽤是从请求中获取 viewName。因为 ViewResolver 根据 viewName 查找 View,但有的 Handler 处理完成之后,没有设置 View,也没有设置 viewName,便要通过这个组件从请求中查找 viewName。

  • LocaleResolver

    ViewResolver 组件的 resolveViewName ⽅法需要两个参数,⼀个是视图名,⼀个是 Locale。LocaleResolver ⽤于从请求中解析出 Locale,⽐如中国 Locale 是 Zh-CN,⽤来表示⼀个区域。这个组件也是 i18n 的基础。

  • ThemeResolver

    ThemeResolver 组件是⽤来解析主题的。主题是样式、图⽚及它们所形成的显示效果的集合。Spring MVC 中⼀套主题对应⼀个 properties ⽂件,⾥⾯存放着与当前主题相关的所有资源,如图⽚、CSS 样式等。创建主题⾮常简单,只需准备好资源,然后新建⼀个“主题名.properties”,并将资源设置进去,放在 classpath 下,之后便可以在⻚⾯中使⽤了。Spring MVC 中与主题相关的类有 ThemeResolver、ThemeSource 和Theme。ThemeResolver 负责从请求中解析出主题名,ThemeSource 根据主题名找到具体的主题,其抽象也就是 Theme,可以通过 Theme 来获取主题和具体的资源。

  • MultipartResolver

    MultipartResolver ⽤于上传请求,通过将普通的请求包装成 MultipartHttpServletRequest 来实现。MultipartHttpServletRequest 可以通过 getFile() ⽅法直接获得⽂件。如果上传多个⽂件,还可以调⽤ getFileMap() ⽅法得到 Map 这样的结构,MultipartResolver 的作⽤就是封装普通的请求,使其拥有⽂件上传的功能。

  • FlashMapManager

    FlashMap ⽤于重定向时的参数传递,⽐如在处理⽤户订单时候,为了避免重复提交,可以处理完 post 请求之后重定向到⼀个 get 请求,这个 get 请求可以⽤来显示订单详情之类的信息。这样做虽然可以规避⽤户重新提交订单的问题,但是在这个⻚⾯上要显示订单的信息,这些数据从哪⾥来获得呢?因为重定向时没有传递参数这⼀功能的,如果不想把参数写进 URL(不推荐),那么就可以通过 FlashMap 来传递。只需要在重定向之前将要传递的数据写⼊请求(可以通过 ServletRequestAttributes.getRequest() ⽅法获得)的属性OUTPUT_FLASH_MAP_ATTRIBUTE 中,这样在重定向之后的 Handler 中 Spring MVC 就会⾃动将其设置到 Model 中,在显示订单信息的⻚⾯上就可以直接从 Model 中获取数据。FlashMapManager 就是⽤来管理 FalshMap 的。

参数绑定

简单参数绑定

绑定简单数据类型参数,只需要直接声明形参即可(形参参数名和传递的参数名要保持⼀致,建议使⽤包装类型,当形参参数名和传递参数名不⼀致时可以使⽤ @RequestParam 注解进⾏⼿动映射)。

实体类参数绑定

接收 Bean 类型参数,直接形参声明即可,类型就是 Bean 的类型,形参名⽆所谓,但是要求传递的参数名必须和 Bean 的属性名保持⼀致。

包装实体类参数绑定

不管包装 Bean 与否,它⾸先是⼀个 Bean,那么就可以按照上述 Bean 的要求来:绑定时候直接形参声明即可。传参参数名和 Bean 属性保持⼀致,如果不能够定位数据项,那么通过属性名 + “.” 的⽅式进⼀步锁定数据。

日期类型处理
public class DateConverter implements Converter<String, Date> {
	@Override
 	public Date convert(String dateStr) {
 		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
 		try {
 			Date date = simpleDateFormat.parse(dateStr);
 			return date;
 		} catch (ParseException e) {
 			e.printStackTrace();
 		}
 	}
}
<!-- ⾃动注册最合适的处理器映射器, 处理器适配器调⽤ handler ⽅法 -->
<mvc:annotation-driven conversion-service="conversionServiceBean"/>
<!-- 注册⾃定义类型转换器 -->
<bean id="conversionServiceBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<property name="converters">
 		<set>
     		<bean class="com.lagou.edu.converter.DateConverter"/>
 		</set>
 	</property>
</bean>

RESTFul 风格

REST 简介

REST(英⽂:Representational State Transfer,简称 REST)描述了⼀个架构样式的⽹络系统, ⽐如 Web 应⽤程序。它⾸次出现在 2000 年 Roy Fielding 的博⼠论⽂中,他是 HTTP 规范的主要编写者之⼀。在⽬前主流的三种 Web 服务交互⽅案中,REST 相⽐于 SOAP(Simple Object Access Protocol, 简单对象访问协议)以及 XML-RPC 更加简单明了,⽆论是对 URL 的处理还是对 Payload 的编码, REST 都倾向于⽤更加简单轻量的⽅法设计和实现。值得注意的是 REST 并没有⼀个明确的标准,⽽更像是⼀种设计的⻛格。它本身并没有什么实⽤性,其核⼼价值在于如何设计出符合 REST ⻛格的⽹络接⼝。

RESTFul 优点

结构清晰、符合标准、易于理解、扩展⽅便,正得到越来越多⽹站的采⽤。

RESTFul 特点
  1. 每一个 URI 代表 **1 **种资源;

  2. 客户端使用 GET、POST、PUT、DELETE 4 个表示操作方式的动词对服务端资源进行操作:GET 用来获取资源,POST 用来新建资源(也可以用于更新资源),PUT 用来更新资源,DELETE 用来删除资源;

  3. 通过操作资源的表现形式来操作资源;

  4. 资源的表现形式是 XML 或者 HTML;

  5. 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。

RESTFul 概括

看 URL 就知道要什么
看 HTTP Method 就知道干什么
看 HTTP Status Code 就知道结果如何

Spring MVC ⽀持 RESTFul ⻛格请求,具体的就是使⽤ @PathVariable 注解获取 RESTFul ⻛格的请求 URL 中的路径变量,@RequestMapping 注解配置具体的请求类型。有几种专门针对 RESTFul 请求的注解 @GetMapping、 @PutMapping、 @UpdateMapping 、@DeleteMapping。

@ResponseBody 注解

@responseBody 注解的作⽤是将 Controller 的⽅法返回的对象通过适当的转换器转换为指定的格式之后,写⼊到**Response **对象的 body 区,通常⽤来返回 JSON 数据或者是 XML 数据。 注意:在使⽤此注解之后不会再⾛视图处理器,⽽是直接将数据写⼊到输⼊流中,他的效果等同于通过 Response 对象输出指定格式的数据。

spring mvc,spring和springboot的关系 Spring 框架是基础,提供了核心功能和模块。Spring MVC是 Spring 框架的一部分,专注于 Web 应用开发。是 Spring 框架的扩展,通过自动配置和起步依赖简化了 Spring 应用的开发。Spring 框架提供了全面的企业级应用开发功能。Spring MVC是 Spring 框架的一部分,专注于 Web 应用开发。是 Spring 框架的扩展,通过自动配置和起步依赖简化了 Spring 应用的开发。 阅读详情

相关推荐

Spring Boot、Spring MVC 和 Spring 有什么区别

Spring 是整个生态的基础,提供了最核心的 IoC 容器、AOP 等功能。Spring MVC 是基于 Spring 的 Web 框架,专门用来处理 HTTP 请求,是 Spring 的一个子模块。而 Spring Boot 是对 Spring 全家桶的封装和自动配置工具,目的是简化开发、统一约定、提升效率。Spring 是基础、Spring MVC 是扩展、Spring Boot 是加速器。

完全体 1230

阶段一模块一

首先,说明一些自己学习过程中产生的问题: XML 文档解析问题 怎样处理参数以及返回结果 最初,看完自定义持久层框架部分后,我发现了课程里面的简单的框架雏形与 MyBatis 源码之中有很多出入部分,于是我在思考,为什么 MyBatis 要这样做?于是我决定不只是简单地写一个自定义持久层框架,而是参照着 MyBatis 源代码实现一个简版的 MyBatis 框架。 XML 配置文件解析问题: 翻阅 MyBatis 源码,我们可以发现,MyBatis 没有使用课程中的 Dom4J 技术,而是使用 DO

LiveForCode的博客 124

Spring Web MVC (Spring MVC) 的相关例题及解析

MVC、web MVC、Spring MVC 和 Spring Web MVC的联系与区别: 1.MVC 是一种架构分层模式 2.web MVC 是指在 web 领域下实践的 MVC,因为 web 领域的视图层跟 native 应用的视图层不太能划等号 3.Spring MVC 和 Spring Web MVC 是同一个东西,就是 Spring Framework 里的一个模块。在 Spring Framework 介绍页面 写的是 Spring MVC,然而点进去后具体的描述页面 使用 Spring We

努力是为了站在万人之中,成为别人的光 3万+

Spring Boot Spring MVC

Spring MVC 是一个基于模型-视图-控制器(MVC)模式的 Web 框架,提供了一整套处理 HTTP 请求的工具,包括控制器(Controller)、视图解析(View Resolver)和模型绑定(Model Binding)。

Flying_Fish_roe的博客 2016

揭秘大型语言模型:从神经元到思维透明的奇妙旅程

这篇博客带你走进大型语言模型的内部世界,从神经元的小任务,到功能向量的团队合作,再到层间的协作和思维的透明化。掌握这些知识,能让你在开发中更高效地优化AI,在研究中更深入地探索模型的奥秘。建议多动手实践,把这些理论变成自己的能力!

数据与算法架构提升之路专栏 1521

SAP公司间采购后台配置及前台操作详解

公司间采购后台配置及前台操作详解 SAP 实施中公司间交易几乎每个项目都会有此业务需求,比如内地很多公司都会在香港设置贸易型子公司。通过香港公司接单,然后转内地公司生产,或内地公司通过香港公司采购进口原材料,这些业务必然会涉及到公司间交易,下面我将详细说明下SAP是如何实现这种业务场景的,供大家参考。 配置前必须前台先创建公司间供应商主数据和客户主数据 1. 创建相应的客户主数据 功能说明 公司间...

weixin_40672823的博客 1万+

Spring Web MVC(Spring MVC)

4.实现服务器端代码学习Spring MVC, 其实就是学习各种Web开发需要⽤的到注解是⼀个 Web 框架.,简称之为: Spring MVCMVC 定义eg:HR就是View(视图), 负责接待候选⼈, 并告知候选⼈⾯试结果不同的部⻔, 就是Controller(控制器), HR根据候选⼈来选择对应的部⻔来进⾏⾯试⾯试官, 就是Model层, 来处理⾯试这个事情Spring MVCMVC 是⼀种架构设计模式, 也是⼀种思想, ⽽ Spring MVC。

2301_80363309的博客 1615

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

Spring MVC—Spring MVC概述

Spring MVC

且将&的博客 695

Ubuntu 上 1Panel 的安装与高效运维实践

本文详细介绍了在Ubuntu系统上安装和高效运维1Panel面板的完整实践指南。内容涵盖了一键安装、Docker容器可视化部署、计划任务自动化以及网站数据库管理等核心功能,并提供了安全加固、资源监控与数据备份等进阶技巧,旨在帮助用户快速搭建并管理一个强大易用的服务器环境。

weixin_29210759的博客 144

用STC8单片机解码EV1527遥控信号:从波形分析到C代码实现(附完整库)

本文详细介绍了如何使用STC8单片机解码EV1527遥控信号,从波形分析到C代码实现的完整过程。内容包括EV1527协议解析、硬件搭建、信号捕获技巧、解码算法实现及优化策略,并附有完整库代码,帮助开发者快速实现智能家居设备的无线控制。

weixin_34093995的博客 298

Spring MVC配置

Spring MVC(Model-View-Controller)是 Spring 框架中专门处理 Web 层的模块。作为一款功能强大的 Web 框架,它遵循 MVC 模式,将应用的各个部分分离开来。具体来说,Spring MVC 是一个前端控制器(DispatcherServlet),用于接收用户请求,并根据不同的请求,分发到具体的 Controller。然 Controller 处理请求逻辑并返回数据,最后将结果交给 ViewResolver 解析为具体的视图。

m0_75260099的博客 1595

课设报告-超市收银系统 javaweb(附源代码)

超市收银系统由收银员输入顾客的会员卡卡号(若有卡),所购买的货号。从数据库中取出有关价格信息,在把这些信息返回给收银台,同时把收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。另外,对没有卡的消费不记录该顾客的消费情况扥个人信息,如果一个未持卡顾客一次购买满200元,可围棋发放一张会员卡,以后在该商场购物可享受9折优惠。

m0_71106830的博客 2975

Spring MVC 全面解析

**Spring MVC** 是 Spring 框架中的一个模块,它基于 MVC(Model-View-Controller)设计模式,旨在帮助开发者构建灵活、松耦合的 Web 应用。主要目的是简化传统 Servlet+JSP 模式下的 Web 开发方式。

技术让我们连接在一起 2028

【AUTOSAR-COM】-2.3_通过PduGroup批量控制CAN Frame/Pdu的接收

-->如果实现类似UDS诊断 $28服务,控制所有APP CAN Rx Frame/Pdu/报文接收; -->自定义过滤CAN信号的接收。

「汽车电子助手」的博客 1991

ADS基础教程23 - 有限元电磁仿真(FEM)可视化操作

一、引言 二、FEM可视化操作流程1.打开可视化界面2.查看介质的网格3.设置网格颜色4.选择网格5.传感器选择6.编辑传感器7.选择频率8.动画 三、总结介绍了在ADS中如何进行FEM仿真场视图操作过程。

XZ_ZC的博客 1816

Spring Web MVC

Spring Web MVC入门 和 postman使用

qq_67549203的博客 1481

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

spring mvc是什么_Spring、Spring Boot与Spring MVC

总论Spring框架就像一个家族,有众多衍生产品例如boot、security、jpa等等。但他们的基础都是Spring的ioc和aop。ioc提供了依赖注入的容器,aop解决了面向横切面的编程;然后在此二者的基础上实现了其他延伸产品的高级功能。Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题。后来因为 Spring 的配置非常复杂,各种XML、 Ja...

weixin_39566578的博客 108

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Spring】Spring MVC 入门(2)

什么是MVC,什么是Spring Web MVC,Spring MVC 三个重点:建立连接、请求、响应。应用分层(三层架构)

m0_74164458的博客 1484

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【JAVA】Spring MVC 详解

Spring MVC 详解

weixin_37559642的博客 2035

Spring MVC 是什么?

Spring MVC 是 Spring 为表述层提供的基于 MVC 设计理念的优秀的 Web 框架,是 Spring 的一个子项目,是 JavaEE 项目表述层开发的首选方案。

JiaHao汤 1123

Spring MVC 与 Spring Boot

Spring MVC 是 "工具":解决 Web 层的请求处理问题,是 Spring 生态的 Web 核心。Spring Boot 是 "加速器":基于 Spring MVC 等 Spring 组件,简化开发流程,让开发者更专注于业务逻辑而非配置。Spring Boot = Spring MVC + 自动配置 + 起步依赖 + 嵌入式服务器 + ...,它是使用 Spring MVC 的最佳实践方式。

2502_92141759的博客 759
上一篇: Spring Boot
下一篇: Spring
LiveForCode
博客等级 码龄5年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值