まず、質問を処理する前に、テストケースを紹介します。私の基本的なMavenWebアプリケーションにはいくつかのコンポーネントがあります。
- page.xhtml:リクエスト/リプライを生成するために使用されます(フィルタリングを開始するため)
- Pretty Faces:クライアントのニーズに基づいてURLを再定義するために使用されます
- FirstFilter:Pretty Facesの前に実行されます(テスト目的でこのスタジアムで)
- ThirdFilter:Pretty Facesの後に実行されます(テスト目的でこのスタジアムで)
- web.xml:完全なフィルターチェーンの動作を定義するには
重要なコンポーネントのコードを共有します。
pretty-config.xml
<url-mapping id="page">
<pattern value="/page" />
<view-id value="/page.xhtml" />
</url-mapping>
FirstFilter.java
@WebFilter
public class FirstFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("FirstFilter, request: " +
((HttpServletRequest)request).getRequestURL().toString());
chain.doFilter(request, response);
System.out.println("FirstFilter, response");
}
// override init and destroy
}
ThirdFilter.java
@WebFilter
public class ThirdFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("ThirdFilter, request: " +
((HttpServletRequest)request).getRequestURL().toString());
chain.doFilter(request, response);
System.out.println("ThirdFilter, response");
}
// override init and destroy
}
web.xml
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>nl.mhoogeveen.nl.rootapplication.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>testingapplications.filterchaining.PrettyFilter</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
<filter>
<filter-name>ThirdFilter</filter-name>
<filter-class>testingapplications.filterchaining.ThirdFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ThirdFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
状況
localhost:8080 / page.xhtmlを呼び出します(したがって、Pretty Facesリダイレクトをアクティブ化しません)
INFO: FirstFilter, request: http://localhost:8080/page.xhtml
INFO: ThirdFilter, request: http://localhost:8080/page.xhtml
INFO: ThirdFilter, response
INFO: FirstFilter, response
localhost:8080 / pageを呼び出します(したがって、Pretty Facesリダイレクトをアクティブにします)
INFO: FirstFilter, request: http://localhost:8080/page
INFO: FirstFilter, response
質問
私のチェーンが不完全になるこの状況の原因は何ですか?FirstFilterで応答が得られるため、切断されません。それはThirdFilterに到達していないようです。
私に何か問題がありますか、私web.xml
は行方不明dispatcher
ですか?
前もって感謝します。