SSM - Springboot - MyBatis-Plus 全栈体系(十八)

news2025/1/12 13:30:17

第四章 SpringMVC

  • SpringMVC 实战:构建高效表述层框架

一、SpringMVC 简介和体验

1. 介绍

  • 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";
}

2. 主要作用

在这里插入图片描述

  • SSM 框架构建起单体项目的技术栈需求!其中的 SpringMVC 负责表述层(控制层)实现简化!
  • SpringMVC 的作用主要覆盖的是表述层,例如:
    • 请求映射
    • 数据输入
    • 视图界面
    • 请求分发
    • 表单回显
    • 会话控制
    • 过滤拦截
    • 异步交互
    • 文件上传
    • 文件下载
    • 数据校验
    • 类型转换
    • 等等等
  • 最终总结:
    • 简化前端参数接收( 形参列表 )
    • 简化后端数据响应( 返回值 )
    • 以及其他…

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 数据,不返回页面,那就不需要视图解析器!所以,视图解析器,相对其他的组件不是必须的![财务]

4. 快速体验

4.1 体验场景需求

在这里插入图片描述

4.2 配置分析
  • DispatcherServlet,设置处理所有请求!
  • HandlerMapping,HandlerAdapter,Handler 需要加入到 IoC 容器,供 DS 调用!
  • Handler 自己声明(Controller)需要配置到 HandlerMapping 中供 DS 查找!
4.3 准备项目
4.3.1 创建项目
  • springmvc-base-quick
  • 注意:需要转成 maven/web 程序!!
4.3.2 导入依赖
<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>
4.4 Controller 声明
@Controller
public class HelloController {

    //handlers

    /**
     * handler就是controller内部的具体方法
     * @RequestMapping("/springmvc/hello") 就是用来向handlerMapping中注册的方法注解!
     * @ResponseBody 代表向浏览器直接返回数据!
     */
    @RequestMapping("/springmvc/hello")
    @ResponseBody
    public String hello(){
        System.out.println("HelloController.hello");
        return "hello springmvc!!";
    }
}
4.5 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.alex.controller") //TODO: 进行controller扫描
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {

    @Bean
    public HandlerMapping handlerMapping(){
        return new RequestMappingHandlerMapping();
    }

    @Bean
    public HandlerAdapter handlerAdapter(){
        return new RequestMappingHandlerAdapter();
    }

}
4.6 SpringMVC 环境搭建

对于使用基于 Java 的 Spring 配置的应用程序,建议这样做,如以下示例所示:

//TODO: SpringMVC提供的接口,是替代web.xml的方案,更方便实现完全注解方式ssm处理!
//TODO: Springmvc框架会自动检查当前类的实现类,会自动加载 getRootConfigClasses / getServletConfigClasses 提供的配置类
//TODO: getServletMappings 返回的地址 设置DispatherServlet对应处理的地址
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

  /**
   * 指定service / mapper层的配置类
   */
  @Override
  protected Class<?>[] getRootConfigClasses() {
    return null;
  }

  /**
   * 指定springmvc的配置类
   * @return
   */
  @Override
  protected Class<?>[] getServletConfigClasses() {
    return new Class<?>[] { SpringMvcConfig.class };
  }

  /**
   * 设置dispatcherServlet的处理路径!
   * 一般情况下为 / 代表处理所有请求!
   */
  @Override
  protected String[] getServletMappings() {
    return new String[] { "/" };
  }
}
4.7 启动测试
  • 注意: tomcat 应该是 10+版本!方可支持 Jakarta EE API!

在这里插入图片描述

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

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

相关文章

OCR让点读笔如虎添翼

点读笔是一种智能学习工具&#xff0c;它可以通过识别文字来提供相应的语音或图像反馈。在实现文字识别功能时&#xff0c;点读笔通常会借助OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术。下面将详细介绍点读笔如何利用OCR技术实现文…

浅析人脸活体检测技术的两种方法

随着人脸识别技术日趋成熟,商业化应用愈加广泛,然而人脸极易用照片、视频等方式进行复制,因此对合法用户人脸的假冒是人脸识别与认证系统安全的重要威胁。目前基于动态视频人脸检测、人脸眨眼、热红外与可见光人脸关联等领先业界的人脸活体检测算法&#xff0c;已经取得了一定的…

Linux0.12内核源码解读(2)-Bootsect.S

作者&#xff1a;小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功、源码解析、科技故事、项目实战、面试八股等更多硬核文章&#xff0c;首发于公众号「小牛呼噜噜」 文章目录 回顾计算机启动过程8086、80x86是什么意思?寄存器初始化CS:IPCPU是如何和ROM相连的?加载MBR到…

餐饮蛋糕鲜花便利店水果店外卖自提小程序开发

对于实体门店小微商家来说&#xff0c;做私域和复购永远是最划算的买卖。店里每天有新客到老客到&#xff0c;做好私域就可以零成本形成稳定客流而且还可以通过活动形成社交裂变和口碑效应。不做好私域和留存就是白白看着自己客户被同行一口一口吃掉。因此也就有了自提外卖小程…

制作婚礼邀请函只需三步,轻松制作走心请柬

制作自己的婚礼邀请函是一种流行的方式来传达你的婚礼信息给你的亲朋好友。在这个数字化的时代&#xff0c;你可以使用在线制作平台来创建自定义的婚礼邀请函。下面是一个简单的步骤指南&#xff0c;教你如何使用乔拓云网在线制作平台制作出超有感觉的婚礼请柬。 首先&#xff…

【Overload游戏引擎分析】从视图投影矩阵提取视锥体及overload对视锥体的封装

overoad代码中包含一段有意思的代码&#xff0c;可以从视图投影矩阵逆推出摄像机的视锥体&#xff0c;本文来分析一下原理 一、平面的方程 视锥体是用平面来表示的&#xff0c;所以先看看平面的数学表达。 平面方程可以由其法线N&#xff08;A, B, C&#xff09;和一个点Q(x0,…

【发表案例】计算机类SCIE,2区,2个月2天录用

计算机类SCIE 【期刊简介】IF&#xff1a;4.0-5.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCIE 在检&#xff0c;正刊 【征稿领域】提高安全性和隐私性的边缘/云的智能方法的研究&#xff0c;如数字孪生等 录用案例&#xff1a;2个月2天录用 2023.09.27 | A…

吃鸡玩家必备!提升战斗力,分享干货,保护账号安全!

你好&#xff01;吃鸡玩家们的福利来了&#xff01;在这里&#xff0c;我将为大家分享一些关于提高游戏战斗力、分享顶级游戏作战干货以及保护账号安全的实用技巧。 首先&#xff0c;让我们来谈提高游戏战斗力的技巧。绝地求生是一款战略性的游戏&#xff0c;而好的作图工具可以…

Java笔记八(instanceof,类型转换,static详解,抽象类,接口,内部类以及异常)

instanceof 引用类型&#xff0c;判断一个对象是什么类型 使用方法&#xff1a; System.out.println&#xff08;X instanceof Y&#xff09;&#xff1b; 代码理解&#xff1a; public class Application {public static void main(String[] args) {//Obiect>String//…

如何成为合格的测试开发工程师?

是入职两年半的测试开发工程师小编&#xff0c;虽然目前很菜&#xff0c;但还是希望自己继续努力&#xff0c;早日成为一名合格的测试开发工程师&#xff0c;本篇文章也是通过对身边同事的了解&#xff0c;整理了几点对自己的要求&#xff0c;以及重新梳理了下今后的学习路径&a…

CI522 13.56MHZ电动车NFC测试资料

Ci522是一颗工作在13.56MHz频率下的非接触式读写芯片&#xff0c;支持读A卡&#xff08;CI523支持读A/B卡&#xff09;&#xff0c;可做智能门锁、电动车NFC一键启动、玩具NFC开锁等应用。为部分要求低成本&#xff0c;PCB小体积的产品提供了可靠的选择。 Ci522与Si522/MFRC52…

母婴店做微信小程序开发的重要性

随着移动互联网的发展&#xff0c;母婴店传统的线下销售模式已经无法满足现代年轻父母的需求。微信小程序作为一种新型的应用形态&#xff0c;为母婴店提供了新的销售渠道和推广方式。本文将探讨母婴店做微信小程序开发的作用。 一、拓展销售渠道 微信小程序是一种轻量级的应用…

混沌工程初分享

混沌工程初分享 一、什么是混沌工程 1、什么是混沌 混沌是一种现象&#xff0c;在一个动力系统中&#xff0c;因为各种不同的参数变化导致的一系列的连锁反应。比如&#xff1a; 在南美洲亚马逊河流域热带雨林中的蝴蝶&#xff0c;偶尔的几次振翅&#xff0c;可以在两周以后引…

下载遥感数据慢的原因

由于地图资源下载工具2.0工具能够“批量下载”、“错误重试”和“断点续传“&#xff0c;我能够长时间下载并监测网络下载的情况及看到错误&#xff0c;因此我对部分下载进行了分析和总结&#xff1a; 这类网站例如&#xff1a;LANDSAT下载网站!下载速度并不是一直慢而是分时段…

A Survey and Framework of Cooperative Perception 论文阅读

论文链接 A Survey and Framework of Cooperative Perception: From Heterogeneous Singleton to Hierarchical Cooperation 0. Abstract 首次提出统一的 CP&#xff08;Cooperative Percepetion&#xff09; 框架回顾了基于不同类型传感器的 CP 系统与分类对节点结构&#x…

CCF CSP认证 历年题目自练Day25

题目 试题编号&#xff1a; 201403-3 试题名称&#xff1a; 命令行选项 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间…

解决远程git服务器路径改变导致本地无法push的问题

解决远程git服务器路径改变导致本地无法push的问题 &#xff08;1&#xff09;第一步&#xff1a;查看git配置 git config -l&#xff08;2&#xff09;第二步&#xff1a;删除远程git地址 git remote remove origin&#xff08;3&#xff09;第三步&#xff1a;再次查看git配…

JUC第十九讲:Java线程池实现原理及其在美团业务中的实践

JUC第十九讲&#xff1a;Java线程池实现原理及其在美团业务中的实践 随着计算机行业的飞速发展&#xff0c;摩尔定律逐渐失效&#xff0c;多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类&#xff0c;帮…

Vue中如何进行图像识别与人脸对比(如百度AI、腾讯AI)

Vue中的图像识别与人脸对比 在现代Web应用程序中&#xff0c;图像识别和人脸对比技术越来越受欢迎。它们可以用于各种用途&#xff0c;如人脸识别门禁系统、图像分类和验证等。百度AI和腾讯AI是两个流行的人工智能平台&#xff0c;它们提供了强大的图像识别和人脸对比API。本文…

【threejs】基本编程概念及海岛模型展示逻辑

采用three封装模式完成的海岛动画&#xff08;点击这里查看&#xff09; 直接上代码吧 <template><div class"scene"><video id"videoContainer" style"position:absolute;top:0px;left:0px;z-index:100;visibility: hidden"&g…