此次要学习的是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