首先,我會在處理我的問題之前向您介紹我的測試用例。 有我的基本Maven的web應用的幾個組成部分:JSF PrettyFaces導致過濾器鏈'破壞'
- page.xhtml:用於生成我的請求/應答(啓動過濾)
- 漂亮的面孔:基於需求中重新定義的URL,我客戶
- FirstFilter:要漂亮的面孔之前執行(在這個體育場用於測試目的)
- ThirdFilter:要漂亮的面孔後執行(在這個體育場用於測試目的)
- web.xml中:定義行爲我的完整過濾器鏈
我會分享重要組件的代碼。
漂亮-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>
現狀
調用本地主機:8080/page.xhtml(並因此不是激活漂亮的面孔重定向)
INFO: FirstFilter, request: http://localhost:8080/page.xhtml
INFO: ThirdFilter, request: http://localhost:8080/page.xhtml
INFO: ThirdFilter, response
INFO: FirstFilter, response
調用本地主機:8080 /頁面(並因此激活漂亮臉部重定向)
INFO: FirstFilter, request: http://localhost:8080/page
INFO: FirstFilter, response
問題
是什麼原因造成這種情況在我的鏈將是不完整?它不會被切斷,因爲我仍然在FirstFilter上得到我的迴應。它似乎沒有達到ThirdFilter。
我的web.xml
有什麼問題,我是否缺少dispatcher
?
在此先感謝。
精湛的答案。我已經認爲我的調度員是錯誤的,但我確實知道很多關於實際處理請求的方式。我正在讀這些調度員,但你的解釋更清楚。感謝Chkal! – Aquillo
好的問題,甚至更好的答案=好的線程 –