2011-11-09 10 views
0

私はweb.xmlファイルにこのXMLを持っている:常にサイトのルートからのエラーの場所は?

<error-page> 
    <error-code>404</error-code> 
    <location>/error/html/404</location> 
</error-page> 

私は(存在しない)/indexerのようなページに行けば、その後、私はURL /error/html/404に適切にリダイレクトされます。 /index/nope(これも存在しない)のようなページに行くと、私は空白のページとなり、URLは/index/error/html/404となります。 locationタグに何を入れて、どこから始めても常に正しいURLを得ることができますか?

答えて

1

これは正常な動作ではありません。それは間違いなくコンテキストルートに相対的でなければなりません。私はServlet 3.0 specificationのページ154から引用:

サブ要素location要素は、Webアプリケーションのルートからの相対Web アプリケーション内のリソースの場所が含まれています。位置 の値には、先頭に‘/’が必要です。

問題は、使用するservletcontainerのバグが原因です。それを報告し、最新のバージョンにアップグレードしてください。または、恐らくを使用している/*のURLパターンに対して、FilterERRORディスパッチャでインターセプトしていない可能性があります。


コメントどおり更新、あなたはサーブレット3.0の互換性の容器であるのTomcat 7.0.16を、使用しています。 web.xmlは3.0ではなくServlet 2.5に準拠していると宣言されていますが、ローカルのTomcat 7.0.11、7.0.19、7.0.22の両方でweb.xmlバージョンの問題を再現することはできません。また、URLはブラウザのアドレスバーでは変更されません(変更される予定はありません)。元の(間違った)URLだけがブラウザのアドレスバーに残ります。これは、これが不良なフィルタか、あまりにも一般的なURLパターン/*にマップされ、間違ったURLにリダイレクトを送信しているフロントコントローラサーブレットによって引き起こされた可能性が高いと考えています。 webapp内のそのようなフィルタやサーブレットを確認し、それに応じてデバッグして修正してください。

+0

あなたが正しく言っていることを理解している場合:私のXMLはOKですが、問題はSpringサーブレットコンテナですか? – Nik

+0

SpringはDIフレームワークであり、サーブレットコンテナではありません。サーブレットコンテナは、Webアプリケーションをデプロイする場所です。例えば。 Tomcat 7.0.22、Glassfish 3.1.1、JBoss AS 6.0.0など。問題の詳細を明らかにする、および/または再現を試みたり、報告したりするために、servletcontainerの正確なバージョン/バージョンを知ることは役に立ちます適切に。あなたの 'web.xml'が宣言されているServlet APIのバージョンを知ることも助けになります。 – BalusC

+0

私はApache Tomcat 7.0.16を使用しています。私の 'web.xml'は' 'で始まります。 'xsi:schemaLocation'は2.5も示します。 – Nik

関連する問題