JavaWeb——Filter

JavaWeb——Filter

简介

Filter 也就是过滤器,我们在网络开发中往往需要对客户端发来的请求进行一定的预处理,并且对处理后的响应进行一些处理,此时就需要用到Filter。当服务器(TomCat)接收到客户端发来的请求后,先对符合过滤条件的请求拦截到Filter过滤器中,Filter对请求进行预处理后转发给下一个Filter(如果有的话),Filter处理完后放行请求去获取资源,最后返回的响应也要先经过一系列的Filter处理后再响应给客户端。

Filter生命周期

先来看看Filter接口:

public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {
    }

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    default void destroy() {
    }
}

可以看出Filter的生命周期分为三个阶段:

初始化

当服务器启动时,就会初始化Filter,调用 init() 方法。参数 FilterConfig 由服务器提前准备好。

FilterConfig 可以用于获取配置信息:

public interface FilterConfig {
    String getFilterName();//获取Filter名称

    ServletContext getServletContext();//获取ServletContext

    String getInitParameter(String var1);//根据参数名获取参数值

    Enumeration<String> getInitParameterNames();//获取所有参数名
}

过滤

可以通过 FilterChain.doFilter() 方法执行过滤,也就是结束本次过滤:

public interface FilterChain {
    void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}

销毁

当服务器运行结束后会调用 destroy() 方法销毁Filter

FilterChain过滤链

有时我们需要多个Filter,为了更好的控制Filter的执行顺序,我们可以通过@WebFIlter注解的priority属性来控制Filter执行顺序。

由于Filter会先处理客户端的请求Request,当请求获取完资源后还需要对返回的响应Response进行过滤处理。所以先处理Request的Filter,会靠后处理Response。可以看做一个先进后出的队列。

@WebFilter

@WebFilter 注解用于将一个类定义为过滤器(Filter),以便在Java Web应用程序中对请求进行处理。以下是@WebFilter注解中各个属性的用处:

  1. urlPatterns:指定过滤器拦截的URL模式。可以是一个字符串数组,表示多个URL模式。例如,urlPatterns = {“/login”, “/logout”} 表示拦截"/login"和"/logout"这两个URL。

  2. servletNames:指定过滤器拦截的Servlet名称。可以是一个字符串数组,表示多个Servlet名称。例如,servletNames = {“LoginServlet”, “LogoutServlet”} 表示拦截名为"LoginServlet"和"LogoutServlet"的两个Servlet。

  3. initParams:用于设置过滤器的初始化参数。它是一个 @InitParam 注解的数组,每个 @InitParam 注解包含两个属性:name 和 value ,分别表示参数名和参数值。例如,initParams = { @InitParam(name = “param1”, value = “value1”), @InitParam(name = “param2”, value = “value2”) } 表示设置了两个初始化参数,分别为"param1"和"param2"。

  4. dispatcherTypes:指定过滤器拦截的请求类型。它是一个 DispatcherType 枚举类型的数组。DispatcherType 有以下几个枚举值:

    • REQUEST:拦截请求对象(HttpServletRequest)。
    • FORWARD:拦截前向转发请求。
    • INCLUDE:拦截包含请求。
    • ERROR:拦截错误请求。
    • ASYNC:拦截异步请求。
      默认情况下,过滤器会拦截所有类型的请求。可以通过设置 dispatcherTypes 属性来限制过滤器拦截的请求类型。
  5. asyncSupported:指定过滤器是否支持异步请求。如果设置为 true,则表示过滤器支持异步请求;如果设置为 false,则表示过滤器不支持异步请求。默认值为 true

  6. priority:指定过滤器的优先级。数值越低,优先级越高。默认值为 0 。当有多个过滤器时,优先级高的过滤器会先执行。

  7. name:指定过滤器的名称,用于标识Filter。这个属性是可选的,如果不设置,系统会自动为过滤器生成一个名称。

  8. displayName:指定过滤器的显示名称,常用于美化控制台和日志的输出。这个属性也是可选的,如果不设置,系统会自动为过滤器生成一个显示名称。

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值