如何重定向到 Servlet 过滤器中的当前页面?
Posted
技术标签:
【中文标题】如何重定向到 Servlet 过滤器中的当前页面?【英文标题】:How do I redirect to the current page in Servlet Filter? 【发布时间】:2010-12-04 14:38:33 【问题描述】:我有一个页面说:/myapp/test.jsp?queryString=Y。 过滤器需要重定向到当前页面。 它应该转到 /myapp/test.jsp (没有查询字符串)。 下面似乎将它带到了上下文根目录:/myapp。 我在 WAS6.1 中运行。
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
HttpServletRequest httpReq = (HttpServletRequest) req;
HttpServletResponse httpResp = (HttpServletResponse) resp;
boolean blnNeedToRedirect = true;
if (blnNeedToRedirect)
httpResp.sendRedirect(".");
return;
chain.doFilter(req, resp);
【问题讨论】:
【参考方案1】:httpReq.getRequestURI() 为您提供 servlet 路径,它应该如下工作。 为了重定向到同一页面,运行下一个命令:
((HttpServletResponse) httpResp).sendRedirect(httpResp.encodeRedirectURL(httpReq.getRequestURI()));
另一个选项是添加带有状态码 302 的 Header Location
,如下所示:
((HttpServletResponse) httpResp).setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
((HttpServletResponse) httpResp).addHeader("Location", request.getRequestURL().toString());
【讨论】:
“请求页面”不也是“同一页面”吗?请举例说明。【参考方案2】:使用HttpServletrequest.getRequestURI。这应该适合你:
httpResp.sendRedirect(httpReq.getRequestURI());
【讨论】:
以上是关于如何重定向到 Servlet 过滤器中的当前页面?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 java Servlet 过滤器中更改传入 URL 并将请求重定向到新 URL [重复]
如何重定向到 html 页面并将变量传递给 Java 中的该页面?
Servlet过滤器重定向:如何在chain.doFilter(request,resp)之后重定向;