如何重定向到 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 过滤器中的当前页面?的主要内容,如果未能解决你的问题,请参考以下文章

Servlet过滤器登录重定向无限循环[重复]

如何在 java Servlet 过滤器中更改传入 URL 并将请求重定向到新 URL [重复]

如何重定向到 html 页面并将变量传递给 Java 中的该页面?

Servlet过滤器重定向:如何在chain.doFilter(request,resp)之后重定向;

如何在从 servlet 过滤器执行 HTTP 重定向时保留请求正文

如何使用 PrimeFaces 在 JSF 上重定向?