此次要學習的是filter。紅薯提供我又進行了些更改的hellofilter代碼以下:java
package demo; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.core.ActionHandler; import com.core.Config; import com.core.Handler; public class HelloFilter implements Filter { private Handler handler; @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("Filter 初始化"); Config.cns.add("Blog"); handler = new ActionHandler(); } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; System.out.println("攔截 URI="+request.getRequestURI()); String coname = request.getParameter("c"); System.out.println(request.getParameter("c") + Config.cns.contains(request.getParameter("c"))); if(Config.cns.contains(coname)) { handler.handle((HttpServletResponse)res, request); } else { chain.doFilter(req, res); } } @Override public void destroy() { System.out.println("Filter 結束"); } }
 web
HelloFilter實現了Filter接口,Filter定義了三個方法:tomcat
當咱們啓動tomcat後客戶端還未訪問的時候,控制檯便輸出瞭如下信息框架
控制檯輸出了」Filter 初始化」,即tomcat會自動初始化咱們在web.xml註冊的filter,即調用了init()方法。ide
當客戶端訪問 http://localhost:8080/hello.view 之後,控制檯輸出:學習
也就是說訪問了一次,tomcat在執行某個servlet前會調用doFilter,因此咱們須要將filter交給框架指定的filter類(試了試osc上很熱門的jfinal,很不錯),這樣整個工程就會交給框架託管了。doFilter有三個參數,ServletRequest、ServletResponse和FilterChain。.net
ServletRequest、ServletResponse這兩個參數想來確定就是傳給servlet那個public的service方法了。至於FilterChain,字面的意思就是過濾鏈了,若是咱們在web.xml註冊了多個Filter的話,就會帶着ServletRequest、ServletResponse去執行下個Filter的dofilter方法。在這個案例,因爲咱們只有一個Filter,因此就去執行具體的servlet方法了。日誌
Filter能夠攔截下http請求,咱們能夠在這裏能夠作些額外的工做,好比判斷用戶是否登錄啊等等,固然我也沒有具體作過開發,沒什麼發言權,但願有人給點指點,讓我理解得更好點。code
至於destory方法,和init方法同樣也是由web容器調用的,當服務結束的時候調用,但是每次我關閉tomcat的時候,因爲小黑窗關得太快,我都看不到啊,怎麼寫進日誌裏呢,求大神指點。xml