REST:Representational State Transfer 资源表现层状态转换
Resources 资源
Representation 资源表现层
State Transfer 状态转换
RESTful的特点:
- URL传参更加简洁
传统的URL:http://localhost:7777/test?id=1
RESTful:http://localhost:7777/test/1
- 完成不同终端之间的资源共享,RESTful提供了一套规范,不同终端之间只需要遵守该规范,就可以实现数据的交互。
RESTful具体来讲就是4种表现形式,HTTP协议中的四种请求类型(GET、POST、PUT、DELETE)分别对应四种常规操作,CRUD。
GET 用来获取资源
POST 用来创建资源
PUT 用来修改资源
DELETE用来删除资源
- 由于form表单不支持PUT、DELETE请求,需要想办法支持。SpringMVC通过添加过滤器的方式来完成这种处理的。
实现原理 及 示例:
检测请求参数中是否包含 _method 参数,如果包含则获取该参数的值,判断是哪种操作后完成请求类型的转换,然后继续传递。
1、在 form 表单中添加隐藏域标签, name="_method", value="PUT"/"DELETE"。
2、在web.xml文件中配置HiddenHttpMethodFilter
<!-- put/delete请求转换 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3、编写Controller
package com.sunjian.controller; import com.sunjian.entity.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; /** * @author sunjian * @date 2020/3/19 8:13 */ @Controller @RequestMapping("/rest") public class RESTController { @RequestMapping("/get/{id}") @ResponseBody public String get(@PathVariable("id") int num){ System.out.println("GET"); if(num < 100){ return "OK"; }else return "没有这个编号的数据"; } @RequestMapping(value = "/post", method = RequestMethod.POST) public ModelAndView post(){ User user = new User(); user.setId(123); user.setName("post"); user.setAge(55); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); modelAndView.setViewName("show"); return modelAndView; } @RequestMapping(value = "/put", method = RequestMethod.PUT) @ResponseBody // 返回json格式 public String put(){ System.out.println("put"); return "put"; } @RequestMapping(value = "/delete", method = RequestMethod.DELETE) @ResponseBody public String delete(){ System.out.println("delete"); return "delete"; } }
4、编写JSP页面
rest.jsp
<%@page contentType="text/html; charset=UTF-8" language="java" %> <%@page isELIgnored="false" %> <!-- 是否忽略解析el表达式 --> <html> <body> <form action="/rest/put" method="POST"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="PUT"> </form> <hr> <form action="/rest/delete" method="POST"> <input type="hidden" name="_method" value="DELETE"> <input type="submit" value="DELETE"> </form> <hr> <form action="/rest/get/1" method="GET"> <input type="submit" value="GET"> </form> <hr> <form action="/rest/post" method="POST"> <input type="submit" value="POST"> </form> </body> </html>
show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> ${user} </body> </html>
5、访问jsp页面,提交请求
OK.