SSM--SpringMVC复习(二)
请求 URL匹配: @RequestMapping
@RequestMapping 负责将请求映射到对应的控制器方法上。
@RequestMapping 注解可用于类或方法上。用于类上,表示类中的所有响应请求的方法都以该地址作为父路径。
在整个 Web 项目中,@RequestMapping 映射的请求信息必须保证全局唯一。
@RequestMapping 注解常用属性
value
@RequestMapping 注解的默认属性,如果只有 value 属性时,可以省略该属性名,如果有其它属性,则必须写上 value 属性名称。
// 斜杠可省略
@RequestMapping(value="/login")
@RequestMapping("/login")
value 属性支持通配符匹配,如 value="user/*" 表示 user/1 或 user/login 都能够正常访问。
path
用法同 value。
name
用来添加描述信息,相当于方法注释。如 @RequestMapping(value = "/login",name = "用户登录")。
method
method 属性用于表示该方法支持哪些 HTTP 请求。省略 method 则说明该方法支持全部的 HTTP 请求。
//表示该方法只支持 GET 请求
@RequestMapping(value = "login",method = RequestMethod.GET)
//说明该方法同时支持 GET 和 POST 请求
@RequestMapping(value = "login",method = {RequestMethod.GET,RequestMethod.POST})
params
用于指定请求中规定的参数 。
//请求中必须包含 type 参数时才能执行该请求,即 /login?type=x 可访问该方法,/login 则无法访问该方法。
@RequestMapping(value = "login",params = "type")
public String doLogin() {return "/test.jsp";
}
//请求中必须包含 type 参数且值为1时才能执行该请求,否则无法访问
@RequestMapping(value = "login",params = "type=1")
public String doLogin() {return "/test.jsp";
}
header
表示请求中必须包含某些指定的 header 值。
consumes
用于指定请求提交内容类型(Content-Type),例如:application/json、text/html。
@RequestMapping(value = "login",consumes = "application/json")
produces
用于指定返回的内容类型,返回的内容类型必须是 request 请求头(Accept)中所包含的类型。 除此之外,还可以指定返回值的编码。
// 指定返回内容类型 @RequestMapping(value = "login", produces = "application/json") // 指定返回内容类型,同时指定返回值编码 @RequestMapping(value = "login",produces = "application/json,charset=utf-8")
请求参数获取
Spring MVC Controller 接收请求参数的方式有很多种,有的适合 get 请求方式,有的适合 post 请求方式,有的两者都适合。主要有以下几种方式:
-
通过处理方法的简单形参接收请求参数
-
通过实体 Bean 接收请求参数
-
通过 HttpServletRequest 接收请求参数
-
通过 @RequestParam 接收请求参数
-
通过 @PathVariable 接收 URL 中的请求参数
通过处理方法的简单形参接收请求参数
通过方法形参接收请求参数,是根据请求参数名和方法形参名相同原则进行赋值。该接收参数方式适用于 get 和 post 提交请求方式。
@RequestMapping("/login")
public String doLogin(String username,String pwd){return "/show.jsp"; //请求转发
}
通过实体Bean接收请求参数
实体 Bean 接收请求参数适用于 get 和 post 提交请求方式。Bean 的属性名称必须与请求参数名称相同。请求参数按同名原则,赋值给 Bean 的属性。如果 Bean 中的属性是 数字类型,则 SpringMVC 会自动尝试参数类型的转换。
@RequestMapping("/login")
public String doLogin(User user){return "/show.jsp"; //请求转发
}
通过HttpServletRequest接收请求参数
@RequestMapping("/login")
public String doLogin(HttpServletRequest request){String name = request.getParameter("username");String pwd = request.getParameter("pwd");return "/show.jsp"; //请求转发
}
通过@RequestParam接收请求参数
@RequestParam 有以下三个参数:
-
value | name:参数名
-
required:是否必须,默认为 true,表示请求中必须包含对应的参数名,若不存在将抛出异常
-
defaultValue:参数默认值
@RequestMapping("/login")
public String doLogin(@RequestParam(name = "name",defaultValue = "admin")String username, @RequestParam String pwd){return "/show.jsp"; //请求转发
}
通过@PathVariable接收URL中的请求参数
/*访问 /login/admin/123456, URL中的模板变量 {name} 和 {pwd} 将值 admin 和 123456 绑定到通过 @PathVariable 注解的参数 username 和 pwd 上。
*/
@RequestMapping("/login/{name}/{pwd}")
public String doLogin(@PathVariable("name") String username, @PathVariable String pwd){return "/show.jsp"; //请求转发
}
请求转发和重定向
请求转发
-
方式 1
@RequestMapping("/login") public String doLogin(){return "/show.jsp"; } -
方式 2
@RequestMapping("/login") public String doLogin(){return "forward:/show.jsp"; } -
方式3
@RequestMapping("/login") public ModelAndView doLogin(){ModelAndView mv = new ModelAndView("/show.jsp");return mv; } -
方式4
@RequestMapping("/login") public void doLogin(HttpServletRequest request, HttpServletResponse response){request.getRequestDispatcher("show.jsp").forward(request,response); }
重定向
-
方式1
@RequestMapping("/login") public String doLogin(){return "redirect:/show.jsp"; } -
方式2
@RequestMapping("/login") public void doLogin(HttpServletResponse response){response.sendRedirect("/demo/show.jsp"); }
传值到View
-
方式1
// 将放在 model 中的属性 m2 的作用域设置为 session 范围 @SessionAttributes("m2") public class LoginController {@RequestMapping("/login")public String doLogin(Model model){model.addAttribute("m1","info"); //requestmodel.addAttribute("m2","info2"); //sessionreturn "forward:/show.jsp"; } } -
方式2
@RequestMapping("/login") public ModelAndView doLogin(){ModelAndView mv = new ModelAndView();mv.setViewName("/show.jsp");mv.addObject("m","info");return mv; } -
方式3
@RequestMapping("/login") public String doLogin(HttpServletRequest request,HttpSession session){request.setAttribute("m1","info"); //requestsession.setAttribute("m2","info2"); //sessionreturn "forward:/show.jsp"; } -
方式4
@ModelAttribute 注解用于将其修饰的对象自动暴露为模型数据,在视图页面展示时使用。
@RequestMapping("/login") //等价于 model.addAttribute("user",user) public String doLogin(@ModelAttribute("user") User user){return "/show.jsp"; } @RequestMapping("/login") //等价于 model.addAttribute("User",yh) public String doLogin(@ModelAttribute User yh){return "/show.jsp"; }
Ajax 响应
@Controller
@Controller
public class LoginController {@RequestMapping("/login")@ResponseBody // 响应 Ajax 请求,必须添加此注解public Student doLogin(String name,String pwd){User user = userService.selectUser(name,pwd);return user; // 返回到 view 的数据会自动转为 json(js) 对象}
}
@RestController
@RestController = @Controller+@ResponseBody
@RestController
public class LoginController {@RequestMapping("/login")public User login(String name,String pwd) {User user = userService.selectUser(name,pwd);return user;}
}
视图资源解析器
视图解析器(ViewResolver)是 Spring MVC 的重要组成部分,负责将逻辑视图名解析为具体的视图对象。
URLBasedViewResolver
UrlBasedViewResolver 是对 ViewResolver 的一种简单实现,主要提供了一种拼接 URL 的方式来解析视图。
UrlBasedViewResolver 通过 prefix 属性指定前缀,suffix 属性指定后缀。当 ModelAndView 对象返回具体的 View 名称时,它会将前缀 prefix 和后缀 suffix 与具体的视图名称拼接,得到一个视图资源文件的具体加载路径,从而加载真正的视图文件并反馈给用户。
使用 UrlBasedViewResolver 除了要配置前缀和后缀属性之外,还需要配置“viewClass”,表示解析成哪种视图。
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceViewResolver"/><!--不能省略--><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/> </bean>
存放在 /WEB-INF/ 目录下的内容不能直接请求到,为了安全性考虑,通常把 jsp 文件放在 WEB-INF 目录下
InternalResourceViewResolver
InternalResourceViewResolver 为“内部资源视图解析器”,是日常开发中最常用的视图解析器类型。它是 URLBasedViewResolver 的子类,拥有 URLBasedViewResolver 的一切特性。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/>
</bean>
相关文章:
SSM--SpringMVC复习(二)
请求 URL匹配: RequestMapping RequestMapping 负责将请求映射到对应的控制器方法上。 RequestMapping 注解可用于类或方法上。用于类上,表示类中的所有响应请求的方法都以该地址作为父路径。 在整个 Web 项目中,RequestMapping 映射的请求…...
C语言蓝桥杯组题目
系列文章目录 文章目录 系列文章目录前言题目第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数?都是多少?思路 第二题: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少…...
【解决】Unity TMPro字体中文显示错误/不全问题
问题描述:字体变成方块 原因:字体资源所承载的长度有限 1.找一个中文字体放入Assets中 2.选中字体创建为TMPro 字体资源 3.选中创建好的字体资源(蓝色的大F) 在右边的属性中找到Atlas Width h和 Atlas Heigth,修改的大一点&…...
【Threejs进阶教程-着色器篇】9.顶点着色器入门
【Threejs进阶教程-着色器篇】9.顶点着色器入门 本系列教程第一篇地址,建议按顺序学习认识顶点着色器varying介绍顶点着色器与片元着色器分别的作用Threejs在Shader中的内置变量各种矩阵gl_Position 尝试使用顶点着色器增加分段数增强效果 制作平面鼓包效果鼓包效果…...
质量留住用户:如何通过测试自动化提供更高质量的用户体验
在当今竞争异常激烈的市场中,用户手头有无数种选择,但有一条真理至关重要: 质量留住用户。 产品的质量,尤其是用户体验 (UX),直接决定了客户是留在您的品牌还是转而选择竞争对手。随着业务的发展,出色的用户…...
【CSP CCF记录】201803-1第13次认证 跳一跳
题目 样例输入 1 1 2 2 2 1 1 2 2 0 样例输出 22 思路 没有技术含量的一道题,解题的关键是理解游戏规则。用state标记跳跃状态,以下是对游戏规则的分析: 1. state1,跳到方块上但没跳到中心,得1分 2. state2…...
详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)
文章目录 详解 Qt 中使用虚拟键盘(软键盘:QtVirtualKeyboard)1. 虚拟键盘简介1.1 虚拟键盘的应用场景 2. 安装和配置2.1 安装 QtVirtualKeyboard2.2 配置环境变量 3. 使用虚拟键盘3.1 示例代码main.cppwidget.hwidget.cpp 4. 总结 详解 Qt 中…...
cocoscreater3.8.4生成图集并使用
1.安装texturepacker,去官网下载https://www.codeandweb.com/texturepacker 2.将图片拖动进来,即可自动生成精灵表,这里输出选用cocos2d-x,打包用免费版的“基本”就行,高级模式是收费的,然后点击“发布精…...
IDEA如何快速地重写方法,如equals、toString等
前言 大家好,我是小徐啊。我们在使用IDEA的时候,有时候是需要重写equals和toString等方法的。这在IDEA中已经很方便的给我们准备好了快速的操作了。今天就来讲解一下。 如何重写 首先,打开要重写方法的文件,让鼠标定位到这个文…...
网络安全——SpringBoot配置文件明文加密
一、前言 在日常开发中,项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储,你的电脑被拿去修理,就会容易泄露,一旦被其他人获取到…...
LightRAG开源了…结合本地ollama实现股票数据接口Akshare智能问答
LightRAG是由香港大学研究团队推出的一种检索增强生成(Retrieval-Augmented Generation, RAG)系统。该系统通过整合图结构索引和双层检索机制,显著提升了大型语言模型在信息检索中的准确性和效率。LightRAG 不仅能够捕捉实体间的复杂依赖关系…...
【PCB设计】AD16教程:分配位号
1、前提条件 确保已经基本画完原理图 2、点击【Tools-Annotate Schematics】 3、依次点击【Reset All】、【Update Changes Lise】、【Close】 最后位号就被自动分配好了...
ElasticSearch7.x入门教程之索引概念和基础操作(三)
文章目录 前言一、索引基本概念二、索引基本使用elasticsearch-head插件Kibana使用 总结 前言 要想熟悉使用ES的索引,则必须理解索引相关的概念,尤其是在工作当中。 在此记录,方便开展工作。 一、索引基本概念 尽量以通俗的话语。 1、集群…...
Python后端flask框架接收zip压缩包方法
一、用base64编码发送,以及接收 import base64 import io import zipfile from flask import request, jsonifydef unzip_and_find_png(zip_data):# 使用 BytesIO 在内存中处理 zip 数据with zipfile.ZipFile(io.BytesIO(zip_data), r) as zip_ref:extracted_paths…...
机器学习中数据集Upsampling和Downsampling是什么意思?中英文介绍
对GPT4o大模型的Prompt如下: Datasets marked with ↓ are downsampled from their original datasets, datasets marked with ↑ are upsampled.这里的上采样和下采样是什么意思 内容援引自:paper (https://allenai.org/papers/tulu-3-repor…...
浏览器控制台中使用ajax下载文件(没有postman等情况下)
有时候,可能电脑里面没有postman(比如内网),然后又需要导出一些文件,前端又没有提供相应的功能(比如循环调用导出等),这时候我们就可以通过在控制台写代码的方式来实现了。这个还是在…...
完全二叉树的基本操作(顺序存储)
#include<iostream> #include<math.h> using namespace std;#define MaxSize 100 struct TreeNode {int value;bool isEmpty;//判断该节点是否为空 }t[MaxSize];/** *定义一个长度位MaxSize的数组,按照从上到下, *从左到右的方式依次存储完全…...
【HTTP】http与https
http与https的关系 应用层协议: http(HyperText Transfer Protocol)超文本传输协议; https(Hypertext Transfer Protocol Secure)超文本传输安全协议; 传输层协议:TCP(Tr…...
【Git多人开发与协作之团队的环境搭建】
Git多人开发与协作之团队的环境搭建 新的改变1. Git 的用途2. 分支的概念与类型3. HEAD 和分支指针如何查看 HEAD 指向的位置: 4. 常见的 Git 操作5. 常见问题与解决方法总结GitHub 项目获取实操在新电脑上运行 Git1. 安装 Git2. 配置用户名和邮箱3.配置 Git 和 SSH…...
java基础概念36:正则表达式1
一、正则表达式的作用 作用一:校验字符串是否满足规则;作用二:在一段文本中查找满足要求的内容。——爬虫 二、正则表达式 2-1、字符类 示例: public static void main(String[] args) {System.out.println("a".matc…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
