spring:详解spring MVC
spring MVC
SpringMVC是一种基于Java的MVC(Model-View-Controller)Web开发框架,通过将业务逻辑、数据和界面分离,使得开发人员能够更高效地管理和维护代码,提高应用的可扩展性和可维护性。
SpringMVC核心概念
- Controller:Controller是SpringMVC的核心,负责接收和处理用户请求。Controller通过解析请求并将处理结果传递给相应的View来响应用户操作。
- Model:Model代表应用程序的数据和业务逻辑,是应用程序的核心。在SpringMVC中,Model通常由JavaBean或POJO(Plain Old Java Object)实现。
- View:View负责呈现用户界面,通常是HTML页面。在SpringMVC中,View可以通过JSP(Java Server Pages)、Thymeleaf等模板引擎来实现。
spring MVC常用注解
以下是一些常用的Spring MVC注解:
- @Controller:用于标记一个类作为Spring MVC控制器。该类负责处理用户请求并返回视图。
- @RequestMapping:用于映射Web请求到特定的控制器方法。它可以用于类级别和方法级别。
- @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:这些注解用于映射HTTP请求方法到特定的控制器方法。它们是@RequestMapping的快捷方式。
- @PathVariable:用于绑定URL路径变量到控制器方法的参数。
- @RequestParam:用于绑定请求参数(query parameters或form data)到控制器方法的参数。
- @RequestBody:用于绑定请求体(POST或PUT请求的数据)到控制器方法的参数。
- @ResponseBody:用于指示控制器方法返回的数据应直接写入HTTP响应体中,而不是通过视图进行渲染。
- @ModelAttribute:用于将表单提交的数据绑定到Java对象,或者将额外的数据添加到模型中。
- @SessionAttributes:用于将模型数据存储到HTTP会话中,以便在不同的请求之间保持状态。
- @RequestHeader:用于绑定HTTP请求头到控制器方法的参数。
- @CookieValue:用于绑定Cookie到控制器方法的参数。
- @InitBinder:用于自定义数据绑定的方法,例如自定义日期格式化。
- @ExceptionHandler:用于处理控制器方法抛出的异常,并返回相应的视图或响应。
- @Autowired、@Resource、@Qualifier:这些注解用于在控制器中注入依赖项,例如数据访问对象(DAO)或其他服务类。
这些是常用的Spring MVC注解,但还有其他注解可用于处理更高级的功能,如拦截器、参数校验、文件上传等。
注解举例
@Controller
public class UserController { // controller methods and logic here
}
@Controller
@RequestMapping("/users")
public class UserController { @RequestMapping("/list") public String listUsers(Model model) { // handle logic for user list return "users/list"; }
}
@Controller
public class UserController { @GetMapping("/users") public String listUsers(Model model) { // handle logic for GET request return "users/list"; }
}
@Controller
@RequestMapping("/users/{userId}")
public class UserController { @GetMapping public String getUser(@PathVariable("userId") Long userId, Model model) { // handle logic for specific user return "users/detail"; }
}
@Controller
@RequestMapping("/users")
public class UserController { @PostMapping("/update") public String updateUser(@RequestParam("name") String name, @RequestParam("email") String email, Model model) { // handle logic for updating user information return "users/update"; }
}
@Controller
@RequestMapping("/users")
public class UserController { @PostMapping("/create") public String createUser(@RequestBody User user, Model model) { // handle logic for creating a new user return "users/create"; }
}
@Controller
public class UserController { @GetMapping("/users/{userId}") @ResponseBody public User getUser(@PathVariable("userId") Long userId) { // handle logic for specific user return user; }
}
@Controller
public class UserController { @ModelAttribute("user") public User createUser(@RequestParam String name, @RequestParam String email) { // create user object and set properties User user = new User(); user.setName(name); user.setEmail(email); return user; }
}
@Controller
public class UserController { @GetMapping("/login") public String login(Model model) { // handle login logic and set user data in session HttpSession session = request.getSession(); session.setAttribute("user", userData); return "login"; }
}
@Controller
public class UserController { @GetMapping("/users") public String getUsers(@RequestHeader("Authorization") String authorizationHeader, Model model) { // handle logic for getting users based on authorization header return "users/list"; }
}
@Controller
public class UserController { @GetMapping("/logout") public String logout(@CookieValue("USER_TOKEN") String token) { // handle logic for logout based on user token cookie return "logout"; }
}
@Controller
public class UserController { @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); }
}
@Controller
public class UserController { @ExceptionHandler(UserNotFoundException.class) public String handleUserNotFoundException(UserNotFoundException e, Model model) { // handle logic for handling user not found exception and set error message in model model.addAttribute("errorMessage", "User not found."); return "error"; }
}
@Controller
public class UserController { @Autowired private UserDao userDao; // or @Resource(name = "userDao") private UserDao userDao; // or @Qualifier("userDao") private UserDao userDao;
}
相关文章:
spring:详解spring MVC
spring MVC SpringMVC是一种基于Java的MVC(Model-View-Controller)Web开发框架,通过将业务逻辑、数据和界面分离,使得开发人员能够更高效地管理和维护代码,提高应用的可扩展性和可维护性。 SpringMVC核心概念 Contr…...
【Leetcode】207.课程表
一、题目 1、题目描述 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 p r e r e q u i s i t e s [ i ] = [ a i , b...
Ubuntu18.04中QT安装下载安装pcl和vtk以及使用过程中踩过的坑
一、先记录一下下载过程中踩过的坑 问题1:QVTKOpenGLNativeWidget和QVTKWidget 之前从来没有接触过QT中显示3D点云方面的知识,了解到可以用pcl,然后在网上各种找pcl下载的相关内容,想要在QT中显示出来,需要用到VTK&a…...
C++学习——对象数组、成员对象与封闭类
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、对象数组 对象数组,即数组的每个元素都是某个类的对象。 1、对象数组中的每个元素都需要用构造函数初始化,具体哪些元素用哪些构造函数初始化,…...
解锁机器学习-梯度下降:从技术到实战的全面指南
目录 一、简介什么是梯度下降?为什么梯度下降重要? 二、梯度下降的数学原理代价函数(Cost Function)梯度(Gradient)更新规则代码示例:基础的梯度下降更新规则 三、批量梯度下降(Batc…...
day62:ARMday9,I2c总线通信
作业:按键中断实现LED1、蜂鸣器、风扇 key_in.c: #include "key_in.h"void gpio_init() {//RCC使能//GPIOERCC->MP_AHB4ENSETR | (0x1<<4);//GPIOBRCC->MP_AHB4ENSETR | (0x1<<1);//PE10、PB6、PE9输出模式GPIOE->MODER & ~(0…...
【Python学习笔记】类型/运算/变量/注释
前言 人生苦短,追求生产力,做一只时代风口的猪,应该学python Python语言中,所有的数据都被称之为对象。 1. 对象类型 Python语言中,常用的数据类型有: 整数, 比如 3 小数(也叫浮…...
国内常用源开发环境换源(flutter换源,python换源,Linux换源,npm换源)
flutter换源 使用环境变量:PUB_HOSTED_URL FLUTTER_STORAGE_BASE_URL, upgrade出问题时可能会提示设置FLUTTER_GIT_URL变量。 flutter中国 PUB_HOSTED_URLhttps://pub.flutter-io.cn FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn FLUTTER_GIT_URLhtt…...
关于一篇什么是JWT的原理与实际应用
目录 一.介绍 1.1.什么是JWT 二.结构 三.Jwt的工具类的使用 3.1. 依赖 3.2.工具类 3.3.过滤器 3.4.控制器 3.5.配置 3.6. 测试类 用于生成JWT 解析Jwt 复制jwt,并延时30分钟 测试JWT的有效时间 测试过期JWT的解析 四.应用 今天就到这了,希…...
【Method】把 arXiv论文 转换为 HTML5 网页
文章目录 MethodReference https://ar5iv.labs.arxiv.org/ Articles from arXiv.org as responsive HTML5 web pages. 可以将来自 arXiv 的 PDF 论文渲染成 HTML5 网页版本。 Method View any arXiv article URL by changing the X to a 5. 将 arXiv 网址中的 x 换成 5 再回…...
每日一题AC
4.小花和小草正在沙滩上玩挖沙洞的游戏。他们划了一条长度为n米的线作为挖沙洞的参考线路,小花和小草分别从两头开始沿着划好的线开始挖洞,小花每隔a米挖一个洞,小草每隔b米挖一个洞,碰到已经挖过洞的就不需要再挖了。那么&#x…...
后端:推荐 2 个 .NET 操作的 Redis 客户端类库
目录 Redis特点 Redis场景 1. StackExchange.Redis 2. FreeRedis 🚀 快速入门 🎣 Master-Slave (读写分离) 💻 Pipeline (管道)示例 🌌 Redis Cluster (集群) Redis ,是一个高性能(NOSQL)的key-value数据库,Re…...
华泰证券:京东营收增长或短期承压
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,华泰证券近期发布研报称京东营收增长或短期承压。华泰证券主要观点如下:营收增长或短期承压,聚焦长期内生能力建设 考虑到消费情绪的恢复仍需一定时间,我们预计…...
Java从resources文件下载文档,文档没有后缀名
业务场景:因为公司会对excel文档加密,通过svn或者git上传代码也会对文档进行加密,所以这里将文档后缀去了,这样避免文档加密。 实现思路:将文档去掉后缀,放入resources下,获取输入流࿰…...
【动手学深度学习-Pytorch版】BERT预测系列——BERTModel
本小节主要实现了以下几部分内容: 从一个句子中提取BERT输入序列以及相对的segments段落索引(因为BERT支持输入两个句子)BERT使用的是Transformer的Encoder部分,所以需要需要使用Encoder进行前向传播:输出的特征等于词…...
Python之元组、字典和集合练习
1、餐厅下午茶 (列表与元组 crr66) 某餐厅推出了优惠下午茶套餐活动。顾客可以以优惠的价格从给定的糕点和给定的饮 料中各选一款组成套餐。已知,指定的糕点包括松饼(Muffins)、提拉米苏(Tiramisu)、芝士蛋 糕(Cheese Cake)和三明治(Sandwic…...
【数据结构】归并排序和计数排序(排序的总结)
目录 一,归并排序的递归 二,归并排序的非递归 三,计数排序 四,排序算法的综合分析 一,归并排序的递归 基本思想: 归并采用的是分治思想,是分治法的一个经典的运用。该算法先将原数据进行拆…...
某医疗机构:建立S-SDLC安全开发流程,保障医疗前沿科技应用高质量发展
某医疗机构是头部资本集团旗下专注大健康领域战略性投资与运营的实业公司,市场规模超300亿。该医疗机构已完成数字赋能,形成了标准化、专业化、数字化的疾病和健康管理体系,将进一步规划战略方向,为人工智能纳米技术、高温超导、生…...
验证二叉搜索树的后序遍历序列
LCR 152. 验证二叉搜索树的后序遍历序列 class VerifyTreeOrder:"""LCR 152. 验证二叉搜索树的后序遍历序列https://leetcode.cn/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/description/"""def solution(self, postorder: Lis…...
第三章 内存管理 一、内存的基础知识
目录 一、什么是内存 二、有何作用 三、常用数量单位 四、指令的工作原理 五、装入方式 1、绝对装入 2、可重定位装入(静态重定位) 3、动态运行时装入(动态重定位) 六、从写程序到程序运行 七、链接的三种方式 1、静态…...
Ardupilot无人船新手必看:从遥控器开关到地面站,3档模式设置保姆级教程
Ardupilot无人船控制模式全解析:从基础配置到高阶应用实战 第一次接触Ardupilot无人船时,最让人困惑的莫过于各种控制模式的区别与适用场景。作为开源自动驾驶系统的标杆,Ardupilot为无人船提供了多达14种控制模式,每种模式都有其…...
27考研er必备的那些学习工具!
对2027考研人来说,备考不是简单地“埋头刷题”,而是一场关于信息筛选、资源整合、时间管理和学习效率的长期战役。面对公共课、专业课、院校信息、经验帖、课程资源等海量内容,选对工具往往能让复习少走弯路。 以下这些平台和网站,…...
从信息网络到能源网络:聊聊2012年那篇关于‘能源路由器’的论文,它今天还有哪些启发?
能源路由器的十年回望:从TCP/IP隐喻到虚拟电厂的现实启示 十二年前那篇将能源网络类比TCP/IP协议的论文,在今天看来更像是一封来自过去的预言书。当我们在2023年讨论虚拟电厂和分布式能源交易时,会发现那些曾被视作天马行空的构想——能源操作…...
如何轻松备份微信聊天记录:WeChatMsg完全免费的数据守护方案
如何轻松备份微信聊天记录:WeChatMsg完全免费的数据守护方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...
3步高效下载抖音无水印视频:douyin_downloader专业解决方案完整指南
3步高效下载抖音无水印视频:douyin_downloader专业解决方案完整指南 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader …...
创业团队如何借助Taotoken的多模型与透明计费快速验证AI产品原型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业团队如何借助Taotoken的多模型与透明计费快速验证AI产品原型 对于资源有限的创业团队而言,在产品开发初期快速验证…...
华为擎云L420变身MCU开发主力机:VSCode + Cortex-Debug + 自编译工具链玩转雅特力AT32
华为擎云L420打造高效MCU开发环境:VSCodeCortex-Debug全流程实战 在嵌入式开发领域,效率工具的选择往往能决定项目的成败。当国产化浪潮席卷技术圈,越来越多的开发者开始尝试在纯国产硬件上构建完整的工作流。华为擎云L420作为一款基于ARM架构…...
3分钟解决Windows热键冲突:Hotkey Detective完全使用指南
3分钟解决Windows热键冲突:Hotkey Detective完全使用指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否…...
Legacy iOS Kit:让旧款iOS设备重获新生的终极免费工具
Legacy iOS Kit:让旧款iOS设备重获新生的终极免费工具 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...
AI Agent Harness恶意指令识别拦截
AI Agent Harness恶意指令识别拦截:构建新一代智能应用安全屏障摘要/引言 开门见山(Hook) 想象一下这个场景:你花了3个月精心搭建了一个**“全栈AI编程助手Agent集群”**——主Agent负责理解需求并拆解任务,代码生成Ag…...
