JavaWeb——过滤器

JavaWeb——过滤器

一、Filter接口

所有的过滤器都必须实现filter接口。

public class MyFilter implements Filter {
   
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
   

    }

    @Override
    public void destroy() {
   

    }
}

init方法->Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象

destroy方法->Web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。在destroy方法中,可以释放过滤器使用的资源。

doFilter方法执行过滤功能,将请求进行处理或者将请求转发到下一个组件或者直接返回响应。它将控制转到过滤器链的下一个过滤器或者实际的资源,每一次请求被拦截时执行,执行多次

二、FilterConfig接口

用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得:

String getFilterName():得到filter的名称。

String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.

Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合

public ServletContext getServletContext():返回Servlet上下文对象的引用。

    String getFilterName();->获得过滤器名

    ServletContext getServletContext();->获得servletContext对象

    String getInitParameter(String var1);->获得初始化参数

    Enumeration<String> getInitParameterNames();->获得初始化参数名的枚举
@WebFilter(urlPatterns = "/index.jsp",initParams = {
   
        @WebInitParam(name = "username",value = "admin"),
        @WebInitParam(name = "password",value = "123456")
})
public class MyFilter implements Filter {
   
    private FilterConfig filterConfig=null;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   
        this.filterConfig=filterConfig;
        System.out.println("init.....");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
   
        System.out.println("执行过滤方法");
        Enumeration<String> enumeration=filterConfig.getInitParameterNames();
        while(enumeration.hasMoreElements()){
   
            String name=enumeration.nextElement();
            String value=filterConfig.getInitParameter(name);
            System.out.println(name+"->"+value);
        }
        System.out.println(servletRequest.getServletContext()==filterConfig.getServletContext());
        System.out.println(filterConfig.getFilterName());->未指定过滤器名称将以完全限定名作为名称
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
   
        System.out.println("destroy.....");<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值