当前位置: 首页 > news >正文

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的架构有什么优势?——控制器(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

AI和ChatGPT:人工智能的奇迹

AI和ChatGPT&#xff1a;人工智能的奇迹 引言什么是人工智能&#xff1f;ChatGPT&#xff1a;AI的语言之王ChatGPT的工作原理ChatGPT的优势和挑战AI和ChatGPT的未来展望结论 引言 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一项令人兴奋的…...

掌握 JVM 的参数及配置

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它负责执行Java程序&#xff0c;并提供一系列参数和配置选项&#xff0c;可以调整Java程…...

如何高性能、高效率地实现3D Web轻量化?

随着互联网和Web技术的发展&#xff0c;3D Web应用的需求越来越多。然而&#xff0c;复杂的3D模型在Web上展示和交互通常需要大量的带宽和计算资源。为了解决这一问题&#xff0c;HOOPS技术作为一套专业的3D图形技术开发工具包&#xff0c;发挥着关键作用。本文将探讨HOOPS技术…...

【Linux 网络】 传输层协议之TCP协议 TCP的三次握手和四次挥手

TCP协议 TCP协议段格式谈谈什么是 “可靠” 和 “不可靠”TCP协议段——序号与确认序号TCP协议段——窗口大小TCP协议段 —— 六个标志位确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制TCP 的三次握手四次挥手TCP三次握手四次挥手总结图 滑动窗口流量控制拥…...

git仓库与本地暂存区的同步问题

向下同步 对于远程仓库的项目&#xff0c;初始化一个配置文件&#xff0c;配置远程仓库及相关信息&#xff0c;赋值远程仓库的地址&#xff0c;使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题&#xf…...

MATLAB算法实战应用案例精讲-【图像处理】图像分类模型-LeNetAlexNetVGG

目录 LeNet 模型介绍 模型结构 模型实现 模型特点 模型指标 AlexNet...

ArcGIS API for JavaScript 4.x 教程(二)切换基础地图图层

了解如何更改地图中的基础地图图层。 基础地图图层&#xff1a; 基础地图层是用于访问和显示来自基础地图层服务的数据的层。它为地图或场景提供视觉和地理上下文&#xff0c;通常包含具有管理边界和地名的全局数据。 基本地图图层服务提供了许多基本地图图层样式&#xff0c;例…...

SpringBoot——如何读写使用JSON文件保存的数据

文章目录 1. 将数据写入JSON文件2. 从JSON文件读取数据2.1 读取单个对象2.2 读取对象列表 1. 将数据写入JSON文件 要将数据写入JSON文件&#xff0c;可以使用Spring Boot中提供的Jackson库。Jackson库是处理JSON的Java库&#xff0c;可以轻松地将对象转换为JSON字符串&#xff…...

SDU Crypto School - 计算不可区分性1

Encryption: Computational security 1-4 主讲人&#xff1a;李增鹏&#xff08;山东大学&#xff09; 参考教材&#xff1a;Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols. 什么是加密 首先&#xff0c;加密方案的目的在于…...

win11 vscode torch 编译遇错

1. 错误内容&#xff1a; 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.问题分析&#xff1a; pip出…...

Markdown系列之Flowchat流程图

一.欢迎来到我的酒馆 介绍Markdown的Flowchart流程图语法。 目录 一.欢迎来到我的酒馆二.什么是Flowchart三.更进一步 二.什么是Flowchart 2.1 Flowchart是一款基于javascript的工具&#xff0c;使用它可以用代码创建简单的流程图。具体信息可以查看flowchart官网&#xff1a;…...

小程序wx:else提示 Bad attr `wx

问题&#xff1a;以下wx:for里的wx:if &#xff0c; wx:else 会报这个错&#xff1a;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 图像由一个或者多个通道组成&#xff0c;是大小相同的矩阵&#xff0c;包含各种像素类型的灰度值 在图像显示界面&#xff0c;按ctrl健&#xff0c;可以查看当前的像素值 灰度图 一个通道像素点存放在一个矩…...

vscode 设置滑条颜色

1. 默认的滑条是灰黑色的&#xff0c;很难看的清 2. 左下角&#xff0c;打开VS Code 设置功能 3. 输入命令 workbench color&#xff0c;回车 4. 找到工作台&#xff1a;自定义颜色设置&#xff0c;打开设置文件 setting.json 5. 打开配置文件 6. 添加颜色配置 "workben…...

农业大数据可视化平台,让农业数据更直观展现!

农业大数据可视化平台是指利用大数据技术和可视化工具&#xff0c;对农业领域的数据进行收集、整理、分析和展示的平台。它可以帮助农业从业者更好地理解和利用农业数据&#xff0c;提高农业生产效率和决策水平。 农业大数据可视化平台通常具有以下特点和功能&#xff1a; 数据…...

【沁恒蓝牙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 语言中&#xff0c;type 关键字用于定义自定义数据类型&#xff08;类型别名、结构体、接口等&#xff09;&#xff0c;以及获取某个变量的类型信息。type 关键字有多种用法&#xff0c;下面将详细解释这些用法&#xff1a; 1. 自定义数据类型 使用 type 关键字可以定义…...

Linux 信号signal处理机制

Signal机制在Linux中是一个非常常用的进程间通信机制&#xff0c;很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断&#xff0c;因此&#xff0c;在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进程…...

SpringBoot3之Web编程

标签&#xff1a;Rest.拦截器.swagger.测试; 一、简介 基于web包的依赖&#xff0c;SpringBoot可以快速启动一个web容器&#xff0c;简化项目的开发&#xff1b; 在web开发中又涉及如下几个功能点&#xff1a; 拦截器&#xff1a;可以让接口被访问之前&#xff0c;将请求拦截…...

策略模式(C++)

定义 定义一系列算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可互相替换((变化)。该模式使得算法可独立手使用它的客户程序稳定)而变化(扩展&#xff0c;子类化)。 ——《设计模式》GoF 使用场景 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多…...

【每日一题Day290】LC1281整数的各位积和之差 | 模拟

整数的各位积和之差【LC1281】 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 思路&#xff1a;简单模拟 循环取余&#xff0c;计算「各位数字之积」与「各位数字之和」&#xff0c;最后求差返回 实现 class Solution {public…...

揭示CTGAN的潜力:利用生成AI进行合成数据

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 我们都知道&#xff0c;GAN在生成非结构化合成数据&#xff08;如图像和文本&#xff09;方面越来越受欢迎。然而&#xff0c;在使用GAN生成合成表格数据方面所做的工作很少。合成数据具有许多好处&#x…...

GitHub中readme.md文件的编辑和使用

GitHub中readme.md文件的编辑和使用 | YuuiChungs BlogGitHub - guodongxiaren/README: README文件语法解读&#xff0c;即Github Flavored Markdown语法介绍...

Python 四舍五入到最接近的十位

本篇文章将讨论使用 Python 的 ceil() 函数将数字四舍五入到最接近的十。 Python 整数到最接近的十 Python 具有三个内置函数 round()、floor() 和 ceil()&#xff0c;可用于对数字进行舍入。 ceil() 函数属于数学模块&#xff0c;用于将浮点数舍入为大于或等于给定数字的最接…...

Unity限制在一个范围内移动

Unity限制在一个范围内移动 这个例子中&#xff0c;我们学习Vector3.ClampMagnitude的用法&#xff0c;限制小球在范围内移动。 在地图上放了一个小球&#xff0c;让他移动&#xff0c;但是不想让他掉下去&#xff0c;限制在一个球星范围内&#xff0c;就好像绳子拴住了一样&…...

dji uav建图导航系列(一)建图

文章目录 1、uav + rplidir雷达1.2、思岚激光雷达1.3、dji uav的launch文件2、cartographer激光建图2.1、启动文件2.2、config修改2.3、建图过程3、融合odom+laser建图1、uav + rplidir雷达 思岚激光雷达frame为base_laser_link, 无人机frame为base_footprint。 文件uav_lid…...

AAAI论文阅读

文章目录 Open-Vocabulary Multi-Label Classifcation via Multi-Modal Knowledge Transfer——知识蒸馏的范畴Med-EASi: Finely Annotated Dataset and Models for Controllable Simplifcation of Medical Texts——医学领域数据集构建“Nothing Abnormal”: Disambiguating M…...

填补5G物联一张网,美格智能快速推进RedCap商用落地

自5G R17版本标准冻结以来&#xff0c;RedCap一直引人注目。2023年更是5G RedCap突破性发展的一年&#xff0c;从首款5G RedCap调制解调器及射频系统——骁龙X35发布&#xff0c;到国内四大运营商发布RedCap技术白皮书&#xff0c;芯片厂商、模组厂商、运营商及终端企业都在积极…...

服务器杂七杂八的知识/常识归纳(不断更新)

一.pID与端口号不一样吗? pID&#xff08;Process ID&#xff0c;进程标识符&#xff09;和端口号是不同的概念。 pID是操作系统中用来唯一标识一个正在运行的进程的数字。每个正在运行的进程都会被分配一个唯一的pID&#xff0c;它可以用来追踪和管理进程。 而端口号是在网…...

廊坊网络推广建站/google官方版下载

2019独角兽企业重金招聘Python工程师标准>>> 列表&#xff1a;非常的灵活&#xff0c;可以存储任意的数据类型&#xff0c;还支持append&#xff08;&#xff09;方法&#xff0c;问题是浪费大量的空间 数组&#xff1a; 假设你知道 array 中所有的数据类型都是一样…...

企业视频网站模板/电商运营培训大概多少学费

1.开野方式三条路的线权都是短手英雄&#xff0c;英雄强度决定兵线情况都是长手英雄&#xff0c;由于法师需要控蓝&#xff0c;AD强度更高卡莎和猫咪在前期的推线能力不强&#xff0c;对面派克前压&#xff0c;卡莎就A不了兵三条路的作战能力gank成功率刷野速度...

宝安网站设计制作/seo平台是什么

Java获取系统环境信息 使用System.getProperty()方法获取JVM信息 public class TestSystemGetProperty {public static void main(String[] args) {System.out.println("java版本号&#xff1a;" System.getProperty("java.version"));System.out.println…...

巴塘网站建设/电商网店

(a(b-1))/b 34 / 11 (34 % 11 ! 0 ? 1 : 0) CUDA计算中&#xff0c;可以采用这两种方式来表示向上取整。转载于:https://www.cnblogs.com/liangliangdetianxia/p/3985002.html...

网站开发公司名称/网站设计公司上海

DataTable排序,检索,合并 一、排序 1 获取DataTable的默认视图 2 对视图设置排序表达式 3 用排序后的视图导出的新DataTable替换就DataTable (Asc升序可省略&#xff0c;多列排序用"&#xff0c;"隔开) 一、重生法 dstaset.Tables.Add(dt) dataset.Tables(0).Default…...

天津网站建设维护/百度霸屏培训

typeof 可以判断简单数据类型&#xff0c; 数字返回number 字符串返回string undefined返回undefined null 返回object 布尔值返回Boolean&#xff0c; 函数返回function 数组和对象都会返回object&#xff0c; 因此typeof只可以作为区分简单数据类型的方法 2.instanceof 可以用…...