SpringMVC的架构有什么优势?——控制器(三)
前言

「作者主页」:雪碧有白泡泡
「个人网站」:雪碧的个人网站
「推荐专栏」:
★java一站式服务 ★
★ React从入门到精通★
★前端炫酷代码分享 ★
★ 从0到英雄,vue成神之路★
★ uniapp-从构建到提升★
★ 从0到英雄,vue成神之路★
★ 解决算法,一个专栏就够了★
★ 架构咱们从0说★
★ 数据流通的精妙之道★
★后端进阶之路★

文章目录
- 前言
- 标准控制器(Servlet)
- 1. 控制器(Controller):
- 2. DispatcherServlet:
- 3. HandlerMapping:
- 基于注解的控制器
- 1. 控制器(Controller):
- 2. 请求映射(Request Mapping):
- 3. 参数绑定(Request Parameter Binding):
标准控制器(Servlet)
Spring MVC使用标准Servlet API来处理请求和响应。这使得Spring MVC与其他框架和库能够无缝集成。
标准控制器(Servlet)是Spring MVC框架中的一个核心组件,它使用标准Servlet API来处理请求和响应。这种设计使得Spring MVC能够与其他Web框架和库进行无缝集成,并且具有非常高的灵活性。
下面我们将深入探讨Spring MVC标准控制器的核心概念和相应Java代码示例。
1. 控制器(Controller):
控制器用于处理HTTP请求并生成HTTP响应。在Spring MVC中,我们通常使用@Controller注解来定义一个控制器类。
@Controller
public class UserController {@Autowiredprivate UserService userService;@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)public ModelAndView getUser(@PathVariable("id") Long id) {User user = userService.getUserById(id);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("user", user);modelAndView.setViewName("user");return modelAndView;}
}
在上面的示例中,我们定义了一个UserController控制器类,并在getUser()方法中使用@RequestMapping注解来映射HTTP GET请求。该方法使用UserService对象来获取指定id的用户对象,并将其添加到ModelAndView对象中。最后,该方法返回一个封装了模型数据的ModelAndView对象,并指定视图名称为"user"。
2. DispatcherServlet:
DispatcherServlet是Spring MVC框架中的核心控制器,它使用标准Servlet API来处理HTTP请求和响应,并委托给适当的控制器来处理特定的请求。
<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/config/spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
在上面的示例中,我们定义了一个名为“dispatcherServlet”的Servlet,并将其映射到根路径。该Servlet使用 org.springframework.web.servlet.DispatcherServlet 类作为其实现类,Spring MVC框架将自动加载并初始化它。此外,我们还通过 init-param 元素指定了Spring配置文件的位置,这样就可以将配置文件中定义的控制器、视图解析器和其他相关组件加载到DispatcherServlet中进行管理。
3. HandlerMapping:
HandlerMapping是Spring MVC框架中的一个关键组件,负责将HTTP请求映射到适当的控制器并返回相应的响应。
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
在上面的示例中,我们使用BeanNameUrlHandlerMapping类作为默认的HandlerMapping组件。该组件将根据控制器类的名称和@RequestMapping注解中设置的URL路径来确定哪个控制器应该处理特定的HTTP请求。
通过以上的介绍,我们可以看出,标准控制器(Servlet)是Spring MVC框架中的一个非常重要的组件,它使用标准Servlet API来处理HTTP请求和响应,并委托给适当的控制器来处理特定的请求。只有深入理解标准控制器的概念,并熟练掌握相应的Java代码技巧,才能够在实际开发中灵活运用Spring MVC框架,构建高效、可靠、易于维护的Web应用程序。
基于注解的控制器
Spring MVC允许使用注解来定义控制器和处理方法,这使得代码更加简洁清晰。常用的注解包括@Controller、@RequestMapping等。
基于注解的控制器是Spring MVC框架中一种常用的开发方式,它允许使用注解来定义控制器和处理方法,从而使得代码更加简洁清晰。常用的注解包括@Controller、@RequestMapping等。
下面我们将深入探讨Spring MVC基于注解的控制器的核心概念和相应Java代码示例。
1. 控制器(Controller):
在基于注解的控制器中,我们通常使用@Controller注解来定义一个控制器类。
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ModelAndView getUser(@PathVariable("id") Long id) {User user = userService.getUserById(id);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("user", user);modelAndView.setViewName("user");return modelAndView;}
}
在上面的示例中,我们定义了一个UserController控制器类,并在类级别使用@RequestMapping注解来指定所有请求映射的父路径为"/user"。该类还使用@Autowired注解来自动注入UserService对象。此外,我们还使用@GetMapping注解来定义一个HTTP GET请求的处理方法,该方法获取指定id的用户对象,并将其添加到ModelAndView对象中,最后返回一个封装了模型数据的ModelAndView对象,并指定视图名称为"user"。
2. 请求映射(Request Mapping):
在基于注解的控制器中,我们使用@RequestMapping注解来对HTTP请求进行映射。
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ModelAndView getUser(@PathVariable("id") Long id) {User user = userService.getUserById(id);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("user", user);modelAndView.setViewName("user");return modelAndView;}@PostMapping("/")public String createUser(@ModelAttribute("user") User user) {userService.saveUser(user);return "redirect:/user";}
}
在上面的示例中,我们在类级别使用@RequestMapping注解来指定所有请求映射的父路径为"/user"。该类还定义了两个处理方法:getUser()方法和createUser()方法。其中,getUser()方法使用@GetMapping注解来对HTTP GET请求进行映射,createUser()方法使用@PostMapping注解来对HTTP POST请求进行映射。
3. 参数绑定(Request Parameter Binding):
在基于注解的控制器中,我们可以使用@RequestParam注解将HTTP请求参数自动绑定到方法参数中。
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/")public ModelAndView getUsers(@RequestParam(value = "page", defaultValue = "1") int page) {List<User> users = userService.getUsersByPage(page);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("users", users);modelAndView.setViewName("users");return modelAndView;}
}
在上面的示例中,我们定义了一个名为"getUsers"的处理方法,并使用@GetMapping注解将其映射到HTTP GET请求。该方法通过@RequestParam注解来自动绑定"page"参数,并指定了默认值为1。这样,在访问"/user/"路径时,Spring MVC框架将会自动将请求中的"page"参数绑定到page方法参数中。
通过以上的介绍,我们可以看出,基于注解的控制器是Spring MVC框架中非常常用的一种开发方式。它能够大大简化控制器和处理方法的定义,提高代码的可读性和可维护性。只有深入理解基于注解的控制器的概念,并熟练掌握相应的Java代码技巧,才能够在实际开发中灵活运用Spring MVC框架,构建高效、可靠、易于维护的Web应用程序。
相关文章:
SpringMVC的架构有什么优势?——控制器(三)
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄ÿ…...
AI和ChatGPT:人工智能的奇迹
AI和ChatGPT:人工智能的奇迹 引言什么是人工智能?ChatGPT:AI的语言之王ChatGPT的工作原理ChatGPT的优势和挑战AI和ChatGPT的未来展望结论 引言 人工智能(Artificial Intelligence,简称AI)是一项令人兴奋的…...
掌握 JVM 的参数及配置
点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ JVM(Java虚拟机)是Java编程语言的核心组件之一,它负责执行Java程序,并提供一系列参数和配置选项,可以调整Java程…...
如何高性能、高效率地实现3D Web轻量化?
随着互联网和Web技术的发展,3D Web应用的需求越来越多。然而,复杂的3D模型在Web上展示和交互通常需要大量的带宽和计算资源。为了解决这一问题,HOOPS技术作为一套专业的3D图形技术开发工具包,发挥着关键作用。本文将探讨HOOPS技术…...
【Linux 网络】 传输层协议之TCP协议 TCP的三次握手和四次挥手
TCP协议 TCP协议段格式谈谈什么是 “可靠” 和 “不可靠”TCP协议段——序号与确认序号TCP协议段——窗口大小TCP协议段 —— 六个标志位确认应答机制(ACK)超时重传机制连接管理机制TCP 的三次握手四次挥手TCP三次握手四次挥手总结图 滑动窗口流量控制拥…...
git仓库与本地暂存区的同步问题
向下同步 对于远程仓库的项目,初始化一个配置文件,配置远程仓库及相关信息,赋值远程仓库的地址,使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题…...
MATLAB算法实战应用案例精讲-【图像处理】图像分类模型-LeNetAlexNetVGG
目录 LeNet 模型介绍 模型结构 模型实现 模型特点 模型指标 AlexNet...
ArcGIS API for JavaScript 4.x 教程(二)切换基础地图图层
了解如何更改地图中的基础地图图层。 基础地图图层: 基础地图层是用于访问和显示来自基础地图层服务的数据的层。它为地图或场景提供视觉和地理上下文,通常包含具有管理边界和地名的全局数据。 基本地图图层服务提供了许多基本地图图层样式,例…...
SpringBoot——如何读写使用JSON文件保存的数据
文章目录 1. 将数据写入JSON文件2. 从JSON文件读取数据2.1 读取单个对象2.2 读取对象列表 1. 将数据写入JSON文件 要将数据写入JSON文件,可以使用Spring Boot中提供的Jackson库。Jackson库是处理JSON的Java库,可以轻松地将对象转换为JSON字符串ÿ…...
SDU Crypto School - 计算不可区分性1
Encryption: Computational security 1-4 主讲人:李增鹏(山东大学) 参考教材:Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols. 什么是加密 首先,加密方案的目的在于…...
win11 vscode torch 编译遇错
1. 错误内容: Failed to build pc-util ERROR: Could not build wheels for pc-util, which is required to install pyproject.toml-based projects NativeCommandExitException: Program “pip.exe” ended with non-zero exit code: 2.问题分析: pip出…...
Markdown系列之Flowchat流程图
一.欢迎来到我的酒馆 介绍Markdown的Flowchart流程图语法。 目录 一.欢迎来到我的酒馆二.什么是Flowchart三.更进一步 二.什么是Flowchart 2.1 Flowchart是一款基于javascript的工具,使用它可以用代码创建简单的流程图。具体信息可以查看flowchart官网:…...
小程序wx:else提示 Bad attr `wx
问题:以下wx:for里的wx:if , wx:else 会报这个错:Bad attr wx <scroll-view class"scroll1" scroll-x enable-flex"true"><view wx:if"{{playlist.length>0}}" class"item" wx:for"…...
halcon 学习笔记
图像的参数 图形参数 Iconic, 包括 image, region, XLD 1.1 image 图像由一个或者多个通道组成,是大小相同的矩阵,包含各种像素类型的灰度值 在图像显示界面,按ctrl健,可以查看当前的像素值 灰度图 一个通道像素点存放在一个矩…...
vscode 设置滑条颜色
1. 默认的滑条是灰黑色的,很难看的清 2. 左下角,打开VS Code 设置功能 3. 输入命令 workbench color,回车 4. 找到工作台:自定义颜色设置,打开设置文件 setting.json 5. 打开配置文件 6. 添加颜色配置 "workben…...
农业大数据可视化平台,让农业数据更直观展现!
农业大数据可视化平台是指利用大数据技术和可视化工具,对农业领域的数据进行收集、整理、分析和展示的平台。它可以帮助农业从业者更好地理解和利用农业数据,提高农业生产效率和决策水平。 农业大数据可视化平台通常具有以下特点和功能: 数据…...
【沁恒蓝牙mesh】CH58x USB功能开发记录(二)
本文主要介绍基于【沁恒蓝牙mesh】CH58x USB功能, BLE_USB 工程 解析与修改,主要实现 手机app与节点的数据双向通讯 【沁恒蓝牙mesh】CH58x USB功能开发记录(二) 1. BLE_USB 工程1.1 数据转发接口1.2 PC端测试1.3 手机APP端测试1.4 工程修改实现双向通讯1.4.1 【测试原理图…...
go的type关键字
在 Go 语言中,type 关键字用于定义自定义数据类型(类型别名、结构体、接口等),以及获取某个变量的类型信息。type 关键字有多种用法,下面将详细解释这些用法: 1. 自定义数据类型 使用 type 关键字可以定义…...
Linux 信号signal处理机制
Signal机制在Linux中是一个非常常用的进程间通信机制,很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断,因此,在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进程…...
SpringBoot3之Web编程
标签:Rest.拦截器.swagger.测试; 一、简介 基于web包的依赖,SpringBoot可以快速启动一个web容器,简化项目的开发; 在web开发中又涉及如下几个功能点: 拦截器:可以让接口被访问之前,将请求拦截…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
