过滤器

Servlet过滤器详解

Servlet分类

  • 普通servlet
  • 过滤器
  • 监听器

过滤器的基本结构

  • 普通的servlet是extendshttpServlet这个类

  • 但是过滤器是实现一个Fiter接口,过滤器采用链式操作

  • 方法

方法解释
init(FilterConfig c)初始化信息获取,不需要配置任何直接可以走到这一步程序
doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)重点介绍FilterChain 过滤链
destory()销毁,服务器关闭的时候
public class MyFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        // 服务器关闭的时候销毁
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        resp.getWriter().write("doFilter...............");
    }
    // 过滤器不需要要任何的配置就可以init操作的
    @Override
    public void init(FilterConfig config) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("过滤器初始化");
    }

}
  • 过滤器的web.xml配置
<filter>
    <filter-name>myfilter</filter-name>
    <filter-class>com.zhao.MyFilter</filter-class>
  </filter>
  
  <filter-mapping>
    <filter-name>myfilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  • FilterChain

就是过滤链,如果有多个过滤器则会一直过滤下去,否则就会跳转到目标Servlet

public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub

        chain.doFilter(req, resp);

    }

过滤路径的语法

比较简单,举几个例子

/*  // 过滤所有
/demo/* //过滤demo路径下的所有

例子

编码过滤

private String charSet ;
    public void init(FilterConfig config)
          throws ServletException{
        this.charSet = config.getInitParameter("charset") ; 
    }
    public void doFilter(ServletRequest request,
              ServletResponse response,
              FilterChain chain)
              throws IOException,
                     ServletException{
        request.setCharacterEncoding(this.charSet) ;
        chain.doFilter(request,response) ;
    }
    public void destroy(){
    }
<filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.lxh.filterdemo.EncodingFilter</filter-class>
        <init-param>
            <param-name>charset</param-name>
            <param-value>GBK</param-value>
        </init-param>
    </filter>

登录拦截

public class LoginFilter implements Filter {
    public void init(FilterConfig config)
          throws ServletException{
    }
    public void doFilter(ServletRequest request,
              ServletResponse response,
              FilterChain chain)
              throws IOException,
                     ServletException{
    
        HttpServletRequest req = (HttpServletRequest) request ;
        HttpSession ses = req.getSession() ;
        if(ses.getAttribute("userid") != null) {

            chain.doFilter(request,response) ;
        } else {
            request.getRequestDispatcher("login.jsp").forward(request,response) ;
        }
    }
    public void destroy(){
    }
}

转载于:https://www.cnblogs.com/zhaod/p/8667154.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值