2012-01-27 12 views
2

ログを記録するためにリクエストを処理するフィルタがあるので、どのセッションがどのリクエストパラメータで何時にページにヒットしたかを把握できます。素晴らしい仕事... jspからjspへの投稿、またはjspへの直接呼び出しの作成。しかし、そのリクエストを新しいJSPに転送するサーブレットにフォームがポストされると、どのJSPにリクエストが転送されたかを見ることができません。jspがRequestDispatcher.forwardコールから転送されたフィルタを特定する方法はありますか?

たとえば、ログイン・ページがあるとします。ログイン・ページはLoginServletに送信され、LoginServletはその要求をindex.jspまたはindex1.jspに転送します。 LoginServletがindex.jspまたはindex1.jspを返すかどうかをリクエストからどのように判断できますか?

これは、2.3サーブレット仕様を使用するJava 1.5環境です。

+0

可能重複[のRequestDispatcherから前方をサービスページフィルタから確認する方法?](http://stackoverflow.com/questions/9011106/how-to-a-filter-from-page-service-a-forward-from-requestdispatc) – Bozho

答えて

2

追加のチェックを行っても問題ない場合は、属性を使用して元のリクエストURIを設定/取得できます。 originalUri属性は、それは文句を言わないあなたの当面の問題を解決するのに役立ちますが、要求URI

//PageLogFilter 
public void doFilter(...) { 
     HttpServletRequest req = (HttpServletRequest) request; 
     if(req.getAttribute("originalUri") != null) { 
      String strOriginalUri = (String) req.getAttribute("originalUri"); 
      //set it back to null 
     req.setAttribute("originalUri", null); 
     } 
} 
+0

Thans Waqas、それは間違いなく動作します。私が書いたすべてのサーブレットにそのコードを追加することなくこれを行う方法は他にありませんか? – rpierce

0

としてこの値を考慮して、値を持っている場合、

//LoginServlet 
public void doFilter(...) { 
     HttpServletRequest oReq = (HttpServletRequest)request; 
     .. 
     ... 
     //save original request URI 
     oReq.setAttribute("originalUri", oReq.getRequestURI()); 
} 

とあなたのPageLogFilterチェックでサーブレット:あなたのLoginServletで は、属性を設定します2.4では、ディスパッチャの詳細な制御が追加されました。

これを使用すると、次のディスパッチャ要素を追加するようにフィルタを構成することができます。これにより、フィルタが転送にも適用されます。

<filter-mapping> 
     <filter-name>PageLogFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

次の記事では、より詳細にそれを説明し

http://www.ibm.com/developerworks/java/library/j-tomcat2/

関連する問題