zoukankan      html  css  js  c++  java
  • J2EE (三) Filter详解

    1. 简介
      1. Filter这个词第一个看到时以为是化学里面的漏斗呢,因为所学专业经常在实验室里面做一些实验,对于这个印象也比较深刻,作为常识大家也知道利用沙子/漏斗/纱布,可以将浑浊的水过滤为很干净的水,看下面如:
        1.  
      1. 计算机中这样定义:Filter 技术是servlet 2.3 新增加的功能。servlet2.3是sun公司于2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则。在众多参与者的共同努力下,servlet2.3比以往功能都强大了许多,而且性能也有了大幅提高。
    1. 原理
      1. Web开发中HttpServletRequestHttpServletReponse是两个重要的对象,当Request/Reponse在客户端与服务器端进行传输的过程中,filter对这两个对象进行过滤,这里不仅仅是单纯的过滤掉一些东西,更主要的是增加一些功能/服务。
      2. 我们做的只是在Web.xml配置文件中声明一下,也可以称filter为声明式服务。
      1. filter也是让Tomcat容器管理,Tomcat对其进行初始化和赋值
    1. 例子:设置字符集
      1. 在没有提出filter概念之前,我们需要往每一个编辑的页面上添加一句设置编码方式的代码如
        1. 代码
        2. request.setCharacterEncoding("GB18030");
      1. 如果我们的系统需要几千个页面那么每个页面都要写上这个功能,会很麻烦,倘若需要改动编码方式时会更麻烦,filter给我们解决了这个问题。下面为具体实现
        1. Filter class
          1. 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;
            /**
             * 设置字符集
             * @author LLS
             *
             */
            public class CharSetEncodingFilter implements Filter {
            	//保存编码 方式 
            	private String encoding=null;
            	
            	@Override
            	public void destroy() {
            		// TODO Auto-generated method stub
            
            	}
            
            	@Override
            	public void doFilter(ServletRequest request, ServletResponse reponse,
            			FilterChain chain) throws IOException, ServletException {
            			
            		
            		//统一设置字符集
            		request.setCharacterEncoding("GB18030");
            		//向下传递
            		chain.doFilter(request, reponse);
            		
            	}
            
            	@Override
            	public void init(FilterConfig filterConfig) throws ServletException {
            		//通过 配置 文件取得初始化参数
            		this.encoding=filterConfig.getInitParameter("encoding");
            		
            	}
            
            }

        1. Web.xml
          1. </welcome-file-list>
              <!--过滤器配置-->
              <filter>
              	<filter-name>CharSetEncodingFilter</filter-name>
              	<filter-class>com.bjpowernode.drp.util.filter.CharSetEncodingFilter</filter-class>
              	<init-param>
              		<param-name>encoding</param-name>
              		<param-value>GB18030</param-value>
              	</init-param>
              </filter>
              
              <filter-mapping>
              	<filter-name>CharSetEncodingFilter</filter-name>
              	<url-pattern>*.jsp</url-pattern>
              </filter-mapping>

    1. 应用广泛
      1. 它的功能并不是只有这些,它给我们提供了一种思想让我们可以自由选择增加和删除一些功能功能,在程序调用过程中横向向程序里面注入代码段,注入新功能,提高了可扩展的灵活性。
  • 相关阅读:
    网卡中断负载均衡
    【Linux】tcp缓冲区大小的默认值、最大值
    ssh RSA key变化后处理
    drop_caches控制page cache
    Linux的page cache使用情况/命中率查看和操控
    如何在vscode中调试vue-cli项目?
    vue-cli || webpack 打包的时候css里面写的背景图片的路径出错问题
    charles 的安装和手机配置 (我用的win7系统 ,和 iphone8 的配置)
    如何结合插件 vue-lazyload 来简单实现图片懒加载?
    cordova 和 java ( JDK ) 和 android-studio (SDK)的初始安装和配置
  • 原文地址:https://www.cnblogs.com/lilongsheng1125/p/4978590.html
Copyright © 2011-2022 走看看