SSM之SpringMVC day01
创始人
2025-05-31 20:18:42
0

今日内容

  • 理解SpringMVC相关概念
  • 完成SpringMVC的入门案例
  • 学会使用PostMan工具发送请求和数据
  • 掌握SpringMVC如何接收请求、数据和响应结果
  • 掌握RESTful风格及其使用
  • 完成基于RESTful的案例编写

SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。

对于SpringMVC我们主要学习如下内容:

  • SpringMVC简介
  • 请求与响应
  • REST风格
  • SSM整合(注解版)
  • 拦截器

SpringMVC是处于Web层的框架,所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端,所以如何处理请求和响应是SpringMVC中非常重要的一块内容。

REST是一种软件架构风格,可以降低开发的复杂性,提高系统的可伸缩性,后期的应用也是非常广泛。

SSM整合是把咱们所学习的SpringMVC+Spring+Mybatis整合在一起来完成业务开发,是对我们所学习这三个框架的一个综合应用。

对于SpringMVC的学习,最终要达成的目标:

  1. 掌握基于SpringMVC获取请求参数和响应json数据操作
  2. 熟练应用基于REST风格的请求路径设置与参数传递
  3. 能够根据实际业务建立前后端开发通信协议并进行实现
  4. 基于SSM整合技术开发任意业务模块功能

1,SpringMVC概述

在这里插入图片描述
在这里插入图片描述

学习SpringMVC我们先来回顾下现在web程序是如何做的,咱们现在web程序大都基于三层架构来实现。

三层架构
在这里插入图片描述

  • 浏览器发送一个请求给后端服务器,后端服务器现在是使用Servlet来接收请求和数据

  • 如果所有的处理都交给Servlet来处理的话,所有的东西都耦合在一起,对后期的维护和扩展极为不利

  • 将后端服务器Servlet拆分成三层,分别是webservicedao

    • web层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端
    • service层主要负责业务逻辑的处理
    • dao层主要负责数据的增删改查操作
  • servlet处理请求和数据的时候,存在的问题是一个servlet只能处理一个请求

  • 针对web层进行了优化,采用了MVC设计模式,将其设计为controllerviewModel

    • controller负责请求和数据的接收,接收后将其转发给service进行业务处理 这里也就是我们SpringMVC要干的活
    • service根据需要会调用dao对数据进行增删改查
    • dao把数据处理完后将结果交给service,service再交给controller
    • controller根据需求组装成Model和View,Model和View组合起来生成页面转发给前端浏览器
    • 这样做的好处就是controller可以处理多个请求,并对请求进行分发,执行不同的业务操作。

随着互联网的发展,上面的模式因为是同步调用,性能慢慢的跟不是需求,所以异步调用慢慢的走到了前台,是现在比较流行的一种处理方式。
在这里插入图片描述

  • 因为是异步调用,所以后端不需要返回view视图,将其去除
  • 前端如果通过异步调用的方式进行交互,后台就需要将返回的数据转换成json格式进行返回
  • SpringMVC主要负责的就是
    • controller如何接收请求和数据
    • 如何将请求和数据转发给业务层
    • 如何将响应数据转换成json发回到前端

介绍了这么多,对SpringMVC进行一个定义

  • SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

  • 优点

    • 使用简单、开发便捷(相比于Servlet)
    • 灵活性强

    这里所说的优点,就需要我们在使用的过程中慢慢体会。

2,SpringMVC入门案例

因为SpringMVC是一个Web框架,将来是要替换Servlet,所以先来回顾下以前Servlet是如何进行开发的?

1.创建web工程(Maven结构)

2.设置tomcat服务器,加载web工程(tomcat插件)

3.导入坐标(Servlet)

4.定义处理请求的功能类(UserServlet)

5.设置请求映射(配置映射关系)

SpringMVC的制作过程和上述流程几乎是一致的,具体的实现流程是什么?

1.创建web工程(Maven结构)

2.设置tomcat服务器,加载web工程(tomcat插件)

3.导入坐标(SpringMVC+Servlet)

4.定义处理请求的功能类(UserController)

5.设置请求映射(配置映射关系)

6.将SpringMVC设定加载到Tomcat容器中

2.1 需求分析

2.2 案例制作

在这里插入图片描述

步骤1:导入坐标

在这里插入图片描述

步骤2 :类似javawebh的servlet 也就是写bean对象 不过得用@Controller来定义bean对象

在这里插入图片描述

//2.定controller
//2.1使用@Controller定义bean
@Controller
public class UserController {//我们提供给外部一个方法,它就可以用来处理我们的请求了//这里我们完成了处理请求的方法 但是用户发哪个请求可以调用到该方法呢?//2.2设置当前操作的访问路径@RequestMapping("/save")//2.3设置当前操作的返回值类型@ResponseBody //就是你呀把你返回的东西整体作为响应的内容给到外边public String save(){System.out.println("user save ...");return "{'info':'springmvc'}";}@RequestMapping("/delete")@ResponseBodypublic String delete(){System.out.println("user delete ...");return "{'info':'springmvc'}";}
}

步骤3 .创建springmvc的配置文件,加截controller对应的bean对象

在这里插入图片描述

//3.创建springmvc的配置文件,加截controller对应的bean
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}

//tomcat容器启动配置 用来加载spring
//4.定义一个servlet容器启动的配置类,在里面加载spring的配置

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {//加载springmvc配置类protected WebApplicationContext createServletApplicationContext() {//初始化WebApplicationContext对象AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();/*AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();这段代码初始化的是Spring容器,具体来说是一个基于注解配置的Web应用程序上下文容器。在这里,AnnotationConfigWebApplicationContext类是Spring Framework提供的一种基于Java配置的容器实现,它可以用来加载基于注解的Spring配置类,从而实现Spring IOC容器的初始化和管理。它是Spring容器的一种实现方式,用于构建和管理Spring应用程序的Bean以及提供其他Spring功能,例如事务管理、AOP等。相比之下,Tomcat容器是一个Web服务器容器,它用于部署和运行Web应用程序,而不是创建和管理Spring应用程序的Bean。Tomcat容器使用的是Servlet规范,它提供了一种Servlet容器,用于部署和运行基于Servlet规范的Web应用程序。*///加载指定配置类ctx.register(SpringMvcConfig.class);/*ctx.register(SpringMvcConfig.class); 也就是把springMVC注册进spring容器中这段代码是在将一个Spring MVC配置类(SpringMvcConfig)注册到上下文容器(ctx)中。具体来说,register()方法是AnnotationConfigWebApplicationContext类提供的一种注册方法,它可以将一个或多个基于Java配置的Spring配置类注册到容器中,以供容器初始化和管理。在这里,SpringMvcConfig类是一个基于注解配置的Spring MVC配置类,它包含了Spring MVC框架所需的相关配置,例如视图解析器、拦截器、处理器映射等等。通过将SpringMvcConfig类注册到容器中,可以使得Spring MVC框架能够正确地初始化和配置,从而实现Web应用程序的处理和响应。*/return ctx;}//设置由springmvc控制器处理的请求映射路径protected String[] getServletMappings() {return new String[]{"/"};}//加载spring配置类protected WebApplicationContext createRootApplicationContext() {return null;}/*核心思想:问:tomcat如何读取这个servlet容器初始化类的。是因为它继承了AbstractDispatcherServletInitializer ??chatgpt:是的,Tomcat可以读取Servlet容器初始化类是因为该类继承了Spring Framework提供的AbstractDispatcherServletInitializer抽象类。在Web应用程序启动时,Servlet容器会扫描web.xml文件,加载并初始化所有配置的Servlet和Filter,同时会调用onStartup()方法来启动Spring应用程序上下文。在这个过程中,如果发现有继承了AbstractDispatcherServletInitializer抽象类的Servlet容器初始化类,就会自动调用其中的方法,进行自定义的Servlet容器初始化和配置,包括创建Spring应用程序上下文容器、注册Servlet和Filter、设置请求映射路径等等。最终,Servlet容器会将这些配置应用到Web应用程序中,使得Web应用程序能够正确地处理和响应请求。因此,继承AbstractDispatcherServletInitializer抽象类是实现SpringMVC集成的一种常用方式,它可以自动化配置Servlet和Filter,并使用Spring应用程序上下文容器来管理和加载SpringMVC的配置类和组件。同时,它也支持自定义配置,例如设置请求映射路径、添加拦截器、注册其他Servlet和Filter等等。*/
}

步骤7:配置Tomcat环境

步骤8:启动运行项目

步骤9:浏览器访问

浏览器输入http://localhost/save进行访问
在这里插入图片描述
同时控制台输出
在这里插入图片描述
至此SpringMVC的入门案例就已经完成。

注意事项

  • SpringMVC是基于Spring的,在pom.xml只导入了spring-webmvcjar包的原因是它会自动依赖spring相关坐标
  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
  • AbstractDispatcherServletInitializer提供了三个接口方法供用户实现
    • createServletApplicationContext方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围
    • getServletMappings方法,设定SpringMVC对应的请求映射路径,即SpringMVC拦截哪些请求
    • createRootApplicationContext方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式和createServletApplicationContext相同。
    • createServletApplicationContext用来加载SpringMVC环境
    • createRootApplicationContext用来加载Spring环境

知识点1:@Controller

名称@Controller
类型类注解
位置SpringMVC控制器类定义上方
作用设定SpringMVC的核心控制器bean

知识点2:@RequestMapping

名称@RequestMapping
类型类注解或方法注解
位置SpringMVC控制器类或方法定义上方
作用设置当前控制器方法请求访问路径
相关属性value(默认),请求访问路径

知识点3:@ResponseBody

名称@ResponseBody
类型类注解或方法注解
位置SpringMVC控制器类或方法定义上方
作用设置当前控制器方法响应内容为当前返回值,无需解析

2.3 入门案例总结

  • 一次性工作
    • 创建工程,设置服务器,加载工程
    • 导入坐标
    • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
    • SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
  • 多次工作
    • 定义处理请求的控制器类
    • 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

2.4 工作流程解析

为了更好的使用SpringMVC,我们将SpringMVC的使用过程总共分两个阶段来分析,分别是启动服务器初始化过程单次请求过程
在这里插入图片描述

2.4.1 启动服务器初始化过程

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {//加载springmvc配置类protected WebApplicationContext createServletApplicationContext() {//初始化WebApplicationContext对象AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();//加载指定配置类ctx.register(SpringMvcConfig.class);return ctx;}//设置由springmvc控制器处理的请求映射路径protected String[] getServletMappings() {return new String[]{"/"};}//加载spring配置类protected WebApplicationContext createRootApplicationContext() {return null;}
}

chatgpt : 您提供的代码是一个Java类,它扩展了AbstractDispatcherServletInitializer类,该类是Spring MVC框架的一部分。该类负责配置和初始化运行Spring MVC应用程序的servlet容器。 当servlet容器启动时,它会扫描应用程序中的所有ServletContainersInitConfig子类,并调用其createServletApplicationContext()和getServletMappings()方法来初始化Spring MVC应用程序的WebApplicationContext对象和处理请求的映射路径。 createServletApplicationContext()方法创建一个新的AnnotationConfigWebApplicationContext对象,并将SpringMvcConfig类注册为配置类。SpringMvcConfig类包含了应用程序的Spring MVC配置,例如视图解析器、拦截器、处理器映射等等。当该方法被调用时,Spring会扫描SpringMvcConfig类并将其注册为应用程序的Bean,以便在处理请求时使用。 getServletMappings()方法返回一个字符串数组,其中包含应用程序的根路径映射。在此例中,该数组只包含一个字符串"/",这表示所有的请求都将由Spring MVC的控制器来处理。 createRootApplicationContext()方法返回一个WebApplicationContext对象,但在此例中返回null,表示该应用程序没有任何根配置。这种情况通常在单个Spring应用程序中使用,而不是在使用Spring MVC框架的应用程序中使用。 总之,当servlet容器启动时,它将扫描并初始化所有ServletContainersInitConfig子类,并使用这些类中的方法配置和初始化Spring MVC应用程序。这些配置包括创建WebApplicationContext对象、注册应用程序的Bean和处理请求的映射路径。

  1. 服务器启动,执行ServletContainersInitConfig类,初始化web容器

    • 功能类似于以前的web.xml
  2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象

    • 该方法加载SpringMVC的配置类SpringMvcConfig来初始化SpringMVC的容器
      创建Spring容器
  3. 加载SpringMvcConfig配置类 Spring MVC是为了给Spring容器进行一些特定的配置而存在的,以便实现Web应用程序的开发和管理 理解为ctx.register(SpringMvcConfig.class) springMVC是为了给spring容器进行一些配置

在这里插入图片描述 4. 执行@ComponentScan加载对应的bean

  • 扫描指定包及其子包下所有类上的注解,如Controller类上的@Controller注解
  1. 加载UserController,每个@RequestMapping的名称对应一个具体的方法在这里插入图片描述
    此时就建立了 /save 和 save方法的对应关系 这一组信息并不是放在UserController这个类定义的 所有springmvc是放在一起统一管理的 并不是放在每一个bean下

  2. 当浏览器访问对应的url中也就是对应的javewebservelet路径执行getServletMappings方法,设定SpringMVC拦截请求的路径规则

  • /代表所拦截请求的路径规则,只有被拦截后才能交给SpringMVC来处理请求

总结 (个人总结)
首先 ServletContainersInitConfig类由tomcat创建对象然后调用其中的方法。。方法中 AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();创建spring容器。ctx.register(SpringMvcConfig.class);spring容器加载springMVC配置类,所以spring执行SpringMvcConfig.java文件的内容,然后读取到SpringMvcConfig.java中的注解@ComponentScan(“com.itheima.controller”)然后去controller目录下的类进行对象实例化

2.4.2 单次请求过程

  1. 发送请求http://localhost/save
  2. web容器发现该请求满足SpringMVC拦截规则,将请求交给SpringMVC处理
  3. 解析请求路径/save
  4. 由/save匹配执行对应的方法save()
    • 上面的第五步已经将请求路径和方法建立了对应关系,通过/save就能找到对应的save方法
  5. 执行save()
  6. 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方

相关内容

热门资讯

【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
GCN的几种模型复现笔记 引言 本篇笔记紧接上文,主要是上一篇看写了快2w字,再去接入代码感觉有点...
数据分页展示逻辑 import java.util.Arrays;import java.util.List;impo...
Redis为什么选择单线程?R... 目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、R...
【已解决】ERROR: Cou... 正确指令: pip install pyyaml
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
Lock 接口解读 前置知识点Synchronized synchronized 是 Java 中的关键字,...
Win7 专业版安装中文包、汉... 参考资料:http://www.metsky.com/archives/350.htm...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
大模型未来趋势 大模型是人工智能领域的重要发展趋势之一,未来有着广阔的应用前景和发展空间。以下是大模型未来的趋势和展...
python实战应用讲解-【n... 目录 如何在Python中计算残余的平方和 方法1:使用其Base公式 方法2:使用statsmod...
学习u-boot 需要了解的m... 一、常用函数 1. origin 函数 origin 函数的返回值就是变量来源。使用格式如下...
常用python爬虫库介绍与简... 通用 urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库&...
药品批准文号查询|药融云-中国... 药品批文是国家食品药品监督管理局(NMPA)对药品的审评和批准的证明文件...
【2023-03-22】SRS... 【2023-03-22】SRS推流搭配FFmpeg实现目标检测 说明: 外侧测试使用SRS播放器测...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
初级算法-哈希表 主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-哈希表...
进程间通信【Linux】 1. 进程间通信 1.1 什么是进程间通信 在 Linux 系统中,进程间通信...
【Docker】P3 Dock... Docker数据卷、宿主机与挂载数据卷的概念及作用挂载宿主机配置数据卷挂载操作示例一个容器挂载多个目...