精华内容
参与话题
问答
  • css filter详解

    千次阅读 2015-10-16 17:55:35
    filter 属性详解 属性 名称 类型 说明 grayscale 灰度 值为数值 取值范围从0到1的小数(包括0和1) sepia 褐色 值为数值 取值范围从0到1的小数(包括0和1) saturate 饱和度 值为数值 默认...

    filter 属性详解

    属性 名称 类型 说明
    grayscale 灰度 值为数值 取值范围从0到1的小数(包括0和1)
    sepia 褐色 值为数值 取值范围从0到1的小数(包括0和1)
    saturate 饱和度 值为数值 默认是1,可以是小于1的小数,也可以大于1
    hue-rotate 色相旋转 值为角度 0-360deg
    invert 反色 值为数值 取值范围从0到1的小数(包括0和1) /*IE10*/
    opacity 透明度 值为数值 取值范围从0到1的小数(包括0和1)
    brightness 亮度 值为数值 默认是1,可以小于1(变暗),可以大于1(变亮)
    contrast 对比度 值为数字 默认是1,可以大于1,也可以小于1
    blur 模糊 值为length 表示模糊半径,比如filter:blur(2px)/*IE10*/
    drop-shadow 阴影 值为shadow() 写法类似css3 box-shadow,比如filter:drop-shadow(0,0,10px,black)
    特别说明

    火狐、opera浏览器不支持filter属性

    所以在写定义常用属性的时候如:半透明属性:opacity,则可以直接定义成opacity:.5;/*Opera9.0+、Firefox1.5+、Safari、Chrome*/

    另外ie6也有特定的png图片定义方式:background:url(../images/yz.png) center bottom no-repeat; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale,

    src=”images/yz.png”);_background:none;

    IE透明定义方式filter:alpha(opacity=30); /*IE5、IE5.5、IE6、IE7*/

    1.grayscale

    div .f_grayscale {     
    	filter: grayscale(50%);    
    	-webkit-filter: grayscale(50%);   
    	-moz-filter: grayscale(50%);    
    	-ms-filter: grayscale(50%);    
    	-o-filter: grayscale(50%);    
       }  
    


    1


    2.sepia

    div .f_sepia {    
        filter:sepia(0.1);    
        -webkit-filter:sepia(0.1);   
        -moz-filter:sepia(0.9);   
        -ms-filter:sepia(0.9);   
        -o-filter:sepia(0.9);   
    }  


    2

    3.saturate

    div .f_saturate{   
        filter:saturate(125);   
        -webkit-filter:saturate(3);   
        -moz-filter:saturate(3);   
        -ms-filter:saturate(3);   
        -o-filter:saturate(3);   
    }  
    


    3

    4.hue-rotate

    div .f_hue-rotate{   
        filter:hue-rotate(300deg);   
        -webkit-filter:hue-rotate(300deg);   
        -moz-filter:hue-rotate(50deg);   
        -ms-filter:hue-rotate(50deg);   
        -o-filter:hue-rotate(50deg);   
    }  


    4

    5.invert

    <pre name="code" class="html">div .f_invert{   
        filter:invert(.3);   
        -webkit-filter:invert(.3);   
        -moz-filter:invert(.3);   
        -ms-filter:invert(.3);   
        -o-filter:invert(.3);   
    }  

    
    

    5

    6.opacity

    </pre></blockquote><pre name="code" class="html">div .f_opacity{   
        filter:opacity(.5);   
        -webkit-filter:opacity(.5);   
        -moz-filter:opacity(.5);   
        -ms-filter:opacity(.5);   
        -o-filter:opacity(.5);   
    }  
    

    6

    7.brightness大于1的情况

    </pre></blockquote><pre name="code" class="html">div .f_brightness{   
        filter:brightness(5);   
        -webkit-filter:brightness(5);   
        -moz-filter:brightness(1.3);   
        -ms-filter:brightness(1.3);   
        -o-filter:brightness(1.3);   
    }  


    8.brightness小于1的情况


    div .f_brightness{   
        filter:brightness(.3);   
        -webkit-filter:brightness(.3);   
        -moz-filter:brightness(.3);   
        -ms-filter:brightness(.3);   
        -o-filter:brightness(.3);   
    }  


    9.contrast大于1


    div .f_contrast{   
        filter:contrast(2);   
        -webkit-filter:contrast(2);   
        -moz-filter:contrast(2);   
        -ms-filter:contrast(2);   
        -o-filter:contrast(2);   
    }  


    10.contrast小于1


    div .f_contrast{   
        filter:contrast(.2);   
        -webkit-filter:contrast(.2);   
        -moz-filter:contrast(.2);   
        -ms-filter:contrast(.2);   
        -o-filter:contrast(.2);   
    }  


    11.blur


    div .f_blur{   
        filter:blur(10px);   
        -webkit-filter:blur(10px);   
        -moz-filter:blur(2px);   
        -ms-filter:blur(2px);   
        -o-filter:blur(2px);   
    }  


    12.drop-shadow


    div .f_shadow{   
        filter:drop-shadow(3px 3px 5px rgba(0,0,0,.5));    
        -webkit-filter:drop-shadow(10px 10px 5px rgba(0,0,0,.1));    
        -moz-filter:drop-shadow(3px 3px 5px rgba(0,0,0,.5));    
        -ms-filter:drop-shadow(3px 3px 5px rgba(0,0,0,.5));    
        -o-filter:drop-shadow(3px 3px 5px rgba(0,0,0,.5));    
    }  

    
    

    10

    要实现(比方说)FireFox 24浏览器上照片变模糊的效果,也是可以的。可以使用SVG的模糊滤镜。
    新建文命名为blur.svg的SVG文件:

    01 <?xml version="1.0" encoding="utf-8"?>
    02 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    03 <svg version="1.1"
    04      xmlns="http://www.w3.org/2000/svg"
    05      xmlns:xlink="http://www.w3.org/1999/xlink"
    06      xmlns:ev="http://www.w3.org/2001/xml-events"    
    07      baseProfile="full"
    08     <defs>
    09         <filter id="blur">
    10             <feGaussianBlur stdDeviation="10" />
    11         </filter>
    12     </defs>
    13 </svg>


    如下CSS调用代码:

    1 filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */

    完整的css代码

    01 .blur {
    02     filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */
    03      
    04     -webkit-filter: blur(10px); /* Chrome, Opera */
    05        -moz-filter: blur(10px);
    06         -ms-filter: blur(10px);   
    07             filter: blur(10px);
    08      
    09     filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=10, MakeShadow=false); /* IE6~IE9 */
    10 }




    本文转载自:http://zzstudy.offcn.com/archives/8877

                      http://www.wufangbo.com/css3-mo-hu-xiao-guo/




    展开全文
  • 海量数据处理之Bloom Filter详解

    万次阅读 多人点赞 2011-08-14 13:19:21
    海量数据处理之Bloom Filter详解 前言 本博客内曾已经整理过十道海量数据处理面试题与十个方法大总结。接下来,本博客内会重点分析那些海量数据处理的方法,并重写十道海量数据处理的面试题。如果有任何问题,欢迎...

    海量数据处理之Bloom Filter详解

     

    前言

        本博客内曾已经整理过十道海量数据处理面试题与十个方法大总结。接下来,本博客内会重点分析那些海量数据处理的方法,并重写十道海量数据处理的面试题。如果有任何问题,欢迎不吝指正。谢谢。

    一、什么是Bloom Filter

        Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个位阵列(Bit array)中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检索元素一定不在;如果都是1,则被检索元素很可能在。这就是布隆过滤器的基本思想。

        但Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。

        有人可能想知道它的中文叫法,倒是有被译作称布隆过滤器。该不该译,译的是否恰当,由诸君品之。下文之中,如果有诸多公式不慎理解,也无碍,只作稍稍了解即可。

    1.1、集合表示和元素查询

        下面我们具体来看Bloom Filter是如何用位数组表示集合的。初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0

        为了表达S={x1, x2,…,xn}这样一个n个元素的集合,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,…,m}的范围中。对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为11ik)。注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在下图中,k=3,且有两个哈希函数选中同一个位置(从左边数第五位,即第二个“1“处)。   

     

        在判断y是否属于这个集合时,我们对y应用k次哈希函数,如果所有hi(y)的位置都是11ik),那么我们就认为y是集合中的元素,否则就认为y不是集合中的元素。下图中y1就不是集合中的元素(因为y1有一处指向了“0”位)。y2或者属于这个集合,或者刚好是一个false positive

    1.2、错误率估计

        前面我们已经提到了,Bloom Filter在判断一个元素是否属于它表示的集合时会有一定的错误率(false positive rate),下面我们就来估计错误率的大小。在估计之前为了简化模型,我们假设kn<m且各个哈希函数是完全随机的。当集合S={x1, x2,…,xn}的所有元素都被k个哈希函数映射到m位的位数组中时,这个位数组中某一位还是0的概率是:

        其中1/m表示任意一个哈希函数选中这一位的概率(前提是哈希函数是完全随机的),(1-1/m)表示哈希一次没有选中这一位的概率。要把S完全映射到位数组中,需要做kn次哈希。某一位还是0意味着kn次哈希都没有选中它,因此这个概率就是(1-1/m)的kn次方。令p = e-kn/m是为了简化运算,这里用到了计算e时常用的近似:

     

    令ρ为位数组中0的比例,则ρ的数学期望E(ρ)= p’。在ρ已知的情况下,要求的错误率(false positive rate)为:

    (1-ρ)为位数组中1的比例,(1-ρ)k就表示k次哈希都刚好选中1的区域,即false positive rate。上式中第二步近似在前面已经提到了,现在来看第一步近似。p’只是ρ的数学期望,在实际中ρ的值有可能偏离它的数学期望值。M. Mitzenmacher已经证明[2] ,位数组中0的比例非常集中地分布在它的数学期望值的附近。因此,第一步的近似得以成立。分别将pp’代入上式中,得:

       

    相比p’f’,使用pf通常在分析中更为方便。

    1.3、最优的哈希函数个数

        既然Bloom Filter要靠多个哈希函数将集合映射到位数组中,那么应该选择几个哈希函数才能使元素查询时的错误率降到最低呢?这里有两个互斥的理由:如果哈希函数的个数多,那么在对一个不属于集合的元素进行查询时得到0的概率就大;但另一方面,如果哈希函数的个数少,那么位数组中的0就多。为了得到最优的哈希函数个数,我们需要根据上一小节中的错误率公式进行计算。

        先用pf进行计算。注意到f = exp(k ln(1 − e−kn/m)),我们令g = k ln(1 − e−kn/m),只要让g取到最小,f自然也取到最小。由于p = e-kn/m,我们可以将g写成

        根据对称性法则可以很容易看出当p = 1/2,也就是k = ln2· (m/n)时,g取得最小值。在这种情况下,最小错误率f等于(1/2)k (0.6185)m/n。另外,注意到p是位数组中某一位仍是0的概率,所以p = 1/2对应着位数组中0和1各一半。换句话说,要想保持错误率低,最好让位数组有一半还空着。

        需要强调的一点是,p = 1/2时错误率最小这个结果并不依赖于近似值pf。同样对于f’ = exp(k ln(1 − (1 − 1/m)kn))g’ = k ln(1 − (1 − 1/m)kn)p’ = (1 − 1/m)kn,我们可以将g’写成

    同样根据对称性法则可以得到当p’ = 1/2时,g’取得最小值。

    1.4、位数组的大小

        下面我们来看看,在不超过一定错误率的情况下,Bloom Filter至少需要多少位才能表示全集中任意n个元素的集合。假设全集中共有u个元素,允许的最大错误率为є,下面我们来求位数组的位数m

        假设X为全集中任取n个元素的集合,F(X)是表示X的位数组。那么对于集合X中任意一个元素x,在s = F(X)中查询x都能得到肯定的结果,即s能够接受x。显然,由于Bloom Filter引入了错误,s能够接受的不仅仅是X中的元素,它还能够є (u - n)false positive。因此,对于一个确定的位数组来说,它能够接受总共n + є (u - n)个元素。在n + є (u - n)个元素中,s真正表示的只有其中n个,所以一个确定的位数组可以表示

    个集合。m位的位数组共有2m个不同的组合,进而可以推出,m位的位数组可以表示

       

    个集合。全集中n个元素的集合总共有

       

    个,因此要让m位的位数组能够表示所有n个元素的集合,必须有

       

    即:

       

    上式中的近似前提是nєu相比很小,这也是实际情况中常常发生的。根据上式,我们得出结论:在错误率不大于є的情况下,m至少要等于n log2(1/є)才能表示任意n个元素的集合。

     

    上一小节中我们曾算出当k = ln2· (m/n)时错误率f最小,这时f = (1/2)k= (1/2)mln2 / n。现在令fє,可以推出

    这个结果比前面我们算得的下界n log2(1/є)大了log2e 1.44倍。这说明在哈希函数的个数取到最优时,要让错误率不超过єm至少需要取到最小值的1.44倍。

    1.5、概括

        在计算机科学中,我们常常会碰到时间换空间或者空间换时间的情况,即为了达到某一个方面的最优而牺牲另一个方面。Bloom Filter在时间空间这两个因素之外又引入了另一个因素:错误率。在使用Bloom Filter判断一个元素是否属于某个集合时,会有一定的错误率。也就是说,有可能把不属于这个集合的元素误认为属于这个集合(False Positive),但不会把属于这个集合的元素误认为不属于这个集合(False Negative)。在增加了错误率这个因素之后,Bloom Filter通过允许少量的错误来节省大量的存储空间。

        自从Burton Bloom70年代提出Bloom Filter之后,Bloom Filter就被广泛用于拼写检查和数据库系统中。近一二十年,伴随着网络的普及和发展,Bloom Filter在网络领域获得了新生,各种Bloom Filter变种和新的应用不断出现。可以预见,随着网络应用的不断深入,新的变种和应用将会继续出现,Bloom Filter必将获得更大的发展。

    二、适用范围

        可以用来实现数据字典,进行数据的判重,或者集合求交集 

    三、基本原理及要点

        对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这 个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。 

        还有一个比较重要的问题,如 何根据输入元素个数n,确定位数组m的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况 下,m至少要等于n*lg(1/E)才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应 该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。 

    举个例子我们假设错误率为0.01,则此时m应大概是n的13倍。这样k大概是8个。 

        注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多bit的。所以使用bloom filter内存上通常都是节省的。 
     

    四、扩展

        Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。 
     

    五、问题实例

        给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢? 

    根据这个问题我们来计算下内存的占用,4G=2^32大概是40亿*8大概是340亿,n=50亿,如果按出错率0.01算需要的大概是650亿个bit。 现在可用的是340亿,相差并不多,这样可能会使出错率上升些。另外如果这些urlip是一一对应的,就可以转换成ip,则大大简单了。 


    参考文献及推荐阅读

    1. http://blog.csdn.net/jiaomeng/article/details/1495500
    2. http://blog.redfox66.com/post/2010/09/24/mass-data-topic-1-start.aspx
    3. 维基百科上关于布隆过滤器的介绍:http://zh.wikipedia.org/zh-cn/%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8
    4. 海量数据处理利器之Bloom Filter:http://www.dbafree.net/?p=36
    展开全文
  • Servlet之过滤器Filter详解

    千次阅读 2014-09-03 10:30:24
    一、过滤器的基本工作原理 1、过滤器的基本工作原理  过滤器的基本工作原理如图4-8示。 2、过滤器的特点  过滤器具备有以下特点:  (1)它是声明式的  (2)它是动态的 ...1、javax.servlet.Filter接口

    一、过滤器的基本工作原理

    1、过滤器的基本工作原理 

    过滤器的基本工作原理如图4-8示。


    2、过滤器的特点 
    过滤器具备有以下特点: 
    (1)它是声明式的 
    (2)它是动态的
    (3)它是模块化的 
    (4)它是可移植的 
    (5)它是可重用的 
    (6)它是透明的 


    二、过滤器的API接口及部署信息 
    1、javax.servlet.Filter接口 
    (1)public void init(FilterConfig filterConfig) throws ServletException 
    init()方法执行初始化操作
    (2) public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws java.io.IOException,ServletException 
    过滤器的业务逻辑代码在doFilter()方法内实现 
    (3)public void destroy() 
    在销毁一个过滤器对象之前,此方法被调用来释放init()中申请的资源,这个方法的执行,表示一个过滤器的生命期结束

    2、 javax.servlet.FilterConfig接口
    (1)public java.util.Enumeration getInitParameterNames() 
    将初始化参数的变量名读至枚举型对象中。 
    (2)public java.lang.String
                                     getInitParameter(java.lang.String name) 
    读取指定变量名的初始化参数值,如果没有此参数,则返回Null值。 
    (3)public ServletContext getServletContext() 
    获得当前Web应用的ServletContext对象。 

    3、javax.servlet. FilterChain接口 
    接口中关键的方法为:
    public void doFilter(ServletRequest  request,
    ServletResponse response)  throws  java.io.IOException,ServletException 

    4、过滤器的部署 
    在WEB-INF\web.xml中部署一个过滤器的过程有:注册过滤器、映射过滤器
    (1)注册过滤器 
    过滤器在Web应用中注册后才会被容器加载运行。在web.xml中注册过滤器的方法如下示:

    <filter>
          <filter-name>my1</filter-name>
          <filter-class>com.abc.mis.Filter1</filter-class>
          <init-param>
            <param-name>password</param-name>
            <param-value>123</param-value>
          </init-param>
    </filter>

    容器为一个<filter></filter>元素创建一个过滤器实例,同一个过滤器类可以生成多个实例,此时只需要部署多个<filter></filter>元素,例如:
     <filter>
          <filter-name>my1</filter-name>
          <filter-class>com.abc.mis.Filter1</filter-class>
          <init-param>
            <param-name>password</param-name>
            <param-value>123</param-value>
          </init-param>
    </filter>

    (2)映射过滤器 
    过滤器映射就是定义此过滤器的激活条件,一般是通过目标资源的URI模式和请求的类型来定义。URI中可以使用通配符“*”来表达请求的URI模式。过滤器映射的基本方法如下示: 
    <filter-mapping>
          <filter-name>my1</filter-name>
          <url-pattern>/test/*</url-pattern>
          <dispatcher>REQUEST</dispatcher>
          <dispatcher>FORWARD</dispatcher>
    </filter-mapping>


    三、第一个过滤器程序
    过滤器的基本编程过程是: 
    第一步:编辑与编译过滤器程序,把编译后得到的包文件夹及*.class类发布到ROOT\WEB-INF\classes文件夹下。 
    第二步:编辑WEB-INF\web.xml文件,添加过滤器的部署信息。 
    第三步:重启Tomcat或重载Web应用,使过滤器生效。 

    【例】:定义三个过滤器:
    如果用户访问“/test”下的资源时,过滤器1被激活,它判断用户是否已经登录,如果没有登录则中断请求,并返回404错误信息,如果已经登录则将请求转发给下一个过滤器。
    定义过滤器2,当请求“/*”资源并且请求是来自客户端时它才被激活,显示提示信息,然后把请求转发给下一个过滤器。
    过滤器3的功能同过滤器2,但它的请求类型为REQUEST或FORWARD。

    操作步骤如下:
    (1) 启动JC4,新建一个类“Filter1”,在代码编辑窗口中输入如下的代码: 

    <span style="font-family:SimSun;"><span style="font-family:FangSong_GB2312;font-size:14px;">package my;
    
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class Filter1 implements Filter {
    
      private FilterConfig config = null;
    
      public void init(FilterConfig config) throws ServletException {
        this.config = config;
      }
    
      public void destroy() {
        config = null;
      }
    
      public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException 
     {
        response.setCharacterEncoding("GB2312");
        PrintWriter out=response.getWriter();
    	HttpSession session=((HttpServletRequest)request).getSession();
    	
         System.out.println("过滤器1工作,请求转下一个处理..");
         out.print("<br>请求到达目标资源前过滤器2添加的信息<br>");
         
         String loginStatus=(String)session.getAttribute("loginName");
         if(loginStatus==null)
           {
         	    out.print("<br>你没有登陆,无房访问资源!<br>");
         	    return;
         	  }
         else 
             chain.doFilter(request, response);	 
        
        System.out.println("目标资源输出信息返回到过滤器1...");
        out.print("<br>目标资源输出信息返回时过滤器2添加的信息<br>"); 
        
        
      }
    }</span></span>

    (2)编译Filter1程序,成功后,Filter1.class文件会被JC4自动存放至c:\tomcat\webapps\ROOT\WEB-INF\classes文件夹下,用“我的电脑”查看并核实。 
    (3)启动JC4,新建一个类“Filter2”,在代码编辑窗口中输入如下的代码:

    <span style="font-family:SimSun;"><span style="font-family:FangSong_GB2312;font-size:14px;">package my;
    
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class Filter2 implements Filter {
    
      private FilterConfig config = null;
    
      public void init(FilterConfig config) throws ServletException {
        this.config = config;
      }
    
      public void destroy() {
        config = null;
      }
    
      public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException 
     {
            response.setCharacterEncoding("GB2312");
            PrintWriter out=response.getWriter();
            
            System.out.println("过滤器2工作,请求转下一个处理..");
            out.print("<br>请求到达目标资源前过滤器2添加的信息<br>");
            
            chain.doFilter(request, response);	
            
            </span><pre name="code" class="java"><span style="font-family:FangSong_GB2312;font-size:14px;"> <span style="white-space:pre">	</span>System.out.println("目标资源输出信息返回到过滤器2...");
            out.print("<br>目标资源输出信息返回时过滤器2添加的信息<br>"); </span></span>
    }}

    
    

    (4)编译Filter2程序。 (5)启动JC4,新建一个类 “Filter3”,在代码编辑窗口中输入如下的代码:

    <span style="font-family:SimSun;"><span style="font-family:FangSong_GB2312;font-size:14px;">package my;
    
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class Filter3 implements Filter {
    
      private FilterConfig config = null;
    
      public void init(FilterConfig config) throws ServletException {
        this.config = config;
      }
    
      public void destroy() {
        config = null;
      }
    
      public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException 
     {
           </span><pre name="code" class="java"><span style="font-family:FangSong_GB2312;font-size:14px;"><span style="white-space:pre">	</span>System.out.println("过滤器3工作,请求转下一个处理..");
            out.print("<br>请求到达目标资源前过滤器3添加的信息<br>");
            
            chain.doFilter(request, response);	
            
            </span><pre name="code" class="java"><span style="font-family:FangSong_GB2312;font-size:14px;"> <span>	</span>System.out.println("目标资源输出信息返回到过滤器3...");
            out.print("<br>目标资源输出信息返回时过滤器3添加的信息<br>"); </span></span>

    
    }}
    
    
    (6)编译Filter3程序。 
    (7)部署以上三个过滤器,得到一个过滤器链为:过滤器3→过滤器1→过滤器2。
    编辑WEB-INF\web.xml文件,添加如下的部署信息:




    (8)定义实验用JSP资源。启动DW8,完成以下任务: 
    新建exam406.jsp,在设计视图中输入提示文字“当前是/exam406.jsp 资源”。 
    新建exam407.jsp,在代码视图中输入以下代码: 
    <body>
      <%
         session.setAttribute("loginName","tom");
    out.print("成功登录,可以访问/test下的资源了!");
      %>
    </body> 

    新建exam408.jsp,在设计视图中,将站点中的“ROOT\tomcat.gif”图片插入文档中。 
    在站点根文件夹下新建一个/test下级文件夹。
    在/test文件夹下建立一个index.jsp文件,在设计视图中输入提示文字“/test的首页”。 
    新建exam409.jsp,在代码视图中输入以下代码: 

    <body>
    <%
        RequestDispatcher go=application.getRequestDispatcher("/exam406.jsp");
    go.forward(request,response);
    %>
    </body> 
    (9)启动Tomcat,自行完成测试即可。



    展开全文
  • J2EE (三) Filter详解

    千次阅读 2013-05-25 21:16:30
    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. 它的功能并不是只有这些,它给我们提供了一种思想让我们可以自由选择增加和删除一些功能功能,在程序调用过程中横向向程序里面注入代码段,注入新功能,提高了可扩展的灵活性。
    展开全文
  • Spring Security Filter详解

    万次阅读 2017-12-06 17:36:09
    经过基于注解的Spring Security原理解析分析,Spring Security本身所做的事情就是在Spring容器中注册了一系列的Filter,这些Filters在检测到满足条件的URL请求时,会执行其定义的处理过程; Security本身默认提供了...
  • servlet-filter详解

    千次阅读 2018-09-17 11:14:16
    filter:https://www.cnblogs.com/xdp-gacl/p/3948353.html servlet:https://www.cnblogs.com/xdp-gacl/p/3760336.html
  • Jersey的Filter详解

    千次阅读 2018-08-23 14:51:55
    Jersey是一款实现了JAX-RS标准的RESTful Web Services开发框架。 Jersey的Filter主要用于操作HTTP请求或响应的Headers, Methods和URI等参数。而相比较,Jersey的...1. Filter的分类 1) 根据Filter的功能 请求...
  • javaweb之Filter详解

    千次阅读 2012-10-20 00:40:44
    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能...
  • Hbase的Filter详解使用

    万次阅读 多人点赞 2017-05-24 14:42:58
    有两个参数类在各类Filter中经常出现,统一介绍下: (1)比较运算符 CompareFilter.CompareOp 比较运算符用于定义比较关系,可以有以下几类值供选择: EQUAL 相等 GREATER 大于 GREATER_OR_
  • ParaView中各filter详解

    千次阅读 2018-08-20 14:33:09
    参考资料: https://www.paraview.org/ParaView/Doc/Nightly/www/py-doc/paraview.simple.ParticleTracer.html https://www.paraview.org/Wiki/ParaView/Users_Guide/List_of_filters
  • Hbase中内置Filter详解

    万次阅读 2016-11-22 16:12:39
    一、建表 1、表名:“ORDER_TABLE” 2、列簇:“user”,“order”,“item” 3、表结构如下: ... public String get(String tableName, Filter filter) { Scan scan = new Scan(); scan.setFilter(filter);
  • j2ee中的filter详解

    千次阅读 2011-10-20 22:07:00
    过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,INCLUDE或FORWARD或REQUEST或ERROR该元素位于...
  • PHP扩展之Filter详解

    千次阅读 2011-01-18 13:31:00
    通过 可以查看是否有编译这个扩展,如果可以看到关于filter的部分,那就是已经编译了这个扩展,如果没有的话,也很简单。要么像前面提的,通过PECL来使用filter,要么通过直接把这个扩展加到PHP里面去。这些都不是...
  • Android的Intent Filter详解

    千次阅读 2010-05-26 11:55:00
    应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个Intent Filter。每个IntentFilter描述该组件所能响应Intent请求的能力——组件希望接收什么类型的请求行为,什么类型的请求...
  • spring cloud-zuul的Filter详解

    万次阅读 多人点赞 2017-03-15 21:05:42
    关于网关的作用,这里就不再次赘述了,我们今天的重点是zuul的Filter。通过Filter,我们可以实现安全控制的,比如,只有请求参数中有用户名和密码的客户端才能访问服务端的资源。那么如果来实现Filter了? 要想实现...
  • Centos6.5 iptables的Filter详解

    万次阅读 2016-05-01 02:03:48
    今天一个同学它的腾讯云服务器出现了个小问题,启动tomcat服务器后。在服务器本机上使用curl 127.0.0.1:8080访问没任何问题。但通过外网ip却一直访问不了。然后我Google的一堆解决方法,最多的还是关于防火墙...
  • Servlet中Filter详解及demo

    千次阅读 2016-06-14 18:17:38
    Filter过滤器的功能 Filter过滤器必须要实现的方法 多个Filter过滤器的执行顺序 demo Filter(过滤器)的功能Filter顾名思义就是针对浏览器的请求进行过滤,甚至是拦截。它可以在一个请求到达servlet之前进行请求的...

空空如也

1 2 3 4 5 ... 20
收藏数 161,413
精华内容 64,565
关键字:

filter详解