Spring MVC系统学习(二)——Spring MVC的核心类和注解
Spring MVC(Model-View-Controller)是Spring框架的一个模块,用于构建基于Web的应用程序。它使用模型、视图和控制器分离的设计模式,使得Web开发更加模块化和灵活。在学习Spring MVC时,有几个核心类和注解是非常关键的,尤其是DispatcherServlet
、@Controller
、@RequestMapping
等。这些知识点是构建Spring MVC应用的基础。接下来我将逐步讲解这些概念,确保详细且易于理解。
1. 核心类 - DispatcherServlet
DispatcherServlet
是Spring MVC的核心类,负责将请求转发到适当的处理器(Controller)。它的职责是拦截所有传入的HTTP请求并分发到相应的控制器类进行处理。DispatcherServlet
是一个前端控制器(Front Controller),负责协调整个请求的处理过程。其作用主要包括:
- 接收并拦截用户请求。
- 解析请求的URL,找到相应的处理器(Controller)。
- 调用处理器进行业务逻辑处理。
- 根据处理结果决定跳转到哪个视图(View)。
- 将处理结果和视图返回给用户。
配置DispatcherServlet
在Spring Boot项目中,DispatcherServlet
自动由Spring Boot配置,无需手动配置。在非Spring Boot项目中,需要在web.xml
中手动配置:
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
DispatcherServlet
的配置会拦截所有以/
开头的URL请求,并将它们转发到相关控制器处理。
2. 注解 - @Controller
@Controller
是Spring MVC的一个关键注解,用于标记控制器类。控制器类负责处理HTTP请求,执行业务逻辑,并返回相应的视图(或响应数据)。
示例:
@Controller
public class HomeController {@RequestMapping("/home")public String home() {return "home"; // 返回视图名称 "home"}
}
在这个示例中,HomeController
被@Controller
注解标记为一个控制器类,并且处理来自/home
路径的请求。方法home()
返回一个字符串"home"
,表示要显示的视图名。
3. 注解 - @RequestMapping
@RequestMapping
注解用于定义HTTP请求与处理方法之间的映射关系。可以将其用在类或方法上,来定义路径、HTTP请求方法、请求参数等的映射。
3.1 @RequestMapping
的使用
@RequestMapping
注解可以应用在控制器的类级别和方法级别:
- 类级别:用于为整个控制器类定义基础路径。
- 方法级别:用于定义处理某个特定URL的请求。
示例:
@Controller
@RequestMapping("/api")
public class ApiController {@RequestMapping("/users")public String getUsers() {return "users"; // 处理 /api/users 请求}
}
在这个例子中,类级别的@RequestMapping("/api")
表示该控制器处理所有以/api
开头的请求。getUsers()
方法处理的是/api/users
请求。
3.2 @RequestMapping
的属性
@RequestMapping
注解有多个属性,可以更精确地控制请求映射:
value
:定义URL路径,可以是单个路径或者路径数组。value
属性是默认属性,可以省略名称。method
:指定HTTP请求方法(如GET
、POST
、PUT
、DELETE
等)。params
:限制请求必须包含的参数,或者参数的特定值。headers
:限定请求头信息。consumes
:指定能够处理的请求的Content-Type
。produces
:指定方法返回的响应内容类型。
示例:
@Controller
@RequestMapping("/products")
public class ProductController {// 处理 GET 请求@RequestMapping(value = "/list", method = RequestMethod.GET)public String listProducts() {return "productList"; // 返回视图名}// 处理 POST 请求@RequestMapping(value = "/add", method = RequestMethod.POST)public String addProduct() {return "addProduct"; // 返回视图名}// 处理包含特定参数的请求@RequestMapping(value = "/filter", params = "category")public String filterProducts() {return "filteredProducts";}
}
4. 请求映射方式
Spring MVC提供了多种请求映射的方式,使开发者能够灵活定义请求和控制器方法之间的映射关系。常见的映射方式包括:
- 精确匹配URL:直接指定路径,如
@RequestMapping("/home")
。 - 路径参数:通过路径中的占位符接收参数,如
@RequestMapping("/user/{id}")
。 - 查询参数:通过
params
属性限制某个请求参数的存在,如@RequestMapping(params = "type=special")
。 - 请求方法:限制某个特定HTTP方法(如
GET
、POST
)的请求。
示例 - 路径参数:
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/{id}")public String getUserById(@PathVariable("id") int userId, Model model) {model.addAttribute("userId", userId);return "userDetail"; // 显示用户详情}
}
在这个例子中,@RequestMapping("/{id}")
定义了一个占位符{id}
,它会将路径中的id
参数映射到方法的参数userId
上。
5. 小结
Spring MVC提供了灵活的Web开发功能,核心类DispatcherServlet
负责将请求路由到控制器,而控制器通过@Controller
、@RequestMapping
等注解与前端请求建立映射。通过这些注解,我们可以定义路径、请求方式、请求参数等,灵活地处理不同的请求场景。
@Controller
标记类为控制器,处理前端请求。@RequestMapping
定义URL与控制器方法的映射关系,可以限制HTTP方法、请求参数等。DispatcherServlet
是整个Spring MVC的核心,用来将请求分发到对应的控制器。
相关文章:
Spring MVC系统学习(二)——Spring MVC的核心类和注解
Spring MVC(Model-View-Controller)是Spring框架的一个模块,用于构建基于Web的应用程序。它使用模型、视图和控制器分离的设计模式,使得Web开发更加模块化和灵活。在学习Spring MVC时,有几个核心类和注解是非常关键的&…...
conda虚拟环境安装包、依赖同一管理
在 Python 的虚拟环境中,每个环境都是独立的,这意味着即使两个环境需要相同的库,它们也会分别安装各自的副本。这样做是为了避免不同项目之间相互影响,确保每个项目都有一个干净且隔离的环境。 方法一:使用 Conda 的共…...
Unity网络开发记录(四):在unity中进一步封装客户端类
在上一篇文章中,简单的封装了一下服务端中相关的socket对象,为了可以更方便的使用。所以在本篇中,进一步封装一下在unity中的相关客户端类 封装客户端类,首先采用单例模式,然后采用两个队列来存储我们相关的收发信息 p…...
Linux内核中的UART驱动-详解Linux内核UART驱动:结构与功能分析
一、UART概述 UART(Universal Asynchronous Receiver/Transmitter),即通用异步收发器,是一种串行通信接口,用于在计算机和外部设备之间传输数据。它特别适用于短距离、低速、串行和全双工的数据传输。在Linux内核中&a…...
威胁检测与防范:如何及时、准确对抗安全风险
随着技术的飞速发展,网络空间中的威胁日益多样化、隐蔽化,给个人、企业乃至国家的信息安全带来诸多挑战。面对严峻的网络威胁,传统的防火墙、入侵检测系统(IDS)等防御手段虽能在一定程度上抵御外部攻击,但依…...

数据结构串的kmp相关(求next和nextval)
傻瓜版,用来演示手算过程,个人理解用的,仅供参考。...

创建游戏暂停菜单
创建用户控件 设置样式 , 加一层 背景模糊 提升UI菜单界面质感 , 按钮用 灰色调 编写菜单逻辑 转到第三人称蓝图 推荐用 Set Input Mode Game And UI , 只用仅UI的话 增强输入响应不了 让游戏暂停的话也可以用 Set Game Paused , 打勾就是暂停 , 不打勾就是继续游戏 , 然后…...

seata服务端部署
1.下载seata 官网下载地址:http://seata.io/zh-cn/blog/download.html 或者下载 作者已经下载的压缩包1.4.0 注意!!! 要参考对应的版本,否则可能出现无法正常启动的情况。 参考文档 下载完毕后解压压缩文件 2.修改配…...

理解Python闭包概念
闭包并不只是一个python中的概念,在函数式编程语言中应用较为广泛。理解python中的闭包一方面是能够正确的使用闭包,另一方面可以好好体会和思考闭包的设计思想。 1.概念介绍 首先看一下维基上对闭包的解释: 在计算机科学中,闭包…...

51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】
1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块DS1302时钟模块光照传感器红外传感器温度传感器LED等模块构成。适用于教室灯光全自动控制、教室节能灯控制、教室智能照明等相似项目。 可实现功能: 1、LCD1602实时显示时间、温度、光照强度等信息 2、光照强度传…...
一款资产进行快速存活验证工具
01工具介绍 (下载地址见最后) 在日常工作的渗透测试过程中,经常会碰到渗透测试项目,而Web渗透测试通常是渗透项目的重点或者切入口。通常拿到正规项目授权后,会给你一个IP资产列表和对应的Web资产地址,这时…...

I/O中断处理过程
中断优先级包括响应优先级和处理优先级,响应优先级由硬件线路或查询程序的查询顺序决定,不可动态改变。处理优先级可利用中断屏蔽技术动态调整,以实现多重中断。下面来看他们如何运用在中断处理过程中: 中断控制器位于CPU和外设之…...
关于PHP 匿名函数在处理数据结构中的应用
PHP 的匿名函数(也称为闭包)在处理数据结构时非常有用。它们可以在需要一次性函数的情况下使用,例如数组函数的回调、事件处理或作为其他函数的参数。以下是一些常见的应用场景: 数组操作: 使用 array_map、array_fil…...

安卓13默认使用大鼠标 与配置分析 andriod13默认使用大鼠标 与配置分析
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 android13里面的鼠标貌似比以前版本的鼠标小了,有些客户想要把这个鼠标改大。这个功能,android有现成的,就在这里,设置 =》无障碍 =》色彩和动画 =》 大号鼠标指针。 我们通过…...
AI学习指南深度学习篇-批标准化在深度学习中的应用
AI学习指南深度学习篇-批标准化在深度学习中的应用 引言 批标准化(Batch Normalization, BN)是一种在深度学习中常用的技术,旨在加速训练过程并提高模型的稳定性。它通过标准化每一个小批量的激活值,减小内部协变量偏移…...

了解网络的相关信息
文章目录 前言了解网络的相关信息1. ip是什么?1.1. 公网IP:1.2. 私有IP:1.2.1. 示例 2. 子网掩码3. 子网掩码的划分网段是什么4. 特殊的回路IP网段(127.0.0.1)5. 端口 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊&#x…...

Java | Leetcode Java题解之第447题回旋镖的数量
题目: 题解: class Solution {public int numberOfBoomerangs(int[][] points) {int ans 0;for (int[] p : points) {Map<Integer, Integer> cnt new HashMap<Integer, Integer>();for (int[] q : points) {int dis (p[0] - q[0]) * (p[…...
Docker实践与应用举例
引言 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。本文将详细介绍 Dock…...

828华为云征文 | 智能监控新篇章,Prometheus如何在华为云Flexusx容器环境中大展身手
前言 在数字化转型的浪潮中,智能监控成为企业IT战略的关键环节。部署在华为云Flexus X实例上的Prometheus监控系统,凭借其卓越的性能与灵活性,正开启智能监控的新篇章。Flexus X实例以其强大的计算能力和灵活的资源管理,为Prometh…...

基于单片机的可调式中文电子日历系统
** 文章目录 前言概要功能设计软件设计效果图 程序文章目录 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...

npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...

Web APIS Day01
1.声明变量const优先 那为什么一开始前面就不能用const呢,接下来看几个例子: 下面这张为什么可以用const呢?因为复杂数据的引用地址没变,数组还是数组,只是添加了个元素,本质没变,所以可以用con…...

【靶场】XXE-Lab xxe漏洞
前言 学习xxe漏洞,搭了个XXE-Lab的靶场 一、搭建靶场 现在需要登录,不知道用户名密码,先随便试试抓包 二、判断是否存在xxe漏洞 1.首先登录抓包 看到xml数据解析,由此判断和xxe漏洞有关,但还不确定xxe漏洞是否存在。 2.尝试xxe 漏洞 判断是否存在xxe漏洞 A.send to …...
【仿生机器人】刀剑神域——爱丽丝苏醒计划,需求文档
仿生机器人"爱丽丝"系统架构设计需求文档 一、硬件基础 已完成头部和颈部硬件搭建 25个舵机驱动表情系统 颈部旋转功能 眼部摄像头(视觉输入) 麦克风阵列(听觉输入) 颈部发声装置(语音输出)…...