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()方法的返回值作为响应体返回给请求方

相关内容

热门资讯

苹果系统安卓爱思助手,系统兼容... 你有没有发现,手机的世界里,苹果系统和安卓系统就像是一对欢喜冤家,总是各有各的粉丝,各有各的拥趸。而...
安卓系统占用很大内存,揭秘内存... 手机里的安卓系统是不是让你感觉内存不够用,就像你的房间堆满了杂物,总是找不到地方放新东西?别急,今天...
安卓系统p30,安卓系统下的摄... 你有没有发现,最近安卓系统P30在手机圈里可是火得一塌糊涂呢!这不,我就来给你好好扒一扒这款手机的那...
siri被安卓系统进入了,智能... 你知道吗?最近科技圈可是炸开了锅,因为一个大家伙——Siri,竟然悄悄地溜进了安卓系统!这可不是什么...
最强挂机系统和安卓区别,揭秘安... 亲爱的读者,你是否曾在游戏中遇到过这样的困扰:一边想要享受游戏带来的乐趣,一边又不想放弃手中的零食或...
安卓系统为什么设系统盘,保障稳... 你有没有想过,为什么安卓系统里会有一个叫做“系统盘”的东西呢?这可不是随便设置的,背后可是有大学问的...
王者怎么加安卓系统的,轻松提升... 你有没有想过,你的手机里那款超酷的王者荣耀,怎么才能让它更好地在你的安卓系统上运行呢?别急,今天就来...
安卓手机系统怎么开热点,共享网... 你有没有想过,当你身处一个没有Wi-Fi信号的地方,而你的安卓手机里却存满了精彩视频和游戏时,是不是...
安卓系统11的平板电脑,性能升... 你有没有发现,最近平板电脑市场又热闹起来了?没错,安卓系统11的新一代平板电脑正在悄悄地走进我们的生...
安卓手机系统创始人,安卓手机系... 你有没有想过,那些陪伴我们每天生活的安卓手机,它们的灵魂是谁赋予的呢?没错,就是那位神秘而又传奇的安...
安卓11系统速度提升,体验再升... 你知道吗?最近安卓系统又升级啦!这次可是直接跳到了安卓11,听说速度提升了不少呢!是不是很心动?那就...
安卓5.1原生系统设置apk,... 你有没有想过,你的安卓手机里那些看似普通的设置,其实隐藏着不少小秘密呢?今天,就让我带你一探究竟,揭...
手机安卓系统玩音游,畅享指尖音... 你有没有发现,现在手机上的游戏种类越来越丰富,尤其是音游,简直让人爱不释手!今天,就让我来给你详细介...
安卓系统与win10,系统融合... 你有没有想过,为什么你的手机里装的是安卓系统,而电脑上却是Windows 10呢?这两种操作系统,就...
苹果系统王者安卓系统可以登吗,... 你有没有想过,为什么苹果系统的手机那么受欢迎,而安卓系统的手机却也能在市场上占有一席之地呢?今天,咱...
安卓系统怎么重制系统还原,安卓... 手机用久了是不是感觉卡得要命,想给它来个大变身?别急,今天就来教你怎么给安卓手机重置系统,让它焕然一...
安卓9系统怎样应用分身,轻松实... 你有没有发现,手机里的APP越来越多,有时候一个APP里还要处理好多任务,分身功能简直就是救星啊!今...
获取安卓系统的ip地址,轻松获... 你有没有想过,你的安卓手机里隐藏着一个神秘的IP地址?没错,就是那个能让你在网络世界里找到自己的小秘...
LG彩电安卓系统升级,畅享智能... 你家的LG彩电是不是最近有点儿“闹别扭”,屏幕上时不时地跳出个升级提示?别急,今天就来给你详细说说这...
阴阳师安卓苹果系统,安卓与苹果... 亲爱的玩家们,你是否曾在深夜里,手握手机,沉浸在阴阳师的神秘世界?今天,就让我带你一起探索这款风靡全...