由于JSP 2.3(Tomcat 8)仅支持JSP的方法是GET POST或HEAD:
https://jcp.org/aboutJava/communityprocess/maintenance/jsr245/245-MR3.html http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java?view=diff&r1=1497877&r2=1497878&pathrev=1497878
但是,我想,这是一个很大的不兼容的变化,例如,异常处理程序用于转发到JSP以呈现异常和iso JSP视图,因为JSP 2.3响应是:
Method Not Allowed
HTTP Status 405 - JSPs only permit GET POST or HEAD
description The specified HTTP method is not allowed for the requested resource.
Apache Tomcat/8.0.3
如果我们在异常情况下使用REST和Spring HandlerExceptionResolver,我们肯定会碰到这个问题。是否有解决此问题的方法(iso更改http方法类型)?
答案 0 :(得分:3)
抱歉,目前没有解决方法(目前)。我对EG的建议是处理方法是可配置的。该建议遭到拒绝。我建议你提出这个问题,因为它是一个很好的论据,可以在每个JSP(或JSP组)的基础上配置支持的方法。
与此同时,我将根据您为此提出的错误,使用某种形式的Tomcat特定配置来查看此可配置:https://issues.apache.org/bugzilla/show_bug.cgi?id=56568
更新:从Tomcat 8.0.9开始,当使用JSP生成错误页面时,将允许任何HTTP方法。
答案 1 :(得分:0)
正如@MarkThomas指出的那样,如果您将JSP页面声明为HTTP
,则可以发出任何errorPage
请求。
如果你不想这样做,那么还有一个选择
1.创建一个过滤器(如果您直接想要调用JSP
页面)或创建一个servlet(最终将调用JSP
页面)
2.在doFilter()或servlet doPut()/ doDelete()的情况下执行此操作
在此处,我将在request
为ServletRequest
对象的过滤器中执行此操作
我使用HttpRequestWrapper
用假请求包装原始请求并告诉它返回 POST 以查找DELETE
和PUT
请求{{1认为它是一个JSP
请求并且页面被执行,只有缺点是你不能告诉原始请求是什么;如果您使用原始方法名称设置属性(例如此
POST