2011-09-19 12 views
10

web.xmlで次のように404エラーをサーブレットにリダイレクトしています。web.xml 404サーブレットにリダイレクトすると、元のURIを取得する方法は?

<error-page> 
    <error-code>404</error-code> 
    <location>/notFound.do</location> 
</error-page> 

私は要求が行くようにしようとしていた場所をログインしたいのですが、私はリファラヘッダからそれが届かない:request.getHeaderを示している(「リファラ」)を

「NULL」私がちょうど古いランダムな存在しないページにヒットした場合。

また、request.getRequestURL()/ request.getRequestURI()は、最終的な着陸サーブレット情報(つまり、/ notFound)を表示するだけです。

リクエストされた「悪い」ページURLを取得する方法はありますか?

答えて

18

はい、javax.servlet.forward.request_uriという名前のリクエスト属性として利用できます。これはRequestDispatcher#FORWARD_REQUEST_URIです。エラーページの位置は、単純なRequestDispatcher#forward()呼び出しによって呼び出されます。

サーブレットで次のように、あなたはそれを得ることができます。

String originalUri = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI); 

またはELで:

<p>Original URI: ${requestScope['javax.servlet.forward.request_uri']}</p> 
+0

それは(のjavax.servlet.RequestDispatcherを提供)、サーブレット-api.jarのですで私のTomcat 7.0.19のインストールには、これらの静的フィールドはありません。 'forward'と 'include'メソッドのみが使用されます。 しかし、文字列を直接入力するだけで動作させることができます。たとえば、次のような作業です。 request.getAttribute( "javax.servlet.forward.request_uri") ご協力いただきありがとうございます! –

+1

これは間違いなくそこにあります(javadocsを見るには私の答えの中のリンクをクリックしてください)。この問題は、あなたのプロジェクトをServlet 2.4プロジェクト以前のものとして扱うようにIDEを設定したことを示唆しています。あるいは、他の場所に置かれている緩やかで古いバージョンの 'servlet-api.jar'ファイルにコンパイル時のクラスパスを頼っています。 Eclipseを使用していますか?もしそうなら、これを読んでください:http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 – BalusC

+0

奇妙な。私はservlet-api.jarを開いて、RequestDispatcher.classバイトコードを見て、そこにFORWARD_REQUEST_URI(他の定数と同様に)が表示されています。しかし、Eclipse内で宣言を開くことは、2つの方法を示しているだけです。それらは両方ともディスク上の同じ瓶に向けられています... –

関連する問題