javaee中过滤器的理解

·为什么需要过滤器
我们想要把多个Servlet里面冗余的代码提取出来,现在是比较难以实现的
使用过滤器在servlet运行之前插入代码

·面向切面编程
AOP
就是在不修改原有代码的前提下
使用切面想向代码中增加、维护功能的编程理念

过滤器就是可以在请求发送之后,还未到请求目的地之前插入运运行代码的机制
下面通过一个对servlet运行计时的案例来了解过滤器的使用

首先创建过滤器
实现一个接口代码如下

public class TimerFilter implements Filter {



    public TimerFilter() {
        super();
        System.out.println("实例化了过滤器");
    }

    @Override
    public void destroy() {
    System.out.println("过滤器被销毁");
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        long start = System.currentTimeMillis();
        System.out.println("计时完毕");

        // 请求继续
        arg2.doFilter(request, response);

        // 请求完毕之后才运行到这里
        long end = System.currentTimeMillis();

        System.out.println("用时:" + (end - start) + "毫秒");

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        System.out.println("过滤器被创建");

    }

}

在we.xml中的配置文件

<filter>
    <filter-name>Timer</filter-name>
    <filter-class>com.filtertest.servlet.TimerFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>Timer</filter-name>
    <url-pattern>/FilterTestServlet</url-pattern>
    </filter-mapping>

过滤器可以监听多个servlet的状态的,只要在

  <url-pattern>/FilterTestServlet</url-pattern>

在这里配置servlet的路径就可以了
我这里写的写的一个web请求servlet到返回结果用了多长时间
过滤器在tamcat服务器启动时就创建成功了,比servlet的优先级高一些。。

猜你喜欢

转载自blog.csdn.net/qq_29729601/article/details/71430165