SpringMVC实现对网页的访问,在请求控制器中创建处理请求的方法
目录
测试HelloWorld
@RequestMapping注解
@RequestMapping注解的位置
@RequestMapping注解的value属性
@RequestMapping注解的method属性
SpringMVC支持路径中的占位符(重点)
SpringMVC获取请求参数
1、通过ServletAPI获取
2、通过控制器方法的形参获取请求参数
@RequestParam注解
浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求就会被前端控制器
DispatcherServlet处理。
前端控制器会读取SpringMVC的核心配置文件,通过扫描组件找到控制器,将请求地址和控制器中@RequestMapping注解的value属性值进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方法。
处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会被视图解析器解析,加上前缀和后缀组成视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视图所对应页面。
测试HelloWorld
实现对首页的访问
@Controller
public class HelloController {// @RequestMapping注解:处理请求和控制器方法之间的映射关系// @RequestMapping注解的value属性可以通过请求地址匹配请求,/表示的当前工程的上下文路径// localhost:8080/springMVC/@RequestMapping("/")public String index(){
// return类似请求转发return "first";}
}
通过超链接跳转到指定页面
在主页first.html中设置超链接
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body><h1>首页</h1><a th:href="@{/hello}">HelloWorld</a><br/>
</body>
</html>
在请求控制器中创建处理请求的方法
@RequestMapping("/hello")
public String HelloWorld() {return "target";
}
点击主页面中HelloWorld链接时就会依据请求控制器中跳转到target页面中。
@RequestMapping注解
@RequestMapping:处理请求和控制器方法之间的映射关系
SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。
@RequestMapping注解的位置
@RequestMapping标识一个类:设置映射请求的请求路径的初始信息
@RequestMapping标识一个方法:设置映射请求请求路径的具体信息
@Controller
@RequestMapping("/test")
public class RequestMappingController {//此时请求映射所映射的请求的请求路径为:/test/testRequestMapping @RequestMapping("/testRequestMapping")public String testRequestMapping(){ return "success";}
}
html跳转链接如下:
<a th:href="@{/test/testRequestMapping}">测试@RequestMapping</a><br>
@RequestMapping注解的value属性
@RequestMapping注解的value属性通过请求的请求地址匹配请求映射
value属性可以有多个请求地址,表示其中任意一个地址都可以请求映射
value属性必须要设置
@RequestMapping(value = {"/testRequestMapping","/test"})
public String testRequestMapping(){return "success";
}
表示以下这两个跳转链接都可以映射到此控制器
<a th:href="@{/test/testRequestMapping}">测试@RequestMapping的value属性-->/testRequestMapping</a><br>
<a th:href="@{/test/test}">测试@RequestMapping的value属性-->/test</a><br>
@RequestMapping注解的method属性
@RequestMapping注解的method属性通过请求的请求方式(get或post)匹配请求映射
@RequestMapping注解的method属性是一个RequestMethod类型的数组,表示该请求映射能够匹配多种请求方式的请求
若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器报错405:Request method 'POST' not supported
@RequestMapping(value = {"/testRequestMapping", "/test"}, method = {RequestMethod.GET, RequestMethod.POST})
public String testRequestMapping(){ return "success";
}
<form th:action="@{/test/test}" method="post"><input type="submit" value="提交">
</form>
SpringMVC支持路径中的占位符(重点)
SpringMVC路径中的占位符常用于RESTful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参。
//SpringMVC支持路径中的占位符,也就是某些需要传输的数据通过路径传输到服务器中
@RequestMapping("/testRest/{id}/{username}")//通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参
public String testRest(@PathVariable("id") String id,@PathVariable("username") String username){System.out.println("id:"+id+",username:"+username);return "success";
}
//最终输出的内容为-->id:1,username:admin
@RequestMapping注解中使用占位符表示传输数据,那么请求参数在html中应该写在路径中如下:
<a th:href="@{/test/testRest/1/admin}">测试路径中的占位符-->/testRest</a><br>
SpringMVC获取请求参数
1、通过ServletAPI获取
将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。
@RequestMapping("/testParam")
public String testParam(HttpServletRequest request){ String username = request.getParameter("username"); String password = request.getParameter("password");System.out.println("username:"+username+",password:"+password); return "success";
}
此方式有一个缺点:不管形参是什么类型接收到的都是String类型,但通过控制器方法的形参获取请求参数就没有这个困扰。
2、通过控制器方法的形参获取请求参数
@RequestMapping("/testParam")
public String testParam(String username, String password){ System.out.println("username:"+username+",password:"+password); return "success";
}
问题一:若请求所传输的请求参数中有多个同名的请求参数(一个参数名有不止一个值)应该怎么获取请求参数呢?
<!--springmvc获取请求参数-->
<a th:href="@{/test/testParam(username='admin',password=123456, hobby='打篮球', hobby='看书', hobby='发呆')}">测试获取请求参数-->/testParam</a><br>
上述的html代码,hobby有三个值。
1、若控制器方法的形参使用字符串类型,则接收到的参数的值为每个数据中间使用逗号拼接

2、若使用字符串数组类型的形参,此参数的数组中包含了每一个数据

注意:通过控制器方法的形参获取请求参数,形参名必须要和传输的请求参数名字一致
(@RequestParam注解可以解决形参名和请求参数名字不一致的情况)
@RequestParam注解
@RequestParam是将请求参数和控制器方法的形参创建映射关系
@RequestParam 注解一共有三个属性:
value:指定为形参赋值的请求参数的参数名
required:设置是否必须传输此请求参数,默认值为true。
若设置为true时,没有传输该请求参数时,页面报错400:Required String parameter 'xxx' is not present;若设置为false,则可以不传输该请求参数,形参的值为null。
defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值。
相关文章:
SpringMVC实现对网页的访问,在请求控制器中创建处理请求的方法
目录 测试HelloWorld RequestMapping注解 RequestMapping注解的位置 RequestMapping注解的value属性 RequestMapping注解的method属性 SpringMVC支持路径中的占位符(重点) SpringMVC获取请求参数 1、通过ServletAPI获取 2、通过控制器方法的形参…...
c++循环解释
在C中,循环是一种重复执行特定代码块的结构。它允许程序多次执行相同的代码,直到满足特定条件为止。 C中有三种主要类型的循环结构: while循环:在开始执行循环前,判断条件是否为真。如果条件为真,则执行循…...
Hadoop3.x基础(2)- HDFS
来源:B站尚硅谷 目录 HDFS概述HDFS产出背景及定义HDFS优缺点HDFS组成架构HDFS文件块大小(面试重点) HDFS的Shell操作(开发重点)基本语法命令大全常用命令实操准备工作上传下载HDFS直接操作 HDFS的API操作HDFS的API案例…...
04 避免 Latch 的产生
Latch 是什么 latch 即锁存器,是一种对电平敏感的存储单元电路,和寄存器一样都是基本存储单元,但是寄存器是边沿触发的存储器,锁存器是电平触发的存储器。 组合逻辑电路和时序逻辑电路 在数字电路中将逻辑电路分成两大类&#…...
嵌入式学习第十四天!(结构体、共用体、枚举、位运算)
1. 结构体: 1. 结构体类型定义: 嵌入式学习第十三天!(const指针、函数指针和指针函数、构造数据类型)-CSDN博客 2. 结构体变量的定义: 嵌入式学习第十三天!(const指针、函数指针和…...
Unix/Linux上的五种IO模型
a.阻塞 blocking 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。 注意:阻塞并不是函数的行为,而是跟文件描述符有关。通…...
电脑风扇控制温度软件 Macs Fan Control Pro 中文
Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件,旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度,自动或手动调整风扇的转速,以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…...
初谈C++:引用
文章目录 前言概述引用特性应用场景做参数做返回值 传值、传引用效率比较引用和指针的区别 前言 在学习C语言的时候会遇到指针,会有一级指针、二级指针…很容易让人头昏脑胀。在C里面,引入了引用的概念,会减少对指针的使用。引用相当于给一个…...
C++ 数论相关题目 博弈论:拆分-Nim游戏
给定 n 堆石子,两位玩家轮流操作,每次操作可以取走其中的一堆石子,然后放入两堆规模更小的石子(新堆规模可以为 0 ,且两个新堆的石子总数可以大于取走的那堆石子数),最后无法进行操作的人视为失…...
EDR、SIEM、SOAR 和 XDR 的区别
在一个名为网络安全谷的神秘小镇,居住着四位守护者,他们分别是EDR(艾迪)、SIEM(西姆)、SOAR(索亚)和XDR(艾克斯)。他们各自拥有独特的能力,共同守…...
修复idea,eclipse ,clion控制台中文乱码
控制台乱码问题主要原因并不在编译器IDE身上,还主要是Windows的控制台默认编码问题。。。 Powershell,cmd等默认编码可能不是UTF-8,无需改动IDE的settings或者properties(这治标不治本),直接让Windows系统…...
怎样使用Oxygen XML Editor将MS Word转换成DITA
▲ 搜索“大龙谈智能内容”关注公众号▲ 前阵子分享过一篇文章:《如何将Word/PDF转成高质量XML》。 文章中分享了将Word/PDF转换成高质量XML的思路和大体步骤。有朋友问:有什么工具可以做这个数据转换,具体怎么操作呢? 今天就来…...
【云上建站】快速在云上构建个人网站3——网站选型和搭建
快速在云上构建个人网站3——网站选型和搭建 一、网站选型二、云市场镜像方式一:方式二:1. 进入ECS实例详情页面,点击停止,确保更换操作系统的之前ECS实例处于已停止状态,点击更换操作系统,进行镜像配置。2…...
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
这个算法的核心思想是通过交换操作,将每个数放到它应该在的位置上。然后再次遍历数组,找到第一个不在正确位置上的数,其索引加一即为缺失的最小正整数。 def first_missing_positive(nums):n len(nums)# 第一次遍历,将数组中的每…...
C#使用RabbitMQ-4_路由模式(直连交换机)
简介 RabbitMQ中的路由模式是一种根据Routing Key有条件地将消息筛选后发送给消费者的模式。在路由模式中,生产者向交换机发送消息时,会指定一个Routing Key。交换机接收生产者的消息后,根据消息的Routing Key将其路由到与Routing Key完全匹…...
PyTorch 之 nn.Parameter
文章目录 使用方法:为什么使用 nn.Parameter:示例使用: 在 PyTorch 中,nn.Parameter 是一个类,用于将张量包装成可学习的参数。它是 torch.Tensor 的子类,但被设计成可以被优化器更新的参数。通过将张量包装…...
KAFKA高可用架构涉及常用功能整理
KAFKA高可用架构涉及常用功能整理 1. kafka的高可用系统架构和相关组件2. kafka的核心参数2.1 常规配置2.2 特殊优化配置 3. kafka常用命令3.1 常用基础命令3.1.1 创建topic3.1.2 获取集群的topic列表3.1.3 获取集群的topic详情3.1.4 删除集群的topic3.1.5 获取集群的消费组列表…...
3d模型上的材质怎么删除---模大狮模型网
在大多数3D软件中,可以通过以下步骤来删除3D模型上的材质: 选择要删除材质的模型:首先,从场景中选择包含目标材质的模型。可以使用选择工具或按名称查找模型。 进入编辑模式:将模型切换到编辑模式。这通常需要选择相应…...
leetcode hot100跳跃游戏Ⅱ
本题和上一题还是有不一样的地方,这个题中,我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。 那么我们还是采用覆盖范围的概念,但是我们需要两个,一个是在当前位置的覆盖范围,另一个是下一步的覆盖…...
大数据期望最大化(EM)算法:从理论到实战全解析
文章目录 大数据期望最大化(EM)算法:从理论到实战全解析一、引言概率模型与隐变量极大似然估计(MLE)Jensen不等式 二、基础数学原理条件概率与联合概率似然函数Kullback-Leibler散度贝叶斯推断 三、EM算法的核心思想期…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...
联邦学习带宽资源分配
带宽资源分配是指在网络中如何合理分配有限的带宽资源,以满足各个通信任务和用户的需求,尤其是在多用户共享带宽的情况下,如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源,通常指的是单位时间…...
LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...
