过滤器与监听器

时间:2023-02-13 10:48:50

一:过滤器

1. 用于限制用户访问某些资源时。

2. 它以一种组件的形式绑定到WEB应用程序中,过滤器采用了“链”的方式进行处理的。(客户端==>过滤器==>…过滤器…==>过滤器==>WEB资源)

实现过滤器:在Servlet中,要定义一个过滤器,直接让一个类实现javax.servlet.Filter接口即可。此接口定义了三个方法。

1.public void init(FilterConfig filterConfig) throws ServletException
2.public void doFilter(ServletRequest request,  ServletResponse response,FilterChain chain) throws IOException,ServletException 

3.public void destroy() 

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

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

 public void doFilter(ServletRequest request,    

ServletResponse response) throws IOException,ServletException 

Filter的配置方式

方式一:
    注解配置
    @WebFilter(filterName="",urlPatterns={"/images/*"},
     initParams={
@WebInitParam(name="fruit",value="grape")
     })
过滤器的过滤路径配置类型
路径类型一:以目录的方式配置过滤路径:eg: /images/*
 路径类型二:以资源类型的方式配置过滤路径: eg:  *.jpg
 但是,不能将两种路径类型的配置结合起来,否则Web容器启动时发生错误。
方式二:
    web.xml中配置

过滤器的应用:

1. 编码过滤:在过滤器中设置编码

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



二:监听器(listener)

Zai WEB中可以对 applicationsessionrequest,三种操作进行监听

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

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

3. ServletResquest监听器(请求监听器)

 Servlet监听器的配置方式

 方式一:
   注解配置: @WebListener


方式二:
       web.xml中配置:
   <listener>
      <listener-class>监听器路径</listener-class>

   </listener>

ServletContext监听器

1.对Web容器状态(生命周期)的监听
    实现ServletContextListener接口,覆写相关方法
补充:ServletContextEvent代表容器状态的事件类,里面有个getServletContext()方法


2.对ServletContext属性范围的监听
       实现ServletContextAttributeListener接口,覆写相关方法

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

 3.对会话(HttpSession)属性范围进行监听———使用HttpSessionBindingListener接口
 实现HttpSessionBindingListener接口,覆写相关方法
特别注意:使用HttpSessionBindingListener接口实现会话属性监听时,不用注册!
实现了HttpSessionBindingListener接口的类,将该类的对象在会话属性范围绑定和解绑属性时,会自动调用valueBound(xxx)方法和valueUnbound(xxx)方法。

 ServletRequest监听器(请求监听器)

 1.对请求状态(生命周期)进行监听
      实现ServletRequestListener接口,覆写相关方法
2.对请求范围的属性进行监听
      实现ServletRequestAttributeListener接口,覆写相关方法