が関連web.xml
部品は次のようになります。Tomcatのではないリダイレクト後にフィルタを適用する(転送?)のTomcat 7を使用して
<filter>
<filter-name>Filter</filter-name>
<filter-class>my.company.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<error-page>
<error-code>404</error-code>
<location>404.jsp</location>
</error-page>
Filter
のコードは次のようになります
(簡体字):
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
System.out.println("Filter start");
chain.doFilter(request, response);
System.out.println("Filter finish");
}
404.jspは次のようになります(簡略化されています):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
System.out.println("404 here");
%>
Tomcatは存在しないページが正しくFilter
実行存在しないことを考え出すされている間、他の言葉で、だから、
Filter start
Filter finish
404 here
:存在しないページ(/foobar
など)を開くの出力TDOUTこれです。しかし、その直後に404ページをレンダリングしている間は、Filter
にラップされていません。それ以外の場合は、404ページが正常にレンダリングされ、Filter
が他のすべての(転送されていない)JSPに正しく適用されます。
404.jspに直接アクセスすると、Filter
が正しく適用されます。 Filter
が最初に呼び出されたJSP(不足しているJSP)にアクセスし、404.jspだけが評価されますが、Filter
にはラップされません。
フィルタを404.jspにラップさせるにはどうすればよいですか?
あなたのフィルタコードでは、コンテナがあなたの404.jspを呼び出すように404のステータスを返す必要があります。 –
はい、見つからないものを要求する必要がありました。この特定の場合、/ *へのマッピングは、すべてがフィルターによって傍受されることを意味します。現在のところ、フィルタによって200が返され、404.jspがトリガされません。 –
Ops、私はあなたの質問を誤解しました...あなたの言うTomcatは404.jspを実行しましたか?だから問題は何ですか? –