zoukankan      html  css  js  c++  java
  • servlet之filter过滤器

    1、Servlet 过滤器有以下目的

    1. 在客户端的请求访问后端资源之前,拦截这些请求。
    2. 在服务器的响应发送回客户端之前,处理这些响应。

    2、Filter接口

      1.每一个过滤器都需直接或间接继承Filter接口

      2.Filter的创建

        在web服务器启动时会将配置在web.xml中的过滤器保存至内存中。

      3.Filter的方法

        init():在Filter的生命周期中执行一次,在Filter创建的时候执行,可用于初始化参数、修改参数等操作。

        doFilter():做拦截操作的时候执行

        destroy():在Filter的生命中执行一次,在卸载Filter容器前被调用,用于回收Filter所占用的资源。

    3、Filter的配置 

    <!--过滤器测试-->
      <filter>
        <filter-name>TestFilter</filter-name>
        <filter-class>com.controller.TestFilter</filter-class>
          <init-param>
              <param-name>oneLink</param-name>
              <param-value>/test1</param-value>
          </init-param>
      </filter>
      <filter-mapping>
        <filter-name>TestFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>ERROR</dispatcher>
     </filter-mapping>

      在web.xml中添加如上配置。其中com.controller.TestFilter为自己实现的过滤器,其代码如下:

    package com.controller;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class TestFilter implements Filter {
    
        private String oneLink;
        private String[] linkArr;
    
        public void init(FilterConfig filterConfig) throws ServletException {
            oneLink = filterConfig.getInitParameter("oneLink");
            if (!isNull(oneLink)) {
                linkArr = oneLink.split(",");
            }
            return;
        }
    
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) 
    throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; boolean isEqual = false; for (String link : linkArr) { String str = ((HttpServletRequest) servletRequest).getServletPath(); if(((HttpServletRequest) servletRequest).getServletPath().equals(link)){ isEqual = true; break; } } if (isEqual) { filterChain.doFilter(servletRequest, servletResponse); } else { httpResponse.sendRedirect("/test2"); filterChain.doFilter(servletRequest, servletResponse); } } public void destroy() { } private boolean isNull(Object obj){ return obj == null || obj.equals("") ? true : false; } }

      这样一个简单的过滤器就配置完成。

    4、Filter配置参数介绍

    <filter>
        <filter-name>TestFilter</filter-name>
        <filter-class>com.controller.TestFilter</filter-class>
          <init-param>
              <param-name>oneLink</param-name>
              <param-value>/test1</param-value>
          </init-param>
      </filter>
    <filter-name>:配置过滤器名称
    <filter-class>com.controller.TestFilter</filter-class>:配置过滤器的实现类

    <init-param>:配置需要出示化的一些参数名、参数值
    注:其中<init-param>中配置的参数在web服务启动时可通过Filter中的init方法获取,如filterConfig.getInitParameter("oneLink")
    <filter-mapping>
        <filter-name>TestFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    <url-pattern>:配置过滤请求规则

     

    <dispatcher>:配置过滤规则,请参考web.xml里<filter-mapping>中的<dispatcher>作用
  • 相关阅读:
    返回顶部按钮效果实现
    WebAPI Angularjs 上传文件
    C# 单元测试
    C# 如何获取Url的host以及是否是http
    Dapper批量操作实体
    易优CMS:type的基础用法
    易优CMS:arcview基础用法
    易优CMS:channel的基础用法
    易优CMS:arclist 文档列表
    c语言必背代码
  • 原文地址:https://www.cnblogs.com/sunjf/p/servlet_filter.html
Copyright © 2011-2022 走看看