關(guān)于過濾器和重定向請求執(zhí)行順序的問題
FirstFilter.java @Override public?void?doFilter(ServletRequest?arg0,?ServletResponse?arg1,?FilterChain?arg2) throws?IOException,?ServletException?{ System.out.println("Start.....doFilter----FirstFilter"); //?arg2.doFilter(arg0,?arg1); HttpServletRequest?req?=?(HttpServletRequest)?arg0; HttpServletResponse?response2?=?(HttpServletResponse)?arg1; //?重定向 response2.sendRedirect(req.getContextPath()?+?"/main.jsp"); System.out.println("End.....doFilter----FirstFilter"); }
web.xml
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>com.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/main.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
index.jsp
一個打印輸出語句
<%
System.out.println("index.jsp");
%>
main.jsp
一個打印輸出語句
<%
System.out.println("main.jsp");
%>
訪問工程下面的index.jsp,控制臺輸出的結(jié)果是
Start.....doFilter----FirstFilter
End.....doFilter----FirstFilter
main.jsp
為什么不是先
main.jsp
后輸出
End.....doFilter----FirstFilter
2016-08-03
你可以把a(bǔ)rg2.doFilter(arg0,?arg1);的注釋給去掉,然后你就會看到
2016-08-03
因為你main.jsp對應(yīng)的過濾器配置的是<dispatcher>FORWARD</dispatcher>,也就是說在執(zhí)行main.jsp的時候并沒有觸發(fā)過濾器,所以說Start.....doFilter----FirstFilter和End.....doFilter----FirstFilter只是執(zhí)行index.jsp觸發(fā)的,執(zhí)行完index.jsp的過濾器之后在加載main.jsp頁面,所以最后才打印出main.jsp。這是我的理解,有可能有錯誤,還請大家多指點