SpringMVC报错:HTTP Status 405 - JSPs only permit GET POST or HEAD
错误描述
如果项目是运行在 Tomcat 8 及以上版本,浏览器发出的 PUT 请求和 DELETE 请求可以被页面控制器(Controller)成功接收到,但是返回 JSP 页面则会报 HTTP 405 的错误提示:"消息 JSP 只允许 GET、POST 或 HEAD。Jasper 还允许OPTIONS"。
原因分析
原因是 Tomcat 按照 JCP 规范(JSP2.3版本)的规定,从 Tomcat8.x 版本开始,不再支持以 HTTP PUT 方式访问 JSP 页面,仅支持 GET、POST 和 HEAD 方式。
解决方案
1、tomcat换到7.0以及以下版本
切换 tomcat 版本显然并不好,不建议采用
2、在方法上标注 @ResponseBody
@ResponseBody 注解通常是用来返回 JSON 数据的,这样就不会跳转视图的 JSP 页面了。如果你确实是要返回数据,这样写当然没有问题,这也是比较规范的一种写法。
3、请求重定向给一个 Controller的方法,再返回 jsp 页面
既然不能直接跳转到 jsp 页面,我们就可以将请求重定向给一个 controller 方法,再通过该方法跳转到 jsp 页面。