JavaWeb学习——简单学习过滤器Filter

JavaWeb学习——过滤器Filter学习

Filter过滤器简介

Filter实际上就是对web资源进行拦截,做一些处理后交给Servlet处理,相当于在客户端和服务端资源文件之间加了一层过滤网。在过滤器种经过逻辑判断将不符合要求的资源过滤掉。一般情况下是对请求request的过滤,当然也可以对相应进行过滤

原理图:
在这里插入图片描述
过滤器的一般应用场景

  • 统一设置编码格式
  • 设置权限访问
  • 敏感字符过滤

2.Filter具体是怎么实现拦截的

  • Filter接口种有一个doFilter方法,当我们写好Filter并设置对哪个web资源进行拦截后,WEB服务器每次在调用WEB资源的service()方法之前都会先调用doFilter方法。该方法中可以决定是否过滤掉用户的请求。
  • web服务器调用Filter的doFilter方法时,会传递一个FilterChain的对象进来,它也提供了一个doFilter方法,开发人员根据需求决定是否调用此方法(chain.doFilter(request,
    response);)。若调用,web服务器通过调用web资源的service方法,用户就可以访问到请求的资源,否则就访问不了。

3.Filter开发的基本步骤

  • ①编写Java类实现Filter接口,实现doFilter方法

    package com.muhan.Filter;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class myFilter implements Filter {
    
        //过滤器初始化方法
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("过滤器初始化");
        }
    
        //主要业务逻辑
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
    
            //把ServletRequest强转成HttpServletRequest
            HttpServletRequest request = (HttpServletRequest) req;
            //把ServletResponse强转成HttpServletResponse
            HttpServletResponse response = (HttpServletResponse) resp;
            //设定字符编码
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
    
            System.out.println("myFilter执行前");
            filterChain.doFilter(request, response);
            System.out.println("myFilter执行后");
        }
    
        @Override
        public void destroy() {
            System.out.println("过滤器销毁了");
        }
    }
    
    
  • ②在web.xml中配置Filter

        <!--配置过滤器-->
        <filter>
            <filter-name>myFilter01</filter-name>
            <filter-class>com.muhan.Filter.myFilter</filter-class>
        </filter>
        
        <!--映射过滤器-->
        <filter-mapping>
            <filter-name>myFilter01</filter-name>
            <!--/*表示拦截所有请求-->
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
发布了104 篇原创文章 · 获赞 47 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览