Servlets javax.servlet.HttpServletResponse.sendRedirect未重定向

Servlets javax.servlet.HttpServletResponse.sendRedirect未重定向,servlets,redirect,response,servlet-filters,Servlets,Redirect,Response,Servlet Filters,我有一个javax.servlet.Filter类,我想重定向URL。问题是当我打电话的时候 httpResponse.sendRedirect("http://myurl/login.jsp") return; 它不会重定向到那里。我可以从firebug网络控制台看到请求与正确的url匹配,但是页面没有改变,当前地址栏url保持不变 请求看起来有效 Request URL:http://myurl/login.jsp Request Method:GET Status Code:200 OK

我有一个javax.servlet.Filter类,我想重定向URL。问题是当我打电话的时候

httpResponse.sendRedirect("http://myurl/login.jsp")
return;
它不会重定向到那里。我可以从firebug网络控制台看到请求与正确的url匹配,但是页面没有改变,当前地址栏url保持不变

请求看起来有效

Request URL:http://myurl/login.jsp
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:localhost:7001
Referer:http://myurl/index.jsp
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
X-Requested-With:XMLHttpRequest
Response Headersview source
Content-Language:en-US
Content-Length:764
Content-Type:text/html; charset=ISO-8859-1
Date:Fri, 27 Apr 2012 16:49:55 GMT
X-Powered-By:Servlet/3.0 JSP/2.2
响应包含login.jsp的内容

<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
...
</body>
</html>

这根本不起作用,正如我在Firebug中看到的那样,它请求我当前所在的url。

Donot在发送重定向时调用
chain.doFilter()
。否则,筛选器仍将继续初始URL上的请求,并且每次尝试重定向时,服务器日志中都会出现
IllegalStateException:response ready committed
异常


另请参阅此相关答案:

初始化响应流(例如response.getWriter())后,重定向不起作用:

对我来说,以下代码失败:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    log.info("incoming request :{}", request.getRequestURL());
    boolean failed;
    try {
         // do something
        failed = processGetRequest(request, response.getWriter());
    } catch (Exception e) {
        log.error("Error during collecting resource data -> redirect to root");
        failed = true;
    }

    if (failed) {
        response.setHeader("Location", "http://www.somewhere.de" );
        // 301 Moved Permanently
        // 307 Temporary Redirect
        response.setStatus( HttpServletResponse.SC_MOVED_PERMANENTLY);

    } else {
        response.setContentType("text/html;charset=UTF-8");
        response.setStatus(HttpServletResponse.SC_OK);
    }
}

但是如果我在一个临时缓冲区(replace processGetRequest())中准备数据并稍后打开writer,它就会工作….

我正在重定向CometD的请求,而CometD实际上不会将我发送到任何地方。必须对GET请求执行重定向。

症状表明情况并非如此。你是否得到了提到的例外?这个请求是普通请求的ajax请求吗?我没有任何异常。这不是普通请求的ajax请求。请编辑您的问题以包含请求的所有响应标题。
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    log.info("incoming request :{}", request.getRequestURL());
    boolean failed;
    try {
         // do something
        failed = processGetRequest(request, response.getWriter());
    } catch (Exception e) {
        log.error("Error during collecting resource data -> redirect to root");
        failed = true;
    }

    if (failed) {
        response.setHeader("Location", "http://www.somewhere.de" );
        // 301 Moved Permanently
        // 307 Temporary Redirect
        response.setStatus( HttpServletResponse.SC_MOVED_PERMANENTLY);

    } else {
        response.setContentType("text/html;charset=UTF-8");
        response.setStatus(HttpServletResponse.SC_OK);
    }
}