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…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
