SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaweb
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
Spring MVC入门
- 一、Spring MVC概述
- 二、入门案例
- 2.1导入Spring MVC坐标与Servlet坐标
- 2.2创建Spring MVC控制器类(等同于Servlet功能)
- 2.3初始化Spring MVC环境(同Spring环境)
- 2.4初始化Servlet容器,加载Spring MVC环境
- 三、入门案例工作流程
- 四、Controller加载控制
- 4.1Controller加载控制与业务bean加载控制
- 4.2bean的加载格式
- 总结
一、Spring MVC概述
web程序工作流程:web程序通过浏览器访问页面,前端页面使用异步提交的方式发送请求到后端服务器,后端服务器采用表现层、业务层、数据层的三层架构的形式进行开发,页面发送的请求,由表现层接收,获取用户的请求参数号将参数传递到业务层,再由业务层访问数据层,得到用户需要访问的数据后,将数据返回给表现层,表现层拿到数据后,将数据转换成json格式发送给前端页面,前端页面接收数据后解析数据并组织成用户浏览的最终页面信息交给浏览器。
- Spring MVC是一种基于Java实现的MVC模型的轻量级Web框架。
- 优点
-
- 使用简单,开发便捷(相比于Servlet)
-
- 灵活性强
-
二、入门案例
2.1导入Spring MVC坐标与Servlet坐标
<dependencies><!--导入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></dependencies>
2.2创建Spring MVC控制器类(等同于Servlet功能)
//2.定义Controller,使用@Controller定义bean
@Controller
public class UserController {//2.1设置当前操作的访问路径@RequestMapping("/save")//2.2设置当前操作的返回值类型@ResponseBodypublic String save() {System.out.println("user save...");return "{'module':'springmvc'}";}
}
2.3初始化Spring MVC环境(同Spring环境)
- 设定Spring MVC加载对应的bean
//3.创建Springmvc配置文件,加载controller对应的bean
@Configuration
@ComponentScan("com.practice.controller")
public class SpringMvcConfig {
}
2.4初始化Servlet容器,加载Spring MVC环境
- 设置Spring MVC技术处理的请求
package com.practice.config;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;/*** @Author YJ* @Date 2023/8/3 11:01* Description:定义一个Servlet容器启动的配置类,在里面加载spring配置*/
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer {/*** 加载springmvc容器配置** @return*/@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}/*** 设置哪些请求归属springMVC处理** @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** 加载spring容器配置** @return*/@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}


AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类AbstractDispatcherServletInitializer提供三个接口方法供用户实现-
createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入
-
WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext容器范围
-
protected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}
getServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为“/”表示拦截所有请求,任意请求都将转入到SpringMVC进行处理
protected String[] getServletMappings() {return new String[]{"/"};}
三、入门案例工作流程
- 1.服务器启动,执行
ServletContainsInitConfig类,初始化web容器
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer
- 2.执行
createServletApplicationContext方法,创建了WebApplicationContext对象
protected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}
- 3.加载
SpringMvcConfig
@Configuration
@ComponentScan("com.practice.controller")
public class SpringMvcConfig {
}
- 4.执行
@ComponentScan加载对应的bean
@ComponentScan("com.practice.controller")
- 5.加载
UserController,每个@RequestMapping的名称对应一个具体的方法
@Controller
public class UserController {//2.1设置当前操作的访问路径@RequestMapping("/save")//2.2设置当前操作的返回值类型@ResponseBodypublic String save() {System.out.println("user save...");return "{'module':'springmvc'}";}
}
- 6.执行
getServletMappings方法,定义所有的请求都通过SpringMVC
@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
四、Controller加载控制
4.1Controller加载控制与业务bean加载控制
-
SpringMVC相关bean(表现层bean)
-
Spring控制的bean
-
- 业务bean(Service)
-
- 功能bea(DataSource等)
-
SpringMVC相关bean加载控制
-
- SpringMVC加载的bean对应的包均在
com.practice.controller包内
- SpringMVC加载的bean对应的包均在
-
Spring相关bean加载控制
-
- 方式一:Spring加载的bean设定扫描范围为
com.practice,排除controller包内的bean
- 方式一:Spring加载的bean设定扫描范围为
-
- 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
-
- 方式三:不区分Spring和SpringMVC环境,加载到同一环境中。
-
名称:
@ComponentScan -
类型:类注解
-
范例:
@ComponentScan(value = "com.practice",excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class
)
)
public class SpringConfig {
}
- 属性
-
excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
-
includeFilters:加载指定的bean,需要制定类别(type)与具体项(classes)
4.2bean的加载格式
package com.practice.config;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;/*** @Author YJ* @Date 2023/8/3 11:01* Description:定义一个Servlet容器启动的配置类,在里面加载spring配置*/
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer {/*** 加载springmvc容器配置** @return*/@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}/*** 设置哪些请求归属springMVC处理** @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** 加载spring容器配置** @return*/@Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringConfig.class);return ctx;}
}
- 简化开发:
public class ServletContainsInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
总结
本文介绍了SpringMVC的概念及如何创建SpringMVC的项目。 欢迎各位小伙伴点赞+关注!!!相关文章:
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Spring MVC入门 一、Spring MVC概述二、入门案例2.1导入Sp…...
一文说清楚支付架构
作者:陈斌 支付的技术架构是为了保障能够顺利处理支付请求而设计的结构体系。从系统的角度看,它包括了计算机系统的软件、硬件、网络和数据等。从参与的主体角度来看,它涉及交易的付款方、收款方、支付机构、银行、卡组织和金融监管机构等。要…...
【Golang 接口自动化00】为什么要用Golang做自动化?
目录 为什么使用Golang做自动化 最终想实现的效果 怎么做? 写在后面 资料获取方法 为什么使用Golang做自动化 顺应公司的趋势学习了Golang之后,因为没有太多时间和项目来实践,怕止步于此、步Java缺少练习遗忘殆尽的后尘,决定…...
Android 架构模式如何选择
作者:vivo 互联网客户端团队-Xu Jie Android架构模式飞速演进,目前已经有MVC、MVP、MVVM、MVI。到底哪一个才是自己业务场景最需要的,不深入理解的话是无法进行选择的。这篇文章就针对这些架构模式逐一解读。重点会介绍Compose为什么要结合MV…...
深入了解 LoRaWAN® B 类设备
介绍 在 LoRaWAN 网络中,终端设备以三种模式之一运行:LoRaWAN A 类、B 类和 C 类。网络只能将消息(下行链路)发送到终端设备在两个短接收窗口之一期间处于 A 类模式,该接收窗口在设备向网络发送消息(上行链路)后立即打开。然而,这些上行链路不是预先安排的,并且可以由…...
KK集团再闯港交所:引领潮流零售市场,2023年一季度业绩增势显著
撰稿|行星 来源|贝多财经 7月31日,KK Group Company Holdings Limited(下称“KK集团”)在港交所更新招股书,补充了截至2023年3月31日的财务数据等信息,继续推进上市事宜,摩根士丹利和瑞信为其联席保荐人。…...
Vue中的组件渲染
在Vue中,组件的被渲染意味着将组件的内容转换为真实的DOM元素并添加到页面上。当Vue应用启动时,根组件会被渲染,并递归地渲染其子组件。 当组件被渲染时,Vue会将组件的模板解析成虚拟DOM(Virtual DOM)的形…...
docker 保存和载入镜像
查看本机docker镜像 docker images保存镜像 docker save -o /home/space/work1/docker_qnx7.1.tar.gz a01ee6d74c36复制镜像到其他服务器 scp /home/space/work1/docker_qnx7.1.tar.gz XXXIP:/home/dell/work1/登录新 服务器操作 docker load -i docker_qnx7.1.tar.gz载入后…...
Java框架(九)--Spring Boot入门(1)
SpringBoot 2.x入门简介 学前基础 Maven Spring MVC理念 开发环境 Spring Boot官网版本介绍 https://spring.io/projects/spring-boot#learn 我们点击 Reference Doc. ,再点击Getting Started,就可以看到官网系统环境说明了 官网系统环境说明 Sp…...
2023年第四届“华数杯”数学建模思路 - 案例:随机森林
## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之…...
Redis中缓存穿透、击穿、雪崩以及解决方案
Redis中缓存穿透、击穿、雪崩以及解决方案 Redis作为一个高效的内存数据库,提供了缓存能力使得我们能够快速访问数据。然而,在使用Redis作为缓存时,我们可能会面临缓存穿透、缓存击穿和缓存雪崩的问题。接下来,我将详细解释这些现…...
系统架构设计师-软件架构设计(6)
目录 一、物联网分层架构 二、大数据分层架构 三、基于服务的架构(SOA) 1、SOA的特征 2、服务构件与传统构件的区别 四、Web Service(WEB服务) 1、Web Services 和 SOA的关系 五、REST(表述性状态转移) 六、ESB(…...
Knife4j系列--解决不显示文件上传的问题
原文网址:Knife4j系列--解决不显示文件上传的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍使用Knife4j时无法上传文件的问题。 问题复现 依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-…...
深入学习Mysql引擎InnoDB、MylSAM
目录 一、什么是MySQL 二、什么是InnoDB 三、什么是MyISAM 四、MySQL不同引擎有什么区别 一、什么是MySQL MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它是由瑞典MySQL AB公司开发并推广,后来被Sun Microsystems收…...
第七章:SpringMVC中
第七章:SpringMVC中 7.1:SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户SpringMVC视图的种类很多,默认有转发视图和重定向视图。 当工程引入jstl的依赖&…...
MySQL数据库——DQL操作——基本查询
文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改,而其中数据的查询是使用最多,也…...
Electron 开发,报handshake failed; returned -1, SSL error code 1,错误
代码说明 在preload.js代码中,暴露参数给渲染线程renderer.js访问, renderer.js 报:ERROR:ssl_client_socket_impl.cc(978)] failed; returned -1, SSL error code 1,错误 问题原因 如题所说,跨进程传递消息,这意味…...
知识区博主转型——兼做知识区和改造区博主!!!!!
想脱单的进来,一起交流如何能脱单!!! 为什么——我太羡慕有对象的人了哭死!!!!!! 你是不是很羡慕别人怎么都有女朋友 别人家的女朋友怎么都那么好ÿ…...
Resnet与Pytorch花图像分类
1、介绍 1.1数据集介绍 flower_data├── train│ └── 1-102(102个文件夹)│ └── XXX.jpg(每个文件夹含若干张图像)├── valid│ └── 1-102(102个文件夹)└── ─── └── XXX.jp…...
【NLP概念源和流】 03-基于计数的嵌入,GloVe(第 3/20 部分)
接续上文 【NLP概念源和流】 02-稠密文档表示(第 2/20 部分)...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
