0 引言
作者正在学习SpringMVC相关内容,学到了一些知识,希望分享给需要短时间想要了解SpringMVC的读者朋友们,想用通俗的语言讲述其中的知识,希望与诸位共勉,共同进步!
本系列会持续更新!!可以放心食用!
1 本篇内容的十个请求处理实验
主要通过以上10个实验来充分掌握请求参数的处理!!
2 十个请求处理实验中的前五个
2.1 实验一 使用普通变量,请求参数
做这10个实验之前,需要有一个发送请求参数的前端网页,这个网页已经准备好了,文件可以在此连接中下载:
前端请求文件
然后将它放进当前项目工中的src--resources--static目录下,当项目启动时,在网页中输入localhost:8080(如果在配置文件中修改过端口的,请使用修改后的端口)即可访问下面这个页面:
当我们输入用户名/密码/电话号码以及是否同意用户协议后,点击注册:
会发现网址上的请求地址为:
因为键值对都是写在请求地址中,所以我们可以确定前端是以Get类请发送给的并且访问的地址为/handle01,所以我们需要在后端编写:
@RequestMapping(value = "/handle01")public String handle01(String username, String password, String cellphone, boolean agreement){System.out.println("username:"+username);System.out.println("password:"+password);System.out.println("cellphone:"+cellphone);System.out.println("agreement:"+agreement);return "ok!!!";
当发送过来的时候是普通的参数时,我们可以直接在方法的变量中接下前端送过来的数值,运行成功后,网页端:
后端:
需要注意的是:方法中的变量名称需要和前端发来请求所带的关键词一一对应!!!!,如果我想随心所欲地给变量取名字,那应该怎么办呢?使用实验二的方法!
2.2 实验二 @RequestParam 明确参数使用
变量名可以随便取名称,但代价就是要在变量名前使用@RequestParam注解标注出这个变量对应的关键词是什么,代码是这样写的:
@RequestMapping(value = "/handle02")public String handle02(@RequestParam("username") String un,@RequestParam("password") String pwd,@RequestParam("cellphone") String cp,@RequestParam("agreement") boolean ok){System.out.println("username:"+un);System.out.println("password:"+pwd);System.out.println("cellphone:"+cp);System.out.println("agreement:"+ok);return "ok!!!";
这样的话当实验二点击注册后:
网页端:
后端:
2.3 实验三 使用POJO匹配封装所有的参数
有没有发现,如果使用上面来两种实验的话,有太多属性值需要一个一个传输,非常麻烦,所以实验三给出了一种很方便的写法。
进入实验三:
然后先发送个注册请求,点击F12打开网页中的请求配置发现是以POST的方式发送的,内容应该被保存在请求体中:
、
所以可以在后端java编写代码:
首先先编写一个Bean对象,并一一封装了相对应的属性值:
import lombok.Data;@Data
public class person {private String username;private String password;private String cellphone;private boolean agreement;
}
随后在Comtroller中编写:
@RequestMapping(value = "/handle03")public String handle03(Person person){System.out.println(person);return "ok!!!";}
网页端:
后端:
为什么可以这样?因为SpringBoot可以自动把请求参数与POJO中的输性进行一一对应!!
2.4 实验四 使用@RequstHeader注解获得请求头中的内容
进入实验四:
然后先发送个请求,点击F12打开网页中的请求配置中请求标头:
就希望获得其中某些键值对,我应该如何编写程序呢?比如我想获得请求头中的Host:
@RequestMapping(value = "/handle04")public String handle04(@RequestHeader("Host") String host){System.out.println(host);return "ok!!!";}
网页端:
后端:
打印出了Host关键词中的数值:
2.5 实验五 获取CookieValue的值
如果有不知道Cookie是什么的同学可以看看:
阿里二面:你说说Cookie、Session、Token的区别?傻傻分不清。。。_哔哩哔哩_bilibili
我们可以在这里创建一个Cookie的键值对作为测试:
当我加上去之后,只要网站上不关闭,每次发送请求都可以在请求头中看见Cookie的数值:
程序:
@RequestMapping(value = "/handle05")public String handle05(@CookieValue("hehe") String hehe){System.out.println(hehe);return "ok!!!";}
网页端:
后端:
3 十个实验的测试代码
如果大家也不想敲代码的话,那就可以直接在我的gitee地址里面下载十个实验的测试代码:
lin/请求测试十个实验https://gitee.com/lin2002wei/Request_code
参考:
P91-P95
095.请求处理 - 实验5:@CookieValue - 获取cookie的值_哔哩哔哩_bilibili