详细解读-Spring请求处理

news/2024/5/1 19:40:13/文章来源:https://blog.csdn.net/weixin_54174102/article/details/126913604

SpringMvc_请求处理

Spring MVC 框架也是一个基于请求驱动的 Web 框架,并且使用了前端控制器模式(是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理


文章目录

  • SpringMvc_请求处理
  • 一、请求参数处理
    • 1.SpringMvc对请求参数的处理
    • 2.乱码问题的解决
    • 3.SpringMvc对原生API的支持
  • 二、请求映射处理
    • 1.@RequestMapping
    • 2.@PathVariable
    • 3.REST
    • 4.静态资源的访问



一、请求参数处理

1.SpringMvc对请求参数的处理

@RequestParam:获取请求的参数

如何获取SpringMVC中请求中的信息
默认情况下,可以直接在方法的参数中填写跟请求一样的名称,此时会默认接受参数
如果有值,直接赋值,如果没有,那么直接给空值
@RequestParam:获取请求中的参数值,使用此注解之后,参数的名称不需要跟请求 的名称一致,但是必须要写

此注解还包含三个参数:
value:表示要获取的参数值
required:表示此参数是否必须,默认是true,如果不写参数那么会报错, 如果值为false,那么不写参数不会有任何错误
defaultValue:如果在使用的时候没有传递参数,那么定义默认值即可

示例:

 @RequestMapping("/bobo")public String bobo(@RequestParam(value = "username", defaultValue = "徐庶") String name) {System.out.println(name);return "index.jsp";}

@RequestHeader:获取请求头信息

如果需要获取请求头信息该如何处理呢?
可以使用@RequestHeader注解,
如果要获取请求头中没有的信息,那么此时会报错
同样,此注解中也包含三 个参数,跟@RequestParam一样 value required defalutValue

示例:

 @RequestMapping("/header")public String header(@RequestHeader("Host") String host){System.out.println(host);return "/index.jsp";}

@CookieValue:获取cookie中的值

如果需要获取cookie信息该如何处理呢?
可以使用@CookieValue注解
如果要获取cookie中没有的信息,那么此时会报错
同样,此注解中也包含三 个参数,跟@RequestParam一样 value required defalutValue

示例:

   @RequestMapping("/cookie")public String cookie(@CookieValue("JSESSIONID") String jsessionId){System.out.println(jsessionId);return "/index.jsp";}

2.乱码问题的解决

我们在表单或者发送请求的时候,经常会遇到中文乱码的问题
那么 如何解决乱码问题呢?

GET请求:修改tomcat的server.xml,在Connector标签后面+ URIEncoding=“utf-8”
POST请求:编写过滤器进行实现

在web.xml中加入过滤器进行实现POST请求
注:此过滤器要写在其他过滤器前面,否则不起作用

<!--    解决编码识别问题--><filter><filter-name>characterEncodingFileter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--        encoding 编码格式--><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
<!--    同时开启请求和响应的编码设置  --><init-param><param-name>transformWsdlLocations</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFileter</filter-name><servlet-name>springmvc</servlet-name></filter-mapping>

3.SpringMvc对原生API的支持

springMvc中的handler可以接收如下的servletAPI:

1.HttpServletRequest
2.HttpServletResponse
3.HttpSession
4.java.security.Principal
5.Locale
6.InputStream
7.OutputStream
8.Reader
9.Writer

通过导入Tomcat中lib文件下的service和jsp包 导入依赖
示例:

  @RequestMapping("/servlet")public String servlet(String username , HttpServletRequest request, HttpServletResponse response){System.out.println(username);String name = request.getParameter("name");System.out.println(name);request.setAttribute("name",name);return "/index.jsp";}

二、请求映射处理

1.@RequestMapping

作用:将请求和处理请求的控制器方法关联起来,建立映射关系。
@RequestMapping用来匹配客户端发送的请求,可以在方法上使用, 也可以在类上使用。
方法:表示用来匹配要处理的请求
类上:表示为当前类的所有方法的请求地址添加一个前置路径,访问 的时候必须要添加此路径

@RequestMapping就是用来标识此方法用来处理什么请求,其中的/可以取消
取消后默认也是从当前项目的根目录开始查找,一般在编写的时候看个人习惯
同时,@RequestMapping也可以用来加在类上,

 @RequestMapping("/bobo1")public String bobo1(User user) {System.out.println(user);return "index.jsp";}

2.@PathVariable

此注解就是提供了对占位符URL的支持,就是将URL中占 位符参数绑定到控制器处理方法的参数中。
@PathVariable 用在参数上面的 专门用来获取URL目录级别的参数
比如 http://localhost:8080/springmvc/path/user/123/xushu 要获得123 @RequestMapping(“/user/{id}”) : @PathVariable(“id”) Int eger id 10

示例:

@RequestMapping("/user/{id}/{username}") 
public String path01(@PathVariable("id") Integer id,@PathVariable("username") String name)
{ System.out.println(id); System.out.println(name);return "/index.jsp"; 
}

3.REST

REST即表述性状态传递(英文:Representational State Transfer, 简称REST)是RoyFielding博士在2000年他的博士论文中提出来的一种软件架 构风格。
它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。 一种相较与之前URL所产生一种更优雅的URL风格

如果是原来的架构风格,需要发送四个请求,分别是?
查询用户:http://localhost:8080/app/user.do?action=getUser&id=xxx GET 增加用户:
http://localhost:8080/app/user_add.do POST 修改用户:
http://localhost:8080/app/xiugaiuser.do POST 删除用户:
http://localhost:8080/app/delete.do?id=1 GET/POST

让不同的请求方式表示不同的请求类型就可以简化我们 的查询,改成名词
看URL就知道要什么看http method就知道干什么
查询用户: http://localhost:8080/xxx/user/1 GET ­­查询
查询多个用户: http://localhost:8080/xxx/users GET
新增用户: http://localhost:8080/xxx/user POST ­­­新增
修改用户: http://localhost:8080/xxx/user/1 PUT ­­修改
删除用户:http://localhost:8080/xxx/user/1 DELETE ­­删除

对网络上所有的资源都有一个资源标志符;
对资源的操作不会改变标识符;
同一资源有多种表现形式(xml、json);
所有操作都是无状态的(Stateless)
符合上述REST原则的架构方式称为RESTful;

HiddenHttpMethodFilter:浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求。
在web.xml中配置过滤器,来实现delete和put方法

<!--    处理html不支持rest中put和delete--><filter><filter-name>hiddenHttpMethod</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>hiddenHttpMethod</filter-name><servlet-name>springmvc</servlet-name></filter-mapping>
@Controller
@RequestMapping("/rest")
public class RestController {// 查询@GetMapping("/user/{id}")public String get(@PathVariable("id") Integer id){System.out.println("查询用户:"+id);return "/index.jsp";}// 新增@PostMapping("/user")public String add(User user){System.out.println("新增用户:"+user);return "/index.jsp";}// 修改@PutMapping("/user/{id}")public String update(User user){System.out.println("修改用户:"+user);return "/index.jsp";}// 删除@DeleteMapping("/user/{id}")public String delete(@PathVariable("id") Integer id){System.out.println("删除用户:"+id);return "/index.jsp";}
}

4.静态资源的访问

当页面中包含静态资源的时候我们能够正确的获取到吗?
在这里插入图片描述
在自己设置的xml文件中加入一个配置
我这里图片放在web文件夹下的image文件夹中

   <mvc:default-servlet-handler/>
<!--    <mvc:annotation-driven></mvc:annotation-driven>--><mvc:resources mapping="/images/**" location="/image/"/>

访问静态资源,只要在xml文件中加入如下配置即可:

    <mvc:default-servlet-handler/><mvc:annotation-driven></mvc:annotation-driven>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9848.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.Docker 常规软件安装

Docker 常规软件安装&#xff08;Tomcat、MySQL、Redis&#xff09; 1. 总体步骤 搜索镜像拉取镜像查看镜像启动镜像容器实例 服务端口映射 停止容器移除容器 2. Tomcat 安装 搜索&#xff1a;docker search tomcat 拉取&#xff1a;docker pull tomcat 查看&#xff1a…

【C++】STL常用容器:string类(详解及模拟实现)

前言&#xff1a; 关于STL的学习&#xff0c;就从最常用的string类开始吧&#xff01;在本篇博客中会详细介绍string的使用方法和细节&#xff0c;最后再模拟实现一个string类。 承接上文&#xff1a;【C】模板初阶 | STL简介 废话不多说&#xff0c;下面直接进入正题 文章目录…

【BAT-表姐御用04ren进阶命令】文件数字顺序命名及改名(含命令解释)

1、bat实现数字顺序命名 echo off setlocal enabledelayedexpansion set count100 for /f "delims" %%i in (dir /b *.jpg,*.png,*.bmp,*.jpeg,*.gif,*.m4v) do call:Rename "%%~i" pause exit:Rename set /a count1 if /i "%~1""伯爵与妖…

Postgresql源码(78)plpgsql中调用call proc()时的参数传递和赋值(pl参数)

《Postgresql源码&#xff08;77&#xff09;plpgsql中参数传递和赋值&#xff08;pl参数&#xff09;》 《Postgresql源码&#xff08;78&#xff09;plpgsql中调用call proc()时的参数传递和赋值&#xff08;pl参数&#xff09;》 总结 调用者在exec_stmt_call中拼接ParamLi…

第12章:动态内存【C++ Primer 中文版 第五版】阅读笔记 + 源码解析

动态内存12.1 动态内存与智能指针shared_ptr类对象的生存周期对象类型生存周期全局对象创建&#xff1a;程序启动时。 销毁&#xff1a;程序结束时。局部自动对象创建&#xff1a;进入其定义所在的程序块时。 销毁&#xff1a;离开其定义所在的程序块时。局部static对象创建&am…

软件设计师笔记-----系统安全分析与设计

五、系统安全分析与设计 5.1、信息系统安全属性 安全属性包括 保密性&#xff1a;最小授权原则、防暴露、信息加密、物理保密完整性&#xff1a;安全协议、校验码、密码验、数字签名、公证可用性&#xff1a;综合保障&#xff08;IP过滤、业务流控制、路由选择控制、审计眼踪…

复习单片机:定时器/计数器部分(内含:1.51 单片机定时器原理 +2.51 单片机定时/计数器结构+3.定时器配置+4.代码部分+5.实验现象)

1.51 单片机定时器原理STC89C5X 单片机内有两个可编程的定时/计数器 T0、T1 和一个特殊功能定 时器 T2。定时/计数器的实质是加 1 计数器&#xff08;16 位&#xff09;&#xff0c;由高 8 位和低 8 位两 2个寄存器 THx 和 TLx 组成。 它随着计数器的输入脉冲进行自加 1&#x…

初识kotlin(初用kotlin一时爽、一直用一直爽)

kotlin历程 2011年7月&#xff0c;JetBrains推出Kotlin项目&#xff0c;这是一个面向JVM的新语言2012年2月&#xff0c;JetBrains以Apache 2许可证开源此项目2016年2月15日&#xff0c;Kotlin v1.0发布。这被认为是第一个官方稳定版本&#xff0c;并且JetBrains已准备从该版本…

【云原生】zookeeper + kafka on k8s 环境部署

文章目录一、概述二、Zookeeper on k8s 部署1&#xff09;添加源2&#xff09;修改配置3&#xff09;开始安装4&#xff09;测试验证5&#xff09;Prometheus监控6&#xff09;卸载三、Kafka on k8s 部署1&#xff09;添加源2&#xff09;修改配置3&#xff09;开始安装4&#…

pytorch线性代数的基本操作

线性代数的基本操作 标量由只有一个元素的张量表示 import torch xtorch.tensor([3.0]) ytorch.tensor([2.0]) xy,x*y,x/y,x**y向量视为标量值的组成 通过张量的索引来访问任一元素 xtorch.arange(4) x,x[3] #张量的长度 len(x) #张量的形状 x.shape对称矩阵 AAT Btorch.ten…

一文看懂线性回归(保姆级别 含源码)

来源: AINLPer 微信公众号&#xff08;每日论文干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2022- 9 -18 引言 最近作者网上看了很多关于线性回归的帖子&#xff0c;个人感觉比较乱&#xff0c;所以打算自己整理一版&#xff0c;希望能把…

(41)STM32——外部SRAM实验笔记

目录 学习目标 成果展示 硬件知识 特点 功能框图 读时序 ​编辑写时序 FSMC驱动 寄存器 闪存片选控制寄存器 硬件 配置 代码 总结 学习目标 今天我们要学习的是有关外部SRAM实验&#xff0c;其实F&#xff14;内部也是有一个&#xff11;&#xff19;&#x…

本周大新闻|索尼PS VR2体验首次公开;Meta Quest Pro开箱视频曝光

本周大新闻&#xff0c;AR方面&#xff0c;沃尔玛App加入AR试穿功能&#xff1b;谷歌搜索AR新增60个行星、卫星模型&#xff1b;Niantic宣布与漫威娱乐合作打造新款LBS AR游戏&#xff1b;AR眼镜ActiveLook打通Apple Watch。 VR方面&#xff0c;索尼PS VR2体验首次公开&#x…

2022年笔试知识总结展望

应届生的笔试知识总结&#xff0c;温故而知新&#xff0c;看看知识加深印象&#xff0c;希望学得更好&#xff0c;有个好结果。 目录 1. TCP的拥塞控制 2. position属性 3. [‘1‘, ‘2‘, ‘3‘].map(parseInt) 输出结果 4. 排序算法的稳定性分析 1&#xff09;稳定的排…

事件研究法与其应用(2)---Excel实操步骤

我们借着学习事件研究法的应用,可以用Excel和Stata等软件进行操作。 今天这主要是利用EXCEL计算累积异常收益率。 在正式开展实操之前,我们先回顾一下事件研究法的步骤(尤其是我们写作论文的时候): 事件研究法计算步骤: 1. 获取数据,定义事件期 2.计算估计期间个股与市…

npm yarn 报错

目录npm yarn报错yarn: 无法加载文件 npm yarn报错 yarn: 无法加载文件 win10系统,yarn : 无法加载文件 C:\Users\丽丽小可爱\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 ... 导致此错误的原因是,PowerShell 执行策略,默认设置为Rest…

JSON 数据类型转换工具

简介 本文介绍一款数据类型转换工具&#xff0c;可以将JSON格式数据转换成YAML、MYSQL、XML、TOML、JavaScript等数据类型。 背景 在日常的开发工程中&#xff0c;我们经常使用JSON表达数据&#xff0c;但有些时候我们需要使用YAML、JavaScript等语言表达数据。因此&#xf…

HTML + HTTP请求 +CSS知识点

文章目录HTML1.HTML元素2.HTML页面3.常见元素1&#xff09;文本2&#xff09;多媒体3&#xff09;表单作用与语法常见表单项案例体验4.HTTP请求1&#xff09;请求组成2&#xff09; 请求方式与数据格式get 请求示例post 请求&#xff08;默认格式&#xff09;示例json 请求&…

Python必知必会 os 模块详解

文章目录Python os 模块os模块的常用操作os.path模块os.open()模块Python os 模块 os是“operating system”的缩写&#xff0c;os模块提供各种 Python 程序与操作系统进行交互的接口&#xff0c;使用os模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方…

【SLAM】4李群李代数

文章目录4.1.基础群李代数的引出李代数李代数so(3)\mathfrak{so}(3)so(3)李代数se(3)\mathfrak{se}(3)se(3)4.2.指数与对数映射4.2.1.SO(3)SO(3)SO(3)指数映射4.2.2.SE(3)SE(3)SE(3)的指数映射4.3.李代数求导与扰动模型4.3.1.BCH公式&近似形式4.3.2.李代数求导4.3.4.扰动模…