过滤器(Filter)的简介

**过滤器的作用:** 过滤器可以对所有的请求或者响应做拦截操作.

1:以常规的方式调用资源(Servlet/JSP);

2:利用修改过的请求信息调用资源;

3:调用资源之后,但在响应到客户端之前,对响应做出修改;

4:阻止当前资源调用,代之转到其他资源.

### Filter的开发和使用

1:自定义一个类(XxxFilter,Xxx表示功能名),实现于javax.servlet.Filter接口.  

2:在wed.xml里面配置拦截器

<filter>          
 
<filter-name>XxxFilter</filter-name>         
 
  <filter-class>XxxFilter类的全限定名</filter-class>
 
</filter>     
 
 <filter-mapping>          
 
<filter-name>XxxFilter</filter-name>          
 
<!--表示:当前Filter只对哪些资源做过滤/拦截操作,只对hello.jsp做拦截-->          
 
<url-pattern>/hello.jsp</url-pattern>      
 
</filter-mapping>

Filter的生命周期方法

void init(FilterConfig config): 初始化方法 
 
(2):void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):执行过滤的方法(每一次请求都会执行过滤) 
 
(3):void destroy():销毁方法 执行的流程:   在启动Tomcat服务器的时候,就会执行构造器和init方法.     构造器--->init方法   -----> (  doFilter方法  )N次------->destroy方法
  1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行

  2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行

  3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行

  4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

  5. 监听器分类

    1.按监听对象分类

    (1)用于监听应用程序对象(ServletContext)

    (2)用于监听用户会话对象(HttpSession)

    (3)用于监听请求消息对象(ServletRequest)

    2.按监听事件分类

    (1)监听对象的创建和销毁的事件监听器。

    (2)监听对象属性变更(添加、修改、删除)的监听器。

    监听器接口

    Servlet API中定义了监听器接口,用来监听不同的事件类型。

    ServletContextListener:上下文监听器;
    ServletContextAttribute:上下文属性监听器;
    ServletRequestListener:请求监听器;
    ServletRequestAttributeListener:请求属性监听器;
    HttpSessionListener:会话监听器;
    HttpSessionAttribute:会话属性监听器.

    配置监听器类:

创建监听器类,实现监听器接口,在web.xml文件中配置监听器类。

        

<listener>
	<listener-class>监听器类全类名</listener-class>
</listener>

实例

监听器类

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;

public class ObjectListener implements ServletContextListener, ServletRequestListener {
    /*
    监听ServletContext对象的创建
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext创建了");
        ServletContext application = sce.getServletContext();//整个应用程序只有一个对象
        application.setAttribute("config","123");//设置初始化数据
    }

    /*
    监听ServletContext对象的销毁
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext销毁了");
    }

    /*
   请求对象创建
    */
    long s = 0;
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("请求对象创建");
        s = System.currentTimeMillis();
    }

    /*
    请求对象销毁
     */
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("请求对象销毁");
        //获取客户端ip
        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
        System.out.println(request.getRemoteAddr()+"请求耗时:::"+(System.currentTimeMillis()-s));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值