SSM框架从入门到入土(SpringMVC入门开发全流程解析)

目录

入门案例步骤:

注解解释:

SpringMVC入门程序开发总结(1+N)

注意:

SpringMVC专用

设置请求路径(固定格式)

专门加载spring的配置类:

流程分析:

启动服务器初始化过程

单次请求过程:

Bean加载控制详解

解决方案:


前言:

SpringMVc概述

SpringMvc技术与Servlet技术功能等同,均属于web层开发技术

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

优点

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

总览:

入门案例步骤:

1.使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标
<dependency>
<groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency>

2.创建SpringMVC控制器类(等同于Servlet功能)
@Controller
public class UserController {
@RequestMapping("/save")@ResponseBodypublic String save(){
System.out.println("user save ...");return "{'info':'springmvc'}";
}

3.初始化SpringMVC环境(同Spring环境),设定SpringMVc加载对应的bean
@Configuration
@ComponentScan("com.itheima.controller")public class SpringMvcConfig {}

4.初始化Servlet容器,加载SpringMVc环境,并设置SpringMVc技术处理的请求(一次性操作)
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {protected WebApplicationContext createServletApplicationContext(),初始化容器并注册配置类 {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);
return ctx;
protected String[] getServletMappings() {return new String[]{"/"};

protected WebApplicationContext createRootApplicationContext() {return null;

注解解释:

名称:@Controller

类型:类注解

位置:SpringMVc控制器类定义上方

作用:设定SpringMVc的核心控制器bean

名称:@RequestMapping

类型:方法注解

位置:SpringMVc控制器方法定义上方

作用:设置当前控制器方法请求访问路径

名称:@ResponseBody

类型:方法注解

位置:SpringMVC控制器方法定义上方作用:设置当前控制器方法响应内容为当前返回值,无需解析

SpringMVC入门程序开发总结(1+N)

一次性工作

创建工程,设置服务器,加载工程

导入坐标创建web容器启动类,加载SpringMVC配置,并设置SpringMVc请求拦截路径SpringMVc核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)

多次工作

定义处理请求的控制器类

定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

注意:

SpringMVC专用

AbstractDispatcherServletInitializer类 是SpringMVc提供的快速初始化web3.容器的抽象类AbstractDispatcherServletInitializer 提供三个接口方法供用户实现
createServletApplicationcontext() 方法,创建Servlet容器时,加载SpringMVc对应的bean并放入WebApplicationContext 对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围

设置请求路径(固定格式)

AbstractDispatcherServletInitializer类是SpringMVc提供的快速初始化Web3.0容器的抽象类AbstractDispatcherServletInitializer提供三个接口方法供用户实现getServletMappings()方法,++设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVc进行处理++

专门加载spring的配置类:

createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringrVC对应的bean,使用当前方法进行,使用方式同createServletApplicationContext()
protected WebApplicationContext createRootApplicationContext() {return null;

流程分析:

启动服务器初始化过程

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

  1. 执行createServletApplicationContext方法, 创建了WebApplicationContext象

3.加载SpringMvcConfig

4.执行@ComponentScan加载对应的bean

5.加载UserController,每个@RequestMapping的名称对应一个具体的方法

6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

说简单点就是将springmvc的配置加载到tomcat的容器中

  • Tomcat = 一个空的"商铺店面"(只有货架和收银台)

  • Spring MVC配置 = 你的"商品"和"营业规则"

  • 加载到Tomcat容器 = 把你的商品摆上货架,告诉收银台如何收钱

而springboot大大简化了这一过程,启动类内嵌的tomcat服务器。

单次请求过程:

1.发送请求localhost/save

2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理

3.解析请求路径/save

4.由/save匹配执行对应的方法save()

5.执行save()

6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

Bean加载控制详解

什么是Bean加载控制?

控制哪些Bean在什么时候被创建和初始化

为什么需要Bean加载控制?不同环境使用不同的Bean,条件化Bean加载,解决Spring MVC的双容器问题

补充:

  • Spring = 公司总部(提供基础设施、人员管理、财务管理等)

  • Spring MVC = 公司的客服部门(专门处理客户请求和响应)

解决方案:

方式一:Spring加载的bean设定扫描范围为com.example,排除掉controller包内的bean

复制代码
// 方法1:精确控制扫描范围
@SpringBootApplication
// 只扫描非Web组件,排除@Controller等
@ComponentScan(
    basePackages = "com.example",
    excludeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,
        classes = {Controller.class, RestController.class}

方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等

bean的加载格式:

简化开发:

相关推荐
B站计算机毕业设计超人7 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
B站计算机毕业设计超人7 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城7 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
王九思7 天前
Hive Thrift Server 介绍
数据仓库·hive·hadoop
土拨鼠烧电路7 天前
笔记11:数据中台:不是数据仓库,是业务能力复用的引擎
数据仓库·笔记
Asher05097 天前
Hive核心知识:从基础到实战全解析
数据仓库·hive·hadoop
xhaoDream7 天前
Hive3.1.3 配置 Tez 引擎
大数据·hive·tez
yumgpkpm7 天前
AI视频生成:Wan 2.2(阿里通义万相)在华为昇腾下的部署?
人工智能·hadoop·elasticsearch·zookeeper·flink·kafka·cloudera
Asher05097 天前
Hadoop核心技术与实战指南
大数据·hadoop·分布式