javaweb ---- Filter

本文深入探讨了JavaWeb中的Filter,它作为Web过滤器在请求处理前后执行,用于实现如登录验证、编码统一等通用功能。介绍了单个及多个过滤器的执行流程,并展示了如何通过注解和web.xml配置过滤器。同时,提供了Filter的使用概述和测试代码示例,详细解释了doFilter()方法及其在请求生命周期中的作用。
摘要由CSDN通过智能技术生成
  • javaweb ---- Filter

Filter的理解概述:

  • filer是web过滤器,当客户端申请访问服务器资源,或者服务器向客户端响应资源时,filter可以将请求拦截下来完成一些通用的特殊功能比如:登录验证、统一编码处理、敏感字符过滤...
  • 单个过滤器执行流: 执行过滤器-->再执行放行后的资源-->最后执行过滤器放行代码下边的代码;多个过滤器执行流:过滤器1-->过滤器2-->资源执行-->过滤器2-->过滤器1。多个过滤器先后顺序:注解配置:按照类名的字符串比较规则比较,值小的先执行 ,如: AFilter 和 BFilter,AFilter就先执行了。或者web.xml配置: <filter-mapping>谁定义在上边,谁先执行

Filter的使用概述:

  • filter,servet,listene同为java的三大组件,在使用上filter可类比servlet:通过注解声明访问客户端路径(也可通过配置文件),继承接口,复写方法中都有init,destroy方法,主要编辑方法在fliter中为doFilter()。

filter的测试代码:

<!--web.xml配置filter类-->
<?xml version="1.0" encoding="UTF-8"?>

-<web-app version="3.1" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee">


<!--将拦截目录和filter类通过<filter-name>标签关联起来-->
 <filter>
<filter-name>test1</filter-name> 
<filter-class>MyTest.web.filter.FilterTest1</filter-class>
</filter>

<filter-mapping>
<filter-name>test1</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher><!--配置拦截目录的方式-->
</filter-mapping>

</web-app>
package MyTest.web.filter;
import javax.servlet.*;
import java.io.IOException;

/**FilterTest1:过滤器快速入门程序
 * 1.
 */


@WebFilter("/*")//访问所有资源之前,都会执行该过滤器
//@WebFilter("/index.jsp") 只有访问具体资源路径index.jsp资源时,过滤器才会被执行
//@WebFilter("/user/*") 访问拦截目录/user下的所有资源时,过滤器都会被执行
//@WebFilter("*.jsp") 访问所有后缀名为jsp资源时,过滤器都会被执行
//@WebFilter(value="/index.jsp",dispatcherTypes = DispatcherType.REQUEST)  浏览器直接请求index.jsp资源时,该过滤器会被执行
//@WebFilter(value="/index.jsp",dispatcherTypes = DispatcherType.FORWARD)  只有转发访问index.jsp时,该过滤器才会被执行
//@WebFilter(value="/*",dispatcherTypes ={ DispatcherType.FORWARD,DispatcherType.REQUEST}) 浏览器直接请求index.jsp或者转发访问index.jsp。该过滤器才会被执行

public class FilterTest1 implements Filter {
      @Override
     //每一次请求被拦截资源时,会执行。执行多次
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("放行之前,对request数据作增强");
        //
        //放行
        chain.doFilter(req, resp);
        System.out.println("放行之后,对response数据作增强");
    }
    
   //服务器开启后,Filter对象创建后执行init方法,只执行一次,用于加载资源
    public void init(FilterConfig config) throws ServletException {
        System.out.println("init....");
    }

    //服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
    @Override
    public void destroy() {
System.out.println("destroy....");
    }   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值