0

URL をリダイレクトしたい javax.servlet.Filter クラスがあります。問題は、私が電話するときです

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>

使ってみました

request.getRequestDispatcher("/login.jsp").forward(request, response);

Firebug で見られるように、それは私が現在使用している URL を要求します。

4

3 に答える 3

1

リダイレクトを送信するときに呼び出さないでください。chain.doFilter()そうしないと、フィルタは依然として最初の URL でリクエストを続行し、IllegalStateException: response already committedリダイレクトを試行するたびにサーバー ログに例外が散らばってしまいます。

この関連する回答も参照してください: java.lang.IllegalStateException: Cannot (forward | sendRedirect | create session) after response has been commit

于 2012-04-27T16:27:14.077 に答える
0

応答ストリーム (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);
    }
}

しかし、一時バッファーにデータを準備し (processGetRequest() を置き換え)、後でライターを開くと、動作します.....

于 2012-05-22T17:27:40.307 に答える
0

私は CometD からのリクエストをリダイレクトしていましたが、実際にはどこにも送信されません。リダイレクトは GET リクエストで行う必要があります。

于 2012-05-23T18:16:17.510 に答える