• 过滤器 一 Filter


    import javax.servlet.Filter;

    前言

    过滤器是一个程序,依赖与servlet容器,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:

    • 以常规的方式调用资源(即调用servlet或JSP页面)。
    • 利用修改过的请求信息调用资源。
    • 调用资源,但在发送响应到客户机前对其进行修改。
    • 阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。

    1.作用

    一般用于登陆判断,统一编码
    在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。

    2.过滤器配置(web.xml)

    web.xml里面配置自定义的过滤器

    <filter>
       <filter-name>charsetFilter</filter-name>
       <filter-class>com.filter.CharsetFilter </filter-class>
    </filter>
    
    <filter-mapping>
       <filter-name>charsetFilter</filter-name>
       <url-pattern>/xx/xx/*</url-pattern>
    </filter-mapping>
    

    3.常用配置项

    1.urlPatterns配置要拦截的资源

    • 以指定资源匹配。例如"/index.jsp"
    • 以目录匹配。例如"/servlet/*"
    • 以后缀名匹配,例如"*.jsp"
    • 通配符,拦截所有web资源。"/*"

    2.initParams配置初始化参数
    initParams = {@WebInitParam(name = "key",value = "value")}
    dispatcherTypes配置拦截的类型,可配置多个。默认为DispatcherType.REQUEST
    dispatcherTypes = {DispatcherType.ASYNC,DispatcherType.ERROR}

    3.DispatcherType是个枚举类型

    • FORWARD//转发的
    • INCLUDE//包含在页面的
    • REQUEST//请求的
    • ASYNC//异步的
    • ERROR//出错的

    4.自定义过滤器

    @WebFilter(filterName = "CharsetFilter",
               urlPatterns = "/*",
               initParams = {
                    @WebInitParam(name = "charset", value = "utf-8")
               })
    public class CharsetFilter implements Filter {
        private String filterName;
        private String charset;
    
        public void init(FilterConfig config) throws ServletException {
            /*初始化方法  接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
            filterName = config.getFilterName();
            charset = config.getInitParameter("charset");
        }
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            /*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
            HttpServletRequest request= (HttpServletRequest) req;
            HttpServletResponse Response= (HttpServletResponse) resp;
            HttpSession session=request.getSession();
            request.setCharacterEncoding(charset);
            Response.setContentType("text/html;charset=utf-8");
            chain.doFilter(request, Response);
        }
    
    
        public void destroy() {
            /*销毁时调用*/
        }
    }
    

    5.FilterConfig接口定义的各个方法

    • getFilterName()方法,返回 web.xml 里 元素的设置名称。
    • getServletContext()方法用于返回 FilterConfig 对象中所包装的 ServletContext 对象的引用
    • getInitParameter(String name)方法,用于返回在 web.xml 文件中为 Filter 所设置的某个名称的初始化参数值,如果指定名称的初始化参数不存在,则返回 null
    • getInitParameterNames()方法用于返回一个 Enumeration 集合对象,该集合对象包含在 web.xml 文件中为当前 Filter 设置的所有初始化参数的名称
    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.filter.MyFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    

    注:过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法.
    当Filter被移除或服务器正常关闭时,会执行destroy方法
    多个filter执行顺序跟<filter-mapping>的顺序一致

  • 相关阅读:
    spring 任务调度quartz
    java增强型for循环
    DateTimeFormat
    Java的同步和异步
    HTTP Status 400,400 (Bad Request)
    com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '2.34435678977654336E17' in column '3' is outside valid range for the datatype INTEGER.
    Servlet.service() for servlet [appServlet] in context with path [/item] threw exception [Request processing failed
    mysql调优
    Windows nexus 启动失败
    NFS客户端访问行为相关的几个参数解释
  • 原文地址:https://www.cnblogs.com/loveer/p/11309221.html
Copyright © 2020-2023  润新知