JavaWeb之Filter

本文详细介绍了JavaWeb中的过滤器Filter,包括过滤器的基本概念、工作原理、生命周期,以及如何创建和配置过滤器。此外,还探讨了过滤器的分类,如REQUEST、FORWARD、INCLUDE、ERROR和ASYNC,并列举了多个应用场景,如错误页面跳转、编码过滤和Servlet3.0异步处理。同时,文章提到了装饰设计模式在过滤器中的应用,以及HttpServletRequestWrapper和HttpServletResponseWrapper的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

、过滤器

1、过滤器简介

过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤。

2、过滤器的工作原理和生命周期

3、第一个过滤器案例

1)创建过滤器类,实现javax.servlet.Filter接口

2)重写Filter方法

init()方法

这是过滤器的初始化方法,Web容器创建过滤器实例后将调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数。

(比如用FilterConfig接口用来,为了获取Filter程序在web.xml文件中的配置信息)

doFilter()方法

这个方法完成实际的过滤操作。这个地方是过滤器的核心方法。当用户请求访问与过滤器关联的URL时,Web容器将先调用过滤器的doFilter方法。FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发、重定向将请求转发到其他资源。(单个Filter或者Filter链执行每次多次调用执行的方法)

destroy()方法

Web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源。(大多数情况用不到)

4、过滤器分类

Servlet2.5

  1. PEQUEST:用户直接访问页面时,Web容器将会调用过滤器;
  2. FORWARD:目标资源是通过RequestDispatcher的forward访问时,该过滤器将被调用;
  3. INCLUDE:目标资源是通过RequestDispatcher的include方法调用时,过滤器将被调用;
  4. ERROR:目标资源是通过声明式异常处理机制调用时,过滤器将被调用;
  5. */过滤全部页面

Servlet3.0

ASYNC:支持异步处理;

5:过滤器应用

案例1:过滤器错误页面跳转

案例2:登录时编码过滤,统一编码问题

{  

     1:装饰设计模式

     2:HttpServletRequestWrapper和HttpServletResponseWrapper作为request和response对象的包装类

}

装饰设计模式的特点

  1. 包装类要和别包装对象实现同样的接口
  2. 包装类持有一个被包装类对象。例如在HttpServletRequestWrapper定义的构造方法中,需要传递一个HttpServletRequest类型的参数(相当于就是实现多态的,用父类类型引用子类对象,调用子类方法)
  3. 包装类在实现接口的过程中,对于不需要包装的方法原封不动地调用被包装对象的方法来实现,对于需要包装的方法自己实现。

过滤器Filter把浏览器的请求传给自己定义的HttpServletRequestWrapper和HttpServletResponseWrapper进行把请求和响应的进行修改。HttpServletRequestWrapper在这个包装类中判断get请求,并对get请求的参数进行utf-8编码,过滤器再放行。

get请求和post请求统一编码的方式不同

post直接使用request.setCharacterEncoding("utf-8");//只对消息体有效response.setContenType("text/html;charset=utf-8");

get应为参数是在URL上的,不是在消息体中,不能用request.setCharacterEncoding("utf-8");//只对消息体有效;所以对请求头的内容无效,需要自行修改utf-8;response.setContenType("text/html;charset=utf-8");响应还是可以用response的。

案例3:Servlet3.0异步操作

案例4:Filter实现页面静态化

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值