SpringMVC简介和体验

一、SpringMVC简介和体验

1.1 介绍

Spring Web MVC :: Spring Framework

Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。

在控制层框架历经Strust、WebWork、Strust2等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC作为Java EE项目表述层开发的首选方案。之所以能做到这一点,是因为SpringMVC具备如下显著优势:

  • Spring 家族原生产品,与IOC容器等基础设施无缝对接
  • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
  • 代码清新简洁,大幅度提升开发效率
  • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
  • 性能卓著,尤其适合现代大型、超大型互联网项目要求

原生Servlet API开发代码片段

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  String userName = request.getParameter("userName");System.out.println("userName="+userName);
}

基于SpringMVC开发代码片段

@RequestMapping("/user/login")
public String login(@RequestParam("userName") String userName,Sting password){log.debug("userName="+userName);//调用业务即可return "result";
}

1.2 主要作用

SSM框架构建起单体项目的技术栈需求!其中的SpringMVC负责表述层(控制层)实现简化!

SpringMVC的作用主要覆盖的是表述层,例如:

  • 请求映射
  • 数据输入
  • 视图界面
  • 请求分发
  • 表单回显
  • 会话控制
  • 过滤拦截
  • 异步交互
  • 文件上传
  • 文件下载
  • 数据校验
  • 类型转换
  • 等等等

最终总结:

  1. 简化前端参数接收( 形参列表 )
  2. 简化后端数据响应(返回值)
  3. 以及其他......

1.3 核心组件和调用流程理解

Spring MVC与许多其他Web框架一样,是围绕前端控制器模式设计的,其中中央 Servlet DispatcherServlet 做整体请求处理调度!

除了DispatcherServletSpringMVC还会提供其他特殊的组件协作完成请求处理和响应呈现。

SpringMVC处理请求流程:

SpringMVC涉及组件理解:

  1. DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]
  2. HandlerMapping : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它内部缓存handler(controller方法)和handler访问路径数据,被DispatcherServlet调用,用于查找路径对应的handler![秘书]
  3. HandlerAdapter : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它可以处理请求参数和处理响应数据数据,每次DispatcherServlet都是通过handlerAdapter间接调用handler,他是handler和DispatcherServlet之间的适配器![经理]
  4. Handler : handler又称处理器,他是Controller类内部的方法简称,是由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果![打工人]
  5. ViewResovler : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效!视图解析器主要作用简化模版视图页面查找的,但是需要注意,前后端分离项目,后端只返回JSON数据,不返回页面,那就不需要视图解析器!所以,视图解析器,相对其他的组件不是必须的![财务]

1.4 快速体验

体验场景需求

配置分析

  • DispatcherServlet,设置处理所有请求!
  • HandlerMapping,HandlerAdapter,Handler需要加入到IoC容器,供DS调用!
  • Handler自己声明(Controller)需要配置到HandlerMapping中供DS查找!

准备项目

  • 创建项目springmvc-base-quick。注意:需要转成maven/web程序!!
  • 导入依赖
<properties><spring.version>6.0.6</spring.version><servlet.api>9.1.0</servlet.api><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies><!-- springioc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- web相关依赖  --><!-- 在 pom.xml 中引入 Jakarta EE Web API 的依赖 --><!--在 Spring Web MVC 6 中,Servlet API 迁移到了 Jakarta EE API,因此在配置 DispatcherServlet 时需要使用Jakarta EE 提供的相应类库和命名空间。错误信息 “‘org.springframework.web.servlet.DispatcherServlet’is not assignable to ‘javax.servlet.Servlet,jakarta.servlet.Servlet’” 表明你使用了旧版本的Servlet API,没有更新到 Jakarta EE 规范。--><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>${servlet.api}</version><scope>provided</scope></dependency><!-- springwebmvc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency></dependencies>
  • Controller声明
@Controller
public class HelloController {//handlers/*** handler就是controller内部的具体方法* @RequestMapping("/springmvc/hello") 就是用来向handlerMapping中注册的方法注解!* @ResponseBody 代表向浏览器直接返回数据!*/@RequestMapping("/springmvc/hello")@ResponseBodypublic String hello(){System.out.println("HelloController.hello");return "hello springmvc!!";}
}
  • Spring MVC核心组件配置类声明springmvc涉及组件信息的配置类
//TODO: SpringMVC对应组件的配置类 [声明SpringMVC需要的组件信息]//TODO: 导入handlerMapping和handlerAdapter的三种方式//1.自动导入handlerMapping和handlerAdapter [推荐]//2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载//3.使用@Bean方式配置handlerMapper和handlerAdapter
@EnableWebMvc     
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {@Beanpublic HandlerMapping handlerMapping(){return new RequestMappingHandlerMapping();}@Beanpublic HandlerAdapter handlerAdapter(){return new RequestMappingHandlerAdapter();}}
  • SpringMVC环境搭建对于使用基于 Java 的 Spring 配置的应用程序,建议这样做,如以下示例所示:
//TODO: SpringMVC提供的接口,是替代web.xml的方案,更方便实现完全注解方式ssm处理!
//TODO: Springmvc框架会自动检查当前类的实现类,会自动加载 getRootConfigClasses / getServletConfigClasses 提供的配置类
//TODO: getServletMappings 返回的地址 设置DispatherServlet对应处理的地址
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 指定service / mapper层的配置类*/@Overrideprotected Class<?>[] getRootConfigClasses() {return null;}/*** 指定springmvc的配置类* @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] { SpringMvcConfig.class };}/*** 设置dispatcherServlet的处理路径!* 一般情况下为 / 代表处理所有请求!*/@Overrideprotected String[] getServletMappings() {return new String[] { "/" };}
}

启动测试。注意: tomcat应该是10+版本!方可支持 Jakarta EE API!

 


 

本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!

创作不易,如果对你有点帮助的话麻烦点个赞支持一下!

新手小白,欢迎留言指正!

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

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

相关文章

分享几个副业,一天搞100~200不成问题,一不小心收益比你主业还多

每次家庭聚会&#xff0c;总是那些老掉牙的话题在耳边萦绕&#xff1a;“孩子&#xff0c;你工资多少啊&#xff1f;买车买房了吗&#xff1f;”仿佛只有按部就班地上班、结婚生子&#xff0c;才是人生的唯一出路。 然而&#xff0c;在这个充满机遇的时代&#xff0c;谁说“不上…

torch.flatten(x, 1)”和“x.view(x.size(0), -1)”有什么区别?

这两个操作在 PyTorch 中都用于将张量展平为一维。它们的主要区别在于实现方式和适用情况&#xff1a; torch.flatten(x, 1)&#xff1a; 这是一个函数调用&#xff0c;其中 x 是输入张量&#xff0c;1 是指定要展平的起始维度。此函数会将张量 x 从指定的起始维度开始展平&…

2.5W字 一文读懂汽车智能座舱的FLASH 存储市场、技术

吃瓜群众&#xff1a;机哥&#xff0c;存储是什么玩意&#xff0c;我买手机、电脑的时候导购员都说买内存大的&#xff0c;三星的好&#xff0c;品牌大&#xff0c;问题少&#xff0c;我也只有看哪个内存大就买那个。 机哥&#xff1a;额&#xff0c;这个嘛&#xff0c;说来话长…

微信一键登录怎么做的?流程是什么?

实现方法&#xff1a;三种方法 点击【登录】按钮 》(系统框)绑定手机号》如果绑定:登录成功点击【登录】按钮》直接登录成功了 >后续可以在设置中【绑定手机号】点击【登录】按钮 -》 打开一个新的页面(绑定手机号):自己的表单 -》进行手机号绑定的验证 方式一:业务流程)用…

Leetcode 3128. Right Triangles

Leetcode 3128. Right Triangles 1. 解题思路2. 代码实现 题目链接&#xff1a;3128. Right Triangles 1. 解题思路 这一题的话对于任意一个位置&#xff0c;如果该位置为1&#xff0c;假设其所在行中1的个数 r i r_i ri​&#xff0c;所在列中1的个数为 c j c_j cj​&#…

数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计

前言 在上一篇文章中。我们完成了Qt环境的安装&#xff0c;同时完成了有关项目需求的分析并绘制了整体的项目架构图&#xff0c;而在图书管理系统中&#xff0c;其实我们主要完成的就是对数据的增删改查&#xff0c;并将这些功能通过信号与槽机制和可视化界面绑定在一起&#…

VmWare 虚拟机没有网络解决办法

由于最近需要&#xff0c;装了个VM虚拟机&#xff0c;但是突然发现本机有网络&#xff0c;虚拟机却没有网络&#xff0c;更换了虚拟机的网络设置&#xff0c;都尝试过了 都不管用&#xff0c; 最后尝试了这种方法完美解决 还原网络默认设置 首先还原虚拟网络编辑器设置 启动V…

一些可用于研究的GIS数据资源

国内的情况就不用说了&#xff0c;基本上是很难找到可以用于研究的GIS数据资源的。要么就是收费&#xff0c;免费的即使能找到&#xff0c;能否合法合规的进行使用也是一个问题。地理信息数据还是国外比较开放一些&#xff0c;相当多的政府组织或者公益机构对公众开放了下载渠道…

ASP.NET网上图书订阅系统的设计

摘 要 网上图书订阅系统基于 Microsoft SQL Server 2000和ASP.NET平台&#xff0c;以C#为编程语言开发,实现了网上图书预订和借阅&#xff0c;订阅信息查询&#xff0c;图书和用户信息的修改&#xff0c;借阅排行和新到图书的查询等功能&#xff0c;这样不但可将管理员从繁重…

springboot 打成的jar包为什么能直接运行?

Spring Boot 应用程序被打包成的jar包之所以可以直接通过 java -jar 命令运行&#xff0c;是因为Spring Boot在构建过程中做了一些特殊的设计和配置。具体原因&#xff1a; Fat/Uber JAR: Spring Boot使用maven插件spring-boot-maven-plugin&#xff08;或Gradle对应的插件&…

【Elasticsearch<四>✈️✈️】SpringBoot 项目整合 Elasticsearch

目录 &#x1f378;前言 &#x1f37b;一、Elasticsearch 本地环境启动 &#x1f37a;二、SpringBoot 项目整合 Elasticsearch 2.1 引入 ES 依赖 2.2 配置 ES 属性 2.3 创建实体类 2.4 操作 ES 的工具类 2.5 操作 ES 的业务层 &#x1f379;三、接口测试 3.1 编写测试类 3…

什么是Spring Cloud的负载均衡?如何实现?

Spring Cloud的服务注册与发现机制在微服务架构中发挥着至关重要的作用&#xff0c;确保服务之间的动态通信和协同工作。以下是关于Spring Cloud如何实现服务注册与发现的进一步细节&#xff1a; 服务注册 在Spring Cloud微服务架构中&#xff0c;服务注册通常是通过集成特定…

外贸企业邮箱是什么?做外贸企业邮箱哪个好?

外贸企业邮箱是什么&#xff1f;外贸企业在进行跨国沟通时必不可少的工具就是外贸企业邮箱&#xff0c;外贸企业邮箱需要具备的条件就是海外邮件抵达率高、安全稳定、多语言沟通。而我们又怎么选择一个适合的外贸企业邮箱呢&#xff1f;小编今天带您一起了解。 一、外贸企业邮…

【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕汉字显示示例

所需模块micropython-ssd1306模块 中文下载站&#xff1a;https://www.cnpython.com/pypi/micropython-ssd1306/download 官方下载站&#xff1a;https://pypi.org/project/micropython-ssd1306/ 汉字取模说明 取模工具&#xff1a;pctolcd2002取模方式&#xff1a; UTF-8字…

华为 二层交换机与防火墙连通上网实验

防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量。它可以帮助防止未经授权的访问&#xff0c;保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量&#xff0c;例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

嵌入式系统应用-拓展-FLASH之操作 SFUD (Serial Flash Universal Driver)之KEIL移植

1 SFUD介绍 1.1 初步介绍 SFUD 是一个开源的串行 SPI 闪存通用驱动库。由于市面上有各种类型的串行闪存设备&#xff0c;每种设备都具有不同的规格和指令&#xff0c;因此 SFUD 的设计目的是解决这些差异。这使得我们的产品可以支持不同品牌和规格的闪存&#xff0c;增强了软…

408数据结构-树与森林 自学知识点整理

前置知识&#xff1a;树的基本概念与性质 树的存储结构 树既可以采用顺序存储结构&#xff0c;又可采用链式存储结构。但无论采取哪种方式&#xff0c;都要求能够唯一地反映树中各结点之间的逻辑关系。 1. 双亲表示法 这种存储结构采用一组连续空间来存储每个结点&#xff0…

【力扣一刷】代码随想录day44(动态规划part6 - 背包问题专题: 完全背包理论基础、卡码网52、518. 零钱兑换 II、377. 组合总和 Ⅳ )

【完全背包理论基础】 与01背包问题的区别&#xff1a; 1、物品的可取次数&#xff1a;完全背包和01背包问题唯一不同的地方就是&#xff0c;01背包问题的每种物品只能取0次或1次&#xff0c;而完全背包问题的每种物品可以取无限次。 2、遍历滚动数组的顺序&#xff1a;01背包问…

软件开发标准流程与软件工程基本理论

软件开发标准流程与软件工程基本理论 一、需求分析 软件开发需要&#xff0c;自用户提出开始&#xff0c;商业合作确定&#xff08;规范化&#xff1a;软件开发项目合同&#xff09;&#xff0c;进入软件工程开始阶段&#xff1a;需求分析。 软件项目Team负责需求分析开发人员…

「C++ 内存管理篇 00」指针

目录 一、变量&#xff0c;变量名和指针 1. 什么是变量&#xff1f; 2. 变量名和指针 3. 使用指针获取数据 二、指针变量和数组变量 三、编译器对指针的等级有着严格的检查 四、指针的加减 1. 存放指针的变量的加减 2. 存放指针的变量的自增自减 3. 两个指针相减 一、变量&…