SSM之SpringMVC day01
创始人
2025-05-31 19:13:08
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()方法的返回值作为响应体返回给请求方

相关内容

热门资讯

王凤英入职小鹏3年终获股权,此... 5月7日消息,小鹏汽车披露的监管及年报信息显示,公司总裁王凤英已正式进入股东名册,入职小鹏3年后股权...
五块钱红酒卖断货,便宜红酒为何... 最近一段时间,中国的酒类消费市场可以说是显得格外奇怪,一方面,各种高端酒特别是白酒的消费量出现了明显...
财联社C50风向指数调查:4月... 财联社5月8日讯(记者 夏淑媛)新一期财联社“C50风向指数”结果显示,市场机构对4月新增人民币贷款...
央视硬刚国际足联拒掏20亿,背... 作者| 史大郎&猫哥 来源| 是史大郎&大猫财经Pro 央视这次太刚了,离世界杯开幕还有1个月,死活...
新CEO上任直接放大招!Air... 快科技5月8日消息,苹果即将上任的CEO John Ternus对未来一系列新产品充满信心,称这些设...
“特朗普拟邀英伟达、波音等CE... 据路透社当地时间5月7日报道,特朗普政府正邀请英伟达、苹果、埃克森美孚、波音等大公司首席执行官,于下...
世界杯,还能看到直播吗? 2026年美加墨世界杯距离开幕,仅剩一个多月时间。多方信息显示,中央广播电视总台(以下简称“央视”)...
机构警告AI芯片热潮风险,超威... 5月7日,据央视财经,隔夜超威半导体公司(AMD)股价飙升近19%,带动AI芯片热潮持续升温。AMD...
银行员工转走储户1800万最新... 银行员工转走储户1800万最新进展:2名储户已收到银行全部款项
原创 中... 1994年,安徽省的经济格局曾发生过一次戏剧性的转折。在那一年,一座名为安庆的城市,其国内生产总值(...
昆都仑区:政策“蓄力”消费焕新 “一台5000多元的空调,叠加‘国补’和商场的以旧换新活动,能优惠1000元左右,旧机还能免费上门拆...
乐悦置业竞得佛山顺德乐从镇一商... 观点网讯:5月6日,佛山市顺德区乐从镇一商业地块成功出让,由广东省乐悦置业有限公司竞得,乐从南区·邻...
原创 亦... 《爱情没有神话》这部剧,一开始的命运颇为多舛,经历了几次撤档的波折后,终于在观众面前亮相,但其首播的...
美联储34年最大分歧叠加油价飙... 美联储按预期维持利率不变,但内部出现34年来最严重分歧,叠加布油创2022年6月以来新高,美债遭抛售...
支付宝消费券回收后,资金是否支... 摘要: 支付宝消费券回收变现后,资金能否直接转入信用卡?本文解答到账方式的相关规则,帮助用户了解资金...
中医介绍5个化痰穴位!收藏这篇... 很多人忽略了“痰”的危害,觉得咳几下就没事,殊不知,肺里的痰长期堆积,只会一步步加重身体负担。 中医...
黄金平台“杰我睿”涉嫌经济犯罪... 红星资本局5月7日消息,深圳水贝知名金店“杰我睿”兑付困难事件有了新进展。日前,深圳市公安局罗湖分局...
多地出台购房新政促楼市升温 记... 今年的“五一”假期,伴随着多个城市楼市新政密集落地,在叠加市场信心持续修复的作用下,房地产市场热度持...
谁是五一“吸金王”?这5座城市... 来源:市场资讯 (来源:21城市观) 哪座城市成为“五一”假期的大赢家? 图源:摄图网 作者|赵晓...
“低招低裁”格局稳固劳动力市场... 智通财经APP获悉,美国上周初请失业金人数在经历前一周回落至近几十年来最低水平后出现小幅反弹,表明尽...