java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JavaWeb过滤器和监听器

Java Web开发中过滤器和监听器使用详解

作者:游坦之

这篇文章主要为大家详细介绍了Java中的过滤器Filter和监听器Listener的使用以及二者的区别,文中的示例代码讲解详细,需要的可以参考一下

1 Filter

1.1 Filter简介

1.2 Filter的快速入门

Filter和Servlet很相像,步骤也是一样的。

1.2.1 创建Filter类

注意:此处导入的Filter 是Javax Servlet包下的

@WebFilter("/index.jsp")
public class DemoFilter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("1.init.......");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("2.放行前.....");
        chain.doFilter(request,response);
        System.out.println("4.放行后.....");
    }
    @Override
    public void destroy() {
        System.out.println("5.destory....");
    }
}

1.2.2 访问index.jsp

由上图分析所致,当我们访问index.jsp的时候,会调用Filter,那么我们用代码检验一下上面的流程图。

**按照流程图,正确的输出应该是1、2、3、4、5,**访问一下index.jsp

<html>
<body>
<h2>Hello World!</h2>
<%
    System.out.println("3. 我是index.jsp ......");
%>
</body>
</html>

结果证明流程图是正确的!

1、放行后访问对应资源,资源访问完成后,还会回到Filter吗?

2、如果回到Filter中,是重头执行还是执行放行后的逻辑呢?

放行后的逻辑

1.3 Filter的拦截路径的配置

配置在**@WebFilter(“”)**中,主要有以下四类

1.4 过滤器链

1.4.1 过滤器链简介

一个web路径,可以配置多个过滤器,这多个过滤器就被称为过滤器链。

流程图如下:

见图知意:

当web应用有一个A一个B过滤器组成的过滤器链时,A放行后,会来到B过滤器。只有两个过滤器都放行,才会访问到相应的资源。随后,按照怎么来的,怎么返回的方式,执行B、A的放行后逻辑

注意:

为什么是按照A、B,而不是B、A呢?

你以为我瞎说的?其实不然,**排序方式即为按照字符串排序,**先后执行。就是字符串排序小的限制性。

1.4.2 过滤器链的例子

由上面的流程图可知,浏览器会按照DemoFilter01 DemoFilter02 的方式 访问过滤器链,所以我们配置了两个过滤器类。

@WebFilter("/index.jsp")
public class DemoFilter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("DemoFilter01 init.......");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("1.DemoFilter01 doFilter.....");
        chain.doFilter(request,response);
        System.out.println("5.DemoFilter01 doFilter end.....");
    }
    @Override
    public void destroy() {
        System.out.println("DemoFilter01 destory....");
    }
}
@WebFilter("/index.jsp")
public class DemoFilter02 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("DemoFilter02 init......");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("2.DemoFilter02 doFilter....");
        chain.doFilter(request,response);
        System.out.println("4.DemoFilter02 doFilter end....");
    }
    @Override
    public void destroy() {
        System.out.println("DemoFilter02 destory.....");
    }
}
<html>
<body>
<h2>Hello World!</h2>
<%
    System.out.println("3. index.jsp ......");
%>
</body>
</html>

效果图如下:

2 Listener

2.1 概念

2.2 监听器的使用

@WebListener
public class DemoListener01 implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized....");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed....");
    }
}

当启动Tomcat的时候,会自动调用!

ntln(“contextInitialized…”);

}

@Override
public void contextDestroyed(ServletContextEvent sce) {
    System.out.println("contextDestroyed....");
}

}

当启动Tomcat的时候,会自动调用!

![image-20220916172910166](https://img-blog.csdnimg.cn/img_convert/7d4ee33099f9d23fddadcfc5140ab6f4.png)

到此这篇关于Java Web开发中过滤器和监听器使用详解的文章就介绍到这了,更多相关JavaWeb过滤器和监听器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文