Tomcat按照JCP规范(JSP 2.3版本)的规定,从Tomcat 8.x版本开始,不再支持以HTTP PUT方式访问JSP页面,仅支持GET、POST、HEAD方式访问JSP页面。
在Tomcat自动产生的所访问JSP页面的java文件(X:\apache-tomcat-8.0.20\work\Catalina\localhost\<PROJECT_CONTEXT_PATH>\org\apache\jsp\[SUB_DIRECTORY\])中的 public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException 方法中可以看到如下代码:
final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}
上面的问题是在升级Struts版本并且使用Tomcat 8.x版本时发现的,开始以为是升级Struts版本的问题,由于产生问题的地方是在Ajax调用中(没有界面),只报了405错误码出来(后来在JS代码中输出响应内容到页面上就可以很清晰地看到问题所在了),结果搜索了一圈之后,才发现是Tomcat版本问题。已验证“使用Tomcat 6.x、7.x版本没有此问题”。
Since JSP 2.3 (Tomcat 8) only supported method for JSP is GET POST or HEAD
引用来自于: http://stackoverflow.com/questions/23886941/http-status-405-jsps-only-permit-get-post-or-head