2012-04-27 10 views
0

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

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 

応答は、私はFirebugの中で見るように、それは要求し、私は

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

を使用してみましたが、それだけでは動作しません

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

のlogin.jspの内容が含まれています私が現在行っているURL。

答えて

0

私は実際に私をどこにでも送るわけではないCometDからのリクエストをリダイレクトします。リダイレクトはGETリクエストで実行する必要があります。

1

Do chain.doFilter()リダイレクトを送信したとき。そうしないと、フィルタは最初のURLで依頼を続行し、リダイレクトしようとするたびにサーバーログにはIllegalStateException: response already committedの例外が散在します。

も、この関連の回答を参照してください:応答ストリームを初期化した後java.lang.IllegalStateException: Cannot (forward | sendRedirect | create session) after response has been committed

+0

リダイレクトコールの直後に戻ります。 – sworded

+0

症状はそうでないことを示します。あなたは言及された例外を得るかどうか?要求は通常の要求のajax要求ですか? – BalusC

+0

例外はありません。これは、通常のリクエストのajaxリクエストではありません。 – sworded

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()を置き換えて)のデータを準備し、後でそれを動作させる場合は..... .....

関連する問題