说明:
(1)本文内容:
● 简单请求和非简单请求是什么;
● 基本逻辑:【Spring MVC原先只能处理GET和POST这种简单请求】→【但后来有了PUT和DELETE这种非简单请求】→【而,Spring MVC一开始是无法处理这种非简单请求的】→【为了能够处理PUT和DELETE这种非简单请求,Spring MVC可以通过FormContentFilter过滤器,来解决这个需求】;
(2)本篇博客的代码沿用自【RESTful开发风格4:RESTful基本使用二:【@RestController注解】;【路径变量(uri中的变量)】(使用@PathVariable注解来获取路径变量值);】中的【restful工程】;
目录
一:【简单请求】与【非简单请求】简介;
二:【简单请求】与【非简单请求】案例演示;
1.默认情况下:Spring MVC可以处理简单请求;不能处理非简单请求;
2.借助FormContentFilter过滤器,Spring MVC也可以处理非简单请求了;
一:【简单请求】与【非简单请求】简介;
(1)简单请求:在HTML中使用的、标准结构的HTTP请求。包括GET和POST请求;
(2)非简单请求:包含两种情况;
● 复杂要求的HTTP请求。包括PUT和DELETE请求;
● 在标准的GET和POST请求中,扩展了额外的自定义请求头。这种的GET和POST请求,也可以看成非简单请求;
(3)简单请求和非简单请求比较;
● 简单请求和非简单请求,在数据的结构上,几乎是一致的;
● 二者在数据的内容上存在差异:非简单请求在发送之前,需要额外的发送一次预检请求;
● 简单请求就像廉价快递,其会直接把快递送到你家门口或者附加的快递柜;非简单请求就像顺丰这种高质量快递,其在正式送快递前会先打个电话,问一下收件人是否在家,如果收件人在家,顺丰才会正式投递;
(4)非简单请求的好处:非简单请求增加了预检请求,其可以让服务器预先处理;预检请求会把不符合要求的请求给排除,这些不符合要求的请求并不会发送实际请求;而这是可以减轻网络传输和服务器的压力;
(5)非简单请求和简单请求的处理方式不同:在用Spring MVC的处理的时候,二者的处理方式是不同的,我们需要注意。
二:【简单请求】与【非简单请求】案例演示;
1.默认情况下:Spring MVC可以处理简单请求;不能处理非简单请求;2.借助FormContentFilter过滤器,Spring MVC也可以处理非简单请求了;(1.1)服务器端的POST请求和PUT请求,都增加data参数;
………………………………
(1.2)为了方便服务器端接收客户端传过来的参数,这儿创建一个JavaBean:Person类;
……………………………………………………
(1.3)在服务器端的Controller类的POST和PUT方法中,尝试接收客户端发来的请求中的参数;
……………………………………………………
(1.4)启动Tomcat,观察效果:POST这个简单请求是可以的,PUT这个非简单请求不可以;
……………………………………………………
(1.5)原因分析;
● 最早的Spring MVC是为网页服务的;而默认情况下,网页在进行表单提交的时候,只支持GET和POST请求;所以,一开始的时候,Spring MVC只支持GET和POST请求,Spring MVC是不支持PUT和DELETE请求的;
● 但是,随着时间演进,Spring MVC也必须要考虑PUT请求和DELETE请求了;
● 自然,为了能够处理PUT和DELETE这种非简单请求,Spring MVC就需要新增一些新的、针对PUT和DELETE请求的、处理方式;
● 但是,出于各种原因,Spring MVC又不能把【新的、针对PUT和DELETE请求的、处理方式】,强加到服务器端的代码中;(目测是,出于尽量不要动老代码的目的吧)
● 所以,Spring MVC提出了一种折中方案:对于PUT和DELETE这种非简单请求,Spring MVC提供了一个额外的【表单内容过滤器】(FormContentFilter过滤器);通过这个过滤器来对PUT和DELETE请求进行额外处理;
(2.1)首先,需要在web.xml中配置FormContentFilter过滤器;
formContentFilter org.springframework.web.filter.FormContentFilter formContentFilter /* ……………………………………………………
(2.2)然后,服务器端的代码不用动;
……………………………………………………
(2.3)启动Tomcat,观察效果:此时Spring MVC也可以处理PUT请求了;
……………………………………………………
(2.4)分析;
● FormContentFilter过滤器,是对Spring MVC功能的扩展;
● 如果没有这个过滤器的话,Spring MVC是无法正常接收PUT和DELETE请求所传递的参数的;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)