JavaWeb过滤器与监听器

时间:2023-02-13 10:43:47

一、过滤器

1、当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器Filter完成

2、过滤器是以一种组件的形式绑定到WEB应用程序当中的,与其他的WEB应用程序组建不同的是,过滤器采用了“链”的方式进行处理的。

JavaWeb过滤器与监听器


实现过滤器

1、在Servlet中,如果要定义一个过滤器,则直接让一个类实现javax.servlet.Filter接口即可,此接口定义了三个操作方法:

public void init(FilterConfig filterConfig) throws ServletException

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException

public void destory()

注意:过滤器是在容器启动时自动加载的


FilterChain

FilterChain接口的主要作用是将用户的请求向下传递:

public void doFilter(ServletRequest request,ServletResponse response) throws IOException,ServletException


Filter的配置方式

方式一:

注解配置:

@WebFilter(filterName="",urlPattens={"/images/*"},initParams={

@WebInitParam(name="fruit",value="grape")

})

方式二:

web.xml中配置


过滤器的过滤路径配置类型

路径类型一:以目录的方式配置过滤路径:eg:/images/*

路径类型二:以资源类型的方式配置过滤路径:eg:*.jpg

但是,不能讲两种路径类型的配置结合起来,否则Web容器启动时发生错误


过滤器的应用

1、编码过滤

在过滤器中设置编码

2、登录验证

在过滤器中判断session属性是否为空,从而进行登录验证

过滤器的实例放在了GitHub上,有兴趣的可以打开链接https://github.com/AnsrFor/web.git下载查看


二、监听器

1、在Web总可以对application、session、request三种操作进行监听。

2、Servlet监听器分为三种:

(1)ServletContext监听器(容器监听器)

(2)HttpSession监听器 (会话监听器)

(3)ServletRequest监听器(请求监听器)


Servlet监听器的配置方式

方式一:

注解配置:@WebListener

方式二:

web.xml中配置:

<listener>

     <listener-class>监听路径</listener-class>

</listener>


ServletContext监听器

1、对Web容器状态(声明周期)的监听

实现ServletContextListener接口,重写相关方法

ServletContextEvent代表容器状态的事件类,其中包含getServletContext()方法

2、对ServletContext属性范围的监听

实现ServletContextAttributeListener接口,重写相关方法


HttpSession监听器(对会话进行监听)

1、对会话状态(生命周期)进行监听

实现HttpSessionListener接口,重写相关方法

2、对会话(HttpSession)属性范围进行监听

实现HttpSessionAttributeListener接口,重写相关方法

3、对会话(HttpSession)属性范围进行监听----使用HttpSessionBindingListener接口

实现HttpSessionBindingListener接口,重写相关方法

特别注意:使用HttpSessionBindingListener接口实现会话属性监听时,不用注册

实现了HttpSessionBindingListener接口的类,将该类的对象在会话范围绑定和解绑属性时,会自动调用valueBound(xxx)方法和valueUnBound(xxx)方法


ServletRequest监听器(请求监听器)

1、对请求状态(生命周期)进行监听

实现ServletRequestListener接口,重写相关方法

2、对请求范围的属性进行监听

实现ServletRequestAttributeListener接口,重写相关方法

已经将实例上传至GItHub,链接: https://github.com/AnsrFor/web.git