除了@PathVaribale请求方式的不同,要用在方法上,其他注解都用在参数上
@RequestMapping,@ResponseBody既可以注解在类上,也可以注解到方法上。
目录
一.@RequestParam
二.@RequestBody
三.@PathVaribale
Restful风格
Restful风格如何实现缓存机制
四.@RequestHeader
五.@CookieValue
六,@ResponseBody
七 ,redirect:show1,forward:show1
八,Session值传递
@RequestParam把请求中指定名称的参数给控制器中的形参赋值。
name属性:设置参数名称
defaultValue属性:设置默认值
@RequestMapping("/show2")
public String show2(@RequestParam("msg1") String msg, @RequestParam("msg2") int num){
return "success"; }
问:前端传入两个int类型的值是否正确,答案:正确,应为int可以转string,但是如果给msg2传入的是String类型的数据,就会报错
前后端分离
@RequestBody可以将json ===》 javaBean
注意:
前端不能使用GET方式提交数据,GET方式无请求体
用于获取"请求体"内容,并可以转换为对象。
@RequestMapping("/show4")
public String show4(@RequestBody Emp emp){return "success";}
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,
更易于实现缓存机制等
一个WEB应用协议中的“状态”指的是,为两个相互关联的用户交互操作保留某种公共信息,例如用户登录信息,工作流等。这些信息具有不同作用域,如page,request,session,application等。通常由服务器负责保存这些信息。“无状态”的概念逐渐流行,得益于分布式系统的发展。首先,无状态请求易于实现负载均衡。在分布式web系统下,有多个可用服务器,每个服务器都可以处理客户端请求。传统的有状态请求,因为状态信息只保存在第一次发起请求的那台服务器上,之后的请求都只能由这台服务器来处理,服务器无法自由调度请求。无状态请求则完全没有这个限制。其次,无状态请求有较强的容错性和可伸缩性。如果一台服务器宕机,无状态请求可以透明地交由另一台可用服务器来处理,而有状态的请求则会因为存储请求状态信息的服务器宕机而承担状态丢失的风险。需要注意的是,“状态"指请求的状态,而不是资源的状态。Restful风格的无状态约束要求服务器不保存请求状态,如果确实需要维持用户状态,也应由客户端负责。传递用户信息是Restful(无状态)的,而传递sessionID是unRestful(有状态)的,因为session信息保存在服务器端。
综上所述:Restful无状态, 浏览器发送http请求到服务器是无状态的( HTTP是无状态的,是指协议对于事务处理没有记忆能力, 加入Cookie就可以很好的解决无状态问题,而Cookie也存放在浏览器(客户端)当中),由此,客户端(浏览器)保存此次状态信息。无状态请求易于实现负载均衡,Restful更容易实现缓存机制。
个人理解:使url中的层级关系不容易被看出来,不容易被破解。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
GET:用于获取资源 POST:用于新建资源 PUT:用于更新资源 DELETE:用于删除资源
例如:
/users/1 GET : 得到 id = 1 的 user
/users/1 DELETE: 删除 id = 1 的 user
/users/1/新名/新性 PUT: 更新 id = 1 的 user
/users/新名/新性 POST: 新增 user
@PostMapping("/show5/{uname}/{pwd}")
public String show5(@PathVariable("uname") String msg1, @PathVariable("pwd") String msg2){
return "success";}
@RequestHeader作用:用于获取请求消息头。//URL路径当中不能带有中文名,否则会报错。
属性:
value:提供消息头名称
required:是否必须有此消息头
@RequestMapping("/show1")
public String show1(@RequestHeader(value="msg1") String msg){System.out.println(msg);return "success";}
作用:用于把指定 cookie 名称的值传入控制器方法参数。
属性:
value:指定 cookie 的名称。
required:是否必须有此 cookie。
session存在Cookie中?
Session ID是存储在cookie中的;Cookie也被称为会话Cookie。Session在服务器端,Cookie在浏览器端。
session就是服务端为客户端创建的一个对象,这个对象用来保存一些用户的数据,这些数据用于服务端和客户端的“状态保存”;
发送这个带有session ID的cookie,服务器拿到这个带有session ID的cookie,就会取出对应的session ID,然后再到服务器中找到对应的session对象(session是存在服务端的)最后,当服务器辨别出这个用户后,就会对用户进行一些个性化的响应;
参考地址:JSP Cookie 使用完全详解_haovin668的博客-CSDN博客
@RequestMapping("/show2")
public String show2(@CookieValue(value = "JSESSIONID",required = false)String jsessionid){
System.out.println(jsessionid);
return "success";}
@ResponseBody 对象====>json 类和方法都可以,标注在类上表示所有方法值都为json
@RequestBody json====>对象,方法参数
@RestController = @Controller + @ResponseBody标注在控制器类上
重新发送一次请求,当方法上没有ResponseBody修饰时,两个语句都表示逻辑名称,自动跳转到show1下的页面。
request.getSession() .setAttribute("emp",emp);前后端未分离时,利用request存储信息到动态网页当中。网页中#(sessino.emp.eid)以表达式的形式接受。