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

spring:详解spring MVC

spring MVC

SpringMVC是一种基于Java的MVC(Model-View-Controller)Web开发框架,通过将业务逻辑、数据和界面分离,使得开发人员能够更高效地管理和维护代码,提高应用的可扩展性和可维护性。

SpringMVC核心概念

  1. Controller:Controller是SpringMVC的核心,负责接收和处理用户请求。Controller通过解析请求并将处理结果传递给相应的View来响应用户操作。
  2. Model:Model代表应用程序的数据和业务逻辑,是应用程序的核心。在SpringMVC中,Model通常由JavaBean或POJO(Plain Old Java Object)实现。
  3. View:View负责呈现用户界面,通常是HTML页面。在SpringMVC中,View可以通过JSP(Java Server Pages)、Thymeleaf等模板引擎来实现。

spring MVC常用注解

以下是一些常用的Spring MVC注解:

  1. @Controller:用于标记一个类作为Spring MVC控制器。该类负责处理用户请求并返回视图。
  2. @RequestMapping:用于映射Web请求到特定的控制器方法。它可以用于类级别和方法级别。
  3. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:这些注解用于映射HTTP请求方法到特定的控制器方法。它们是@RequestMapping的快捷方式。
  4. @PathVariable:用于绑定URL路径变量到控制器方法的参数。
  5. @RequestParam:用于绑定请求参数(query parameters或form data)到控制器方法的参数。
  6. @RequestBody:用于绑定请求体(POST或PUT请求的数据)到控制器方法的参数。
  7. @ResponseBody:用于指示控制器方法返回的数据应直接写入HTTP响应体中,而不是通过视图进行渲染。
  8. @ModelAttribute:用于将表单提交的数据绑定到Java对象,或者将额外的数据添加到模型中。
  9. @SessionAttributes:用于将模型数据存储到HTTP会话中,以便在不同的请求之间保持状态。
  10. @RequestHeader:用于绑定HTTP请求头到控制器方法的参数。
  11. @CookieValue:用于绑定Cookie到控制器方法的参数。
  12. @InitBinder:用于自定义数据绑定的方法,例如自定义日期格式化。
  13. @ExceptionHandler:用于处理控制器方法抛出的异常,并返回相应的视图或响应。
  14. @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、对象数组中的每个元素都需要用构造函数初始化,具体哪些元素用哪些构造函数初始化&#xff0c…...

解锁机器学习-梯度下降:从技术到实战的全面指南

目录 一、简介什么是梯度下降?为什么梯度下降重要? 二、梯度下降的数学原理代价函数(Cost Function)梯度(Gradient)更新规则代码示例:基础的梯度下降更新规则 三、批量梯度下降(Batc…...

day62:ARMday9,I2c总线通信

作业&#xff1a;按键中断实现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学习笔记】类型/运算/变量/注释

前言 人生苦短&#xff0c;追求生产力&#xff0c;做一只时代风口的猪&#xff0c;应该学python Python语言中&#xff0c;所有的数据都被称之为对象。 1. 对象类型 Python语言中&#xff0c;常用的数据类型有&#xff1a; 整数&#xff0c; 比如 3 小数&#xff08;也叫浮…...

国内常用源开发环境换源(flutter换源,python换源,Linux换源,npm换源)

flutter换源 使用环境变量:PUB_HOSTED_URL FLUTTER_STORAGE_BASE_URL&#xff0c; 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&#xff0c;并延时30分钟 测试JWT的有效时间 测试过期JWT的解析 四.应用 今天就到这了&#xff0c;希…...

【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米的线作为挖沙洞的参考线路&#xff0c;小花和小草分别从两头开始沿着划好的线开始挖洞&#xff0c;小花每隔a米挖一个洞&#xff0c;小草每隔b米挖一个洞&#xff0c;碰到已经挖过洞的就不需要再挖了。那么&#x…...

后端:推荐 2 个 .NET 操作的 Redis 客户端类库

目录 Redis特点 Redis场景 1. StackExchange.Redis 2. FreeRedis &#x1f680; 快速入门 &#x1f3a3; Master-Slave (读写分离) &#x1f4bb; Pipeline (管道)示例 &#x1f30c; Redis Cluster (集群) Redis &#xff0c;是一个高性能(NOSQL)的key-value数据库,Re…...

华泰证券:京东营收增长或短期承压

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;华泰证券近期发布研报称京东营收增长或短期承压。华泰证券主要观点如下&#xff1a;营收增长或短期承压&#xff0c;聚焦长期内生能力建设 考虑到消费情绪的恢复仍需一定时间&#xff0c;我们预计…...

Java从resources文件下载文档,文档没有后缀名

业务场景&#xff1a;因为公司会对excel文档加密&#xff0c;通过svn或者git上传代码也会对文档进行加密&#xff0c;所以这里将文档后缀去了&#xff0c;这样避免文档加密。 实现思路&#xff1a;将文档去掉后缀&#xff0c;放入resources下&#xff0c;获取输入流&#xff0…...

【动手学深度学习-Pytorch版】BERT预测系列——BERTModel

本小节主要实现了以下几部分内容&#xff1a; 从一个句子中提取BERT输入序列以及相对的segments段落索引&#xff08;因为BERT支持输入两个句子&#xff09;BERT使用的是Transformer的Encoder部分&#xff0c;所以需要需要使用Encoder进行前向传播&#xff1a;输出的特征等于词…...

Python之元组、字典和集合练习

1、餐厅下午茶 &#xff08;列表与元组 crr66&#xff09; 某餐厅推出了优惠下午茶套餐活动。顾客可以以优惠的价格从给定的糕点和给定的饮 料中各选一款组成套餐。已知&#xff0c;指定的糕点包括松饼(Muffins)、提拉米苏(Tiramisu)、芝士蛋 糕(Cheese Cake)和三明治(Sandwic…...

【数据结构】归并排序和计数排序(排序的总结)

目录 一&#xff0c;归并排序的递归 二&#xff0c;归并排序的非递归 三&#xff0c;计数排序 四&#xff0c;排序算法的综合分析 一&#xff0c;归并排序的递归 基本思想&#xff1a; 归并采用的是分治思想&#xff0c;是分治法的一个经典的运用。该算法先将原数据进行拆…...

某医疗机构:建立S-SDLC安全开发流程,保障医疗前沿科技应用高质量发展

某医疗机构是头部资本集团旗下专注大健康领域战略性投资与运营的实业公司&#xff0c;市场规模超300亿。该医疗机构已完成数字赋能&#xff0c;形成了标准化、专业化、数字化的疾病和健康管理体系&#xff0c;将进一步规划战略方向&#xff0c;为人工智能纳米技术、高温超导、生…...

验证二叉搜索树的后序遍历序列

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、可重定位装入&#xff08;静态重定位&#xff09; 3、动态运行时装入&#xff08;动态重定位&#xff09; 六、从写程序到程序运行 七、链接的三种方式 1、静态…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...