SpringMVC HTTP Status 405 - JSPs only permit GET POST or HEAD
2017-03-24 15:39
716 查看
在运用SpringMVC_RequestMapping_HiddenHttpMethodFilter
过滤器时,如果你的web项目是运行在Tomcat
8下,你会发现被过滤成DELETE和PUT请求,到达控制器后,返回时(forward)会报HTTP 405的错误提示
HTTP Status 405 - Request method 'DELETE' not supported
或
HTTP Status 405 - JSPs only permit GET POST or HEAD
有三种解决方案:
(一)将 Tomcat 8 改为 Tomcat 7,在Tomcat 7 下运行是正常的
(二)将请求转发(forward)改为请求重定向(redirect)
(三)自己手动写一个Filter来包装HttpRequest中的getMethod()方法
下面介绍一下第(三)种做法,也就是自己写一个Filter来包装从服务器发回来的HttpRequest请求:
大致说一下流程,
1. 在第1步中,客户端发送请求至服务器,这时如果发送的是POST请求且带有以_method为名的参数会被Spring的HiddenHttpMethodFilter给拦截。
2. HiddenHttpMethodFilter内有一个静态内部类通过继承HttpServletRequestWrapper类并重写getMethod()方法,将该方法返回值设为_method隐藏域的值。
3. HiddenHttpMethodFilter在包装好Request后,将请求发往服务器的控制器中对应的方法处理器,这时的请求变成了图中的 3、WrapperRequest by SpringFilter
4. 服务器处理完请求后,产生了一个forward请求,产生相应的请求处理信息发往客户端,注意这时的request的getMethod()方法仍然是HiddenHttpMethodFilter包装过的
5. 我们需要在服务器的响应请求到达客户端前进行拦截,这也是最关键的一步,通过自定义过滤器MyHttpMethodFilter进一步包装请求,将getMethod()方法返回值改成POST或GET即可
6. 在web.xml中配置该filter,注意dispatcher结点值必须为FORWARD。由于字数超限,暂时说到这。。。
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
(源自:https://my.oschina.net/kolbe/blog/509810)
4000
过滤器时,如果你的web项目是运行在Tomcat
8下,你会发现被过滤成DELETE和PUT请求,到达控制器后,返回时(forward)会报HTTP 405的错误提示
HTTP Status 405 - Request method 'DELETE' not supported
或
HTTP Status 405 - JSPs only permit GET POST or HEAD
有三种解决方案:
(一)将 Tomcat 8 改为 Tomcat 7,在Tomcat 7 下运行是正常的
(二)将请求转发(forward)改为请求重定向(redirect)
(三)自己手动写一个Filter来包装HttpRequest中的getMethod()方法
下面介绍一下第(三)种做法,也就是自己写一个Filter来包装从服务器发回来的HttpRequest请求:
大致说一下流程,
1. 在第1步中,客户端发送请求至服务器,这时如果发送的是POST请求且带有以_method为名的参数会被Spring的HiddenHttpMethodFilter给拦截。
2. HiddenHttpMethodFilter内有一个静态内部类通过继承HttpServletRequestWrapper类并重写getMethod()方法,将该方法返回值设为_method隐藏域的值。
3. HiddenHttpMethodFilter在包装好Request后,将请求发往服务器的控制器中对应的方法处理器,这时的请求变成了图中的 3、WrapperRequest by SpringFilter
4. 服务器处理完请求后,产生了一个forward请求,产生相应的请求处理信息发往客户端,注意这时的request的getMethod()方法仍然是HiddenHttpMethodFilter包装过的
5. 我们需要在服务器的响应请求到达客户端前进行拦截,这也是最关键的一步,通过自定义过滤器MyHttpMethodFilter进一步包装请求,将getMethod()方法返回值改成POST或GET即可
6. 在web.xml中配置该filter,注意dispatcher结点值必须为FORWARD。由于字数超限,暂时说到这。。。
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
(源自:https://my.oschina.net/kolbe/blog/509810)
4000
相关文章推荐
- 405, HTTP Status 405 - JSPs only permit GET POST or HEAD.。
- sringMVC 转发到jsp时出现405错误:JSPs only permit GET POST or HEAD
- SpringMVC: HTTP Status 405 - JSPs only permit GET POST or HEAD问题的解决办法。
- SpringMVC: HTTP Status 405 - JSPs only permit GET POST or HEAD
- HTTP Status 405 - JSPs only permit GET POST or HEAD
- springMVC:HTTP Status 405 - JSPs only permit GET POST or HEAD问题
- SpringMVC: 处理PUT和DELETE请求时报错:HTTP Status 405 - JSPs only permit GET POST or HEAD.
- 关于SpringMVC的rest的一个问题: HTTP Status 405 - JSPs only permit GET POST or HEAD.。
- springMVC提交更新:e JSPs only permit GET POST or HEAD
- JSPs only permit GET POST or HEAD的解决方案(REST风格)
- spring mvc 4 rest 错误:JSPs only permit GET POST or HEAD
- JSPs only permit GET POST or HEAD的解决方案(REST风格)
- HTTP请求方法及响应码详解(http get post head)
- Linux 下curl模拟Http 的get or post请求。
- robotics toolbox 安装错误Second argument must be either "get" or "post“
- HTTP协议请求方式: 中GET、POST和HEAD的介绍
- Apache Tomcat哈希碰撞拒绝服务漏洞解决办法 or More than the maximum number of request parameters (GET plus POST)
- http中get、post、head对比
- HTTP协议中PUT/GET/POST/HEAD等介绍
- HTTP协议中POST、GET、HEAD、PUT等请求方法