博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RequestMapping_HiddenHttpMethodFilter 过滤器
阅读量:5997 次
发布时间:2019-06-20

本文共 3760 字,大约阅读时间需要 12 分钟。

【REST】

1.REST:即Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以得到越来越多网站的采用。

2.资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本,一张图片,一首歌曲,一种服务,总之就是一个具体的存在。可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI 即为每一个资源的独一无二的标识符

3.表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层。比如:文本可以用TXT格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式。

4.状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态的协议,即所有的状态都保存在服务器 端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是“表现层状态转化”。具体说,就是HTTP协议里面,四个表示操作方式的动词:GET,POST,PUT,DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源

 

示例:

-- /order/1  HTTP GET :得到 id = 1 的order

-- /order/1 HTTp DELETE :删除 id = 1的order

-- /order/1 HTTP PUT :更新 id = 1 的order

-- /order    HTTP POST :新增 order

 

5.HiddenHttpMethodFilter:浏览器form表单只支持GET和POST请求,而DELETE、PUT等method并不支持。Spring3.0添加了一个过滤器,可以将这些请求转换为标准的HTTP方法,使得支持GET、POST、PUT与DELETE的请求。

 

查看源码org.springframework.web.filter.HiddenHttpMethodFilter:

1     /** Default method parameter: {
@code _method} */2 public static final String DEFAULT_METHOD_PARAM = "_method";3 4 private String methodParam = DEFAULT_METHOD_PARAM;

 

1     @Override 2     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) 3             throws ServletException, IOException { 4  5         String paramValue = request.getParameter(this.methodParam); 6         if ("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) { 7             String method = paramValue.toUpperCase(Locale.ENGLISH); 8             HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, method); 9             filterChain.doFilter(wrapper, response);10         }11         else {12             filterChain.doFilter(request, response);13         }14     }

 

实践:

web.xml:

1    
2
3
HiddenHttpMethodFilter
4
org.springframework.web.filter.HiddenHttpMethodFilter
5
6 7
8
HiddenHttpMethodFilter
9
/*
10

 

SpringMVCTest.java:

1 @RequestMapping("/springmvc") 2 @Controller 3 public class SpringMVCTest { 4     private static final String SUCCESS = "success"; 5  6     @RequestMapping(value="/testRest/{id}",method=RequestMethod.PUT) 7     public String testRestPut(@PathVariable Integer id){ 8         System.out.println("testRest PUT :" +  id); 9         return SUCCESS;10     }11     12     @RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)13     public String testRestDelete(@PathVariable Integer id){14         System.out.println("testRest DELETE :" +  id);15         return SUCCESS;16     }17     18     @RequestMapping(value="/testRest",method=RequestMethod.POST)19     public String testRest(){20         System.out.println("testRest POST");21         return SUCCESS;22     }23     24     @RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)25     public String testRest(@PathVariable Integer id){26         System.out.println("testRest GET :" +  id);27         return SUCCESS;28     }29

 

index.jsp:

1  2  3     
4
5
6
7 8
9 10
11
12
13
14 15
16 17
18
19
20 21
22 Test Rest Get23 24

 

运行结果:

小结:

 

REST风格的URL:

以CRUD为例:

新增:/order POST

修改:/order/1 PUT      update?id=1

获取:/order/1 GET      get?id=1

删除:/order/1 DELETE delete?id=1

 

如何发送PUT请求和DELETE 请求呢?

1.需要配置HiddenHttpMethodFilter

2.需要发送POST请求

3.需要在发送POST请求时携带一个name="_method" 的隐藏域,值为 DELETE 或 PUT。

 

在Spring MVC 的目标方法中如何得到 id 呢?

使用@PathVariable 注解

 

转载于:https://www.cnblogs.com/zhzcode/p/9695597.html

你可能感兴趣的文章
shell语法简单介绍
查看>>
MyEclipse 6.5 代码自动提示功能配置教程
查看>>
eos中BM与有BM特色的去中心化。区块链世界,白皮书为共识,代码为法律。
查看>>
字体大小自适应纯css解决方案
查看>>
Java程序员面试失败的5大原因
查看>>
我认识的python(5)
查看>>
Promise实现
查看>>
报表性能优化
查看>>
js设计模式--迭代器模式
查看>>
Python 学习笔记之——用 sklearn 对数据进行预处理
查看>>
阿里云ECS连接数据库教程方法
查看>>
react
查看>>
PostgreSQL 10.1 手册_部分 IV. 客户端接口_第 33 章 libpq - C 库_33.21. 例子程序
查看>>
iOS 性能优化
查看>>
Spread for Windows Forms高级主题(7)---自定义打印的外观
查看>>
【循序渐进学Python】5.Python常用流程控制及其他语句
查看>>
[LeetCode] Intersection of Two Arrays II 两个数组相交之二
查看>>
winpcap 发送数据包
查看>>
在centos系统shell脚本中cat和重定向符号<<EOF结合使用的注意事项
查看>>
cisco 出现 %Error opening tftp://255.255.255.255 错误解决办法
查看>>