栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

405 JSP错误与Put方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

405 JSP错误与Put方法

问题是,当您从控制器方法返回视图名称时,Spring

DispatcherServlet
将转发给定视图,并保留原始
PUT
方法。

在尝试处理此问题时,Tomcat会拒绝它,理由是

PUT
可以将对JSP的解释为“用请求的内容替换服务器上的此JSP文件”。

确实,您希望控制器处理您的

PUT
请求,然后以形式转发给您的JSP
GET
。幸运的是,Servlet
3.0提供了一种仅在
FORWARD
调度程序上进行过滤的方法。

创建一个过滤器:

public class GetMethodConvertingFilter implements Filter {    @Override    public void init(FilterConfig config) throws ServletException {        // do nothing    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)        throws IOException, ServletException {        chain.doFilter(wrapRequest((HttpServletRequest) request), response);    }    @Override    public void destroy() {        // do nothing    }    private static HttpServletRequestWrapper wrapRequest(HttpServletRequest request) {        return new HttpServletRequestWrapper(request) { @Override public String getMethod() {     return "GET"; }        };    }}

然后将其连接到您的

web.xml

<filter>    <filter-name>getMethodConvertingFilter</filter-name>    <filter-class>my.GetMethodConvertingFilter</filter-class></filter><filter-mapping>    <filter-name>getMethodConvertingFilter</filter-name>    <url-pattern>/*</url-pattern>    <dispatcher>FORWARD</dispatcher></filter-mapping>

这会将请求

GET
仅转换为正向转发,而使通过其他调度程序的请求保持不变,因此
PUT
s将被控制器正常拦截。

我的理解(可能是错误的)是Tomcat 8.0.9引入了一个修补程序,该修补程序可以自动为

ERROR
调度程序自动完成-
请参阅链接问题中的答案。但是您没有使用容器的错误处理机制来呈现错误页面,而是使用Spring
MVC手动转发到视图,因此为什么需要这样做。我个人在Jetty9.2.7下遇到了此问题,该问题没有适当的修复,并且我将错误处理委托给了容器,因此我也在
<dispatcher>ERROR</dispatcher>
过滤器映射中进行了配置。

这一切似乎有些不可思议,但这是我发现成功跳过这种特定的RESTful-Spring-JSP-web-application-箍的唯一方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号