来自当知百科
跳转到: 导航搜索

目录

特点功能

  它新增加的功能包括:

  1. 应用程序生命周期事件控制;

  2. 新的国际化;

  3. 澄清了类的装载规则;

  4. 新的错误及安全属性;

  5. 不赞成使用HttpUtils 类;

  6. 各种有用的方法;

  7. 阐明并扩展了几个servlet DTD;

  8. filter功能.

filter功能介绍

  其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response. Filter不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servletchaining“(servlet 链).

一个filter 包括:

  1. 在servlet被调用之前截获;

  2. 在servlet被调用之前检查servlet request;

  3. 根据需要修改request头和request数据;

  4. 根据需要修改response头和response数据;

  5. 在servlet被调用之后截获.

  你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter使用.几个实用的filter包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLTfilter等.

  一个filter必须实现javax.servlet.

Filter接口并定义三个方法:

  1.void setFilterConfig(FilterConfig config) //设置filter 的配置对象;

  2. FilterConfig getFilterConfig() //返回filter的配置对象;

  3. void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) //执行filter 的工作.

  服务器每次只调用setFilterConfig方法一次准备filter的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置FilterConfig为空来指明filter已经终结.

  每一个filter从doFilter()方法中得到当前的request及response.在这个方法里,可以进行任何的针对request及response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个filter在doFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下一个filter.

  一个filter可以包装request或response以改变几个方法和提供用户定制的属性.Api2.3提供了HttpServletRequestWrapper和HttpServletResponseWrapper来实现.它们能分派最初的request和response.如果要改变一个方法的特性,必须继承wapper和重写方法.下面是一段简单的日志filter用来记录所有request的持续时间.

  public class LogFilter implements Filter {

  FilterConfig config;

  public void setFilterConfig(FilterConfig config) {

  this.config = config;

  }

  public FilterConfig getFilterConfig() {

  return config;

  }

  public void doFilter(ServletRequest req,

  ServletResponse res,

  FilterChain chain) {

  ServletContext context = getFilterConfig().getServletContext();

  long bef = System.currentTimeMillis();

  chain.doFilter(req, res); // no chain parameter needed here

  long aft = System.currentTimeMillis();

  context.log("Request to " + req.getRequestURI()

  + ": " + (aft-bef));

  }

  }

  当server调用setFilterConfig(),filter保存config信息.在doFilter()方法中通过config信息得到servletContext.如果要运行这个filter,必须去配置到web.xml中.以tomcat4.01为例:

  <filter>

  <filter-name>

  log //filter 名字

  </filter-name>

  <filter-class>

  LogFilter //filter class(上例的servlet)

  </filter-class>

  </filter>

  <filter-mapping>

  <filter-name>log</filter-name>

  <servletname>servletname</servlet-name>

  </filter-mapping>

  <servlet>

  <servlet-name>servletname</servletname>

  <servletclass>servletclass</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>servletname</servlet-name>

  <url-pattern>*</url-pattern>

  </servlet-mapping>

  把这个web.xml放到web-inf中(详请参考tomcat帮助文档).

  当每次请求一个request时(如index.jsp),先到LogFilter中去并调用doFilter()方法,然后才到各自的servlet中去.如果是一个简单的servlet(只是一个页面,无任何输出语句),那么可能的输出是:

  Request to /index.jsp: 10

  Filter是一个COM组件,由一个或多个Pin组成。Pin也是一个COM组件。Filter文件的扩展名为.ax,但也可以是.dll。Filter根据其包含Inputpin或Output pin的情况(或在Filter Graph中的位置),大致可分为三类:SourceFilter(仅有Output pin)、Transform Filter(同时具有Input pin和Outputpin)和Renderer Filter(仅有Input pin)。

  一般情况下,创建Filter使用一个普通的Win32DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过调用CoCreateInstance函数创建Filter实例;Filter与应用程序在二进制级别协作。另外一种方法,也可以在MFC的应用程序项目中创建Filter。这种情况下,Filter不需注册为COM组件,Filter与应用程序之间的协作是源代码级别的;创建Filter实例,不再使用CoCreateInstance函数,而是直接new出一个Filter对象,如下:

  m_pFilterObject = new CFilterClass();

  // make the initial refcount 1 to match COM creation

  m_pFilterObject ->AddRef();

  因为Filter的基类实现了对象的引用计数,所以即使在第二种情况下,对创建后的Filter对象的操作也完全可以遵循COM标准。

  Filter是一个独立功能模块,最好不要将Filter依赖于其他第三方的DLL。因为Filter具有COM的位置透明性特点,Filter文件可以放在硬盘的任何位置,只要位置移动后重新注册。但此时,如果Filter依赖其他DLL,则Filter对该DLL的定位就会出现问题。

  Filter不能脱离Filter Graph单独使用。所以,如果你想绕过FilterGraph直接使用Filter实现的模块功能,请将你的Filter移植成DMO(DirectX MediaObject)。对于DirectShow应用程序开发者来说,还有一点,请不要忘记使用OleInitialize进行初始化。

  2. Filter的注册

  Filter是COM组件,所以在使用前一定要注册。Filter的注册程序为regsvr32.exe。如果带上命令行参数/u,表示注销;如果带上是/s,表示不弹出任何注册/注销成功与否的提示对话框。如果你想在BuildFilter项目的时候进行自动注册,请在VC的Project settings的Custom Build页如下设置:

  Description: Register filter

  Commands: regsvr32 /s /c $(TargetPath)

  echo regsvr32 exe.time > $(TargetDir)\$(TargetName).trg

  Outputs: $(TargetDir)\$(TargetName).trg

  Filter的注册信息包括两部分:基本的COM信息和Filter信息。注册信息都存放在注册表中。前者的位置为:HKEY_CLASSES_ROOT\CLSID\FilterClsid\,后者的位置为:HKEY_CLASSES_ROOT\CLSID\Category\Instance\ FilterClsid\。COM信息标示了Filter是一个标准的可以通过CoCreateInstance函数创建的COM组件,Filter信息标示了我们通过Graphedit看到的描述这个Filter的信息。如果你不想让Graphedit看到(或者让Filter枚举器找到)你写的Filter,你完全可以不注册Filter信息。而且不用担心,你这么做也完全不会影响Filter的功能。

  屏蔽注册Filter信息的方法也很简单。因为CBaseFilter实现了IAMovieSetup接口的两个函数:Register和Unregister。我们只需重载这两个函数,直接returnS_OK就行了。

  Filter的Merit值。这个值是微软的“智能连接”函数使用的。在Graphedit中,当我们加入一个SourceFilter后,在它的pin上执行“Render”,会自动连上一些Filter。Merit的值参考如下:

  MERIT_PREFERRED = 0x800000,

  MERIT_NORMAL = 0x600000,

  MERIT_UNLIKELY = 0x400000,

  MERIT_DO_NOT_USE = 0x200000,

  MERIT_SW_COMPRESSOR = 0x100000,

  MERIT_HW_COMPRESSOR = 0x100050

  Merit值只有大于MERIT_DO_NOT_USE的时候才有可能被“智能连接”使用;Merit的值越大,这个Filter的机会就越大。

  3. Filter之间Pin的连接过程

  Filter只有加入到FilterGraph中并且和其它Filter连接成完整的链路后,才会发挥作用。Filter之间的连接(也就是Pin之间的连接),实际上是连接双方的一个Mediatype的协商过程。连接的方向总是从Output pin指向Inputpin。连接的大致过程为:如果调用连接函数时已经指定了完整的Media type,则用这个Mediatype进行连接,成功与否都结束连接过程;如果没有指定或不完全指定了Media type,则进入下面的枚举过程。枚举欲连接的Inputpin上所有的Media type,逐一用这些Media type与Output pin进行连接(如果连接函数提供了不完全Mediatype,则要先将每个枚举出来的Media type与它进行匹配检查),如果Output pin也接受这种Mediatype,则Pin之间的连接宣告成功;如果所有Input pin上枚举的Media type,Outputpin都不支持,则枚举Output pin上的所有Media type,并逐一用这些Media type与Inputpin进行连接。如果Input pin接受其中的一种Media type,则Pin之间的连接到此也宣告成功;如果Outputpin上的所有Media type,Input pin都不支持,则这两个Pin之间的连接过程宣告失败。

  每个Pin都可以实现GetMediaType函数来提供该Pin上支持的所有Preferred Mediatype(但一般只在Output pin上实现,Input pin主要实现CheckMediaType看是否支持当前提供的Mediatype就行了)。连接过程中,Pin上枚举得到的所有Media type就是这里提供的。

  在CBasePin类中有一个protected的成员变量m_bTryMyTypesFirst,默认值为false。在我们定制Filter的Outputpin中改变这个变量的值为true,可以定制我们自己的连接过程(先枚举Output pin上的Media type)。

  当Pin之间的连接成功后,各自的pin上都会调用CompleteConnect函数。我们可以在这里取得一些连接上的Mediatype的信息,以及进行一些计算等。在Outputpin的CompleteConnect实现中,还有一个重要的任务,就是协商FilterGraph运行起来后Sample传输使用的内存配置情况。这同样是一个交互过程:首先要询问一下Inputpin上的配置要求,如果Input pin提供内存管理器(Allocator),则优先使用Inputpin上的内存管理器;否则,使用Outputpin自己生成的内存管理器。我们一般都要实现DecideBufferSize来决定存放Sample的内存大小。注意:这个过程协商完成之后,实际的内存并没有分配,而要等到Outputpin上的Active函数调用。

  4. Filter Media type概述

  Mediatype一般可以有两种表示:AM_MEDIA_TYPE和CMediaType。前者是一个Struct,后者是从这个Struct继承过来的类。

  每个Media type有三部分组成:Major type、Subtype和Formattype。这三个部分都使用GUID来唯一标示。Major type主要定性描述一种Mediatype,比如指定这是一个Video,或Audio或Stream等;Subtype进一步细化Mediatype,如果Video的话可以进一步指定是UYVY或YUY2或RGB24或RGB32等;Formattype用一个Struct更进一步细化Media type。

  如果Media type的三个部分都是指定了某个具体的GUID值,则称这个Media type是完全指定的;如果Mediatype的三个部分中有任何一个值是GUID_NULL,则称这个Media type是不完全指定的。GUID_NULL具有通配符的作用。

  常用的Major type:

  MEDIATYPE_Video;

  MEDIATYPE_Audio;

  MEDIATYPE_AnalogVideo; // Analog capture

  MEDIATYPE_AnalogAudio;

  MEDIATYPE_Text;

  MEDIATYPE_Midi;

  MEDIATYPE_Stream;

  MEDIATYPE_Interleaved; // DV camcorder

  MEDIATYPE_MPEG1SystemStream;

  MEDIATYPE_MPEG2_PACK;

  MEDIATYPE_MPEG2_PES;

  MEDIATYPE_DVD_ENCRYPTED_PACK;

  MEDIATYPE_DVD_NAVIGATION;

  常用的Subtype:

  MEDIASUBTYPE_YUY2;

  MEDIASUBTYPE_YVYU;

  MEDIASUBTYPE_YUYV;

  MEDIASUBTYPE_UYVY;

  MEDIASUBTYPE_YVU9;

  MEDIASUBTYPE_Y411;

  MEDIASUBTYPE_RGB4;

  MEDIASUBTYPE_RGB8;

  MEDIASUBTYPE_RGB565;

  MEDIASUBTYPE_RGB555;

  MEDIASUBTYPE_RGB24;

  MEDIASUBTYPE_RGB32;

  MEDIASUBTYPE_ARGB32; // Contains alpha value

  MEDIASUBTYPE_Overlay;

  MEDIASUBTYPE_MPEG1Packet;

  MEDIASUBTYPE_MPEG1Payload; // Video payload

  MEDIASUBTYPE_MPEG1AudioPayload; // Audio payload

  MEDIASUBTYPE_MPEG1System; // A/V payload

  MEDIASUBTYPE_MPEG1VideoCD;

  MEDIASUBTYPE_MPEG1Video;

  MEDIASUBTYPE_MPEG1Audio;

  MEDIASUBTYPE_Avi;

  MEDIASUBTYPE_Asf;

  MEDIASUBTYPE_QTMovie;

  MEDIASUBTYPE_PCM;

  MEDIASUBTYPE_WAVE;

  MEDIASUBTYPE_dvsd; // DV

  MEDIASUBTYPE_dvhd;

  MEDIASUBTYPE_dvsl;

  MEDIASUBTYPE_MPEG2_VIDEO;

  MEDIASUBTYPE_MPEG2_PROGRAM;

  MEDIASUBTYPE_MPEG2_TRANSPORT;

  MEDIASUBTYPE_MPEG2_AUDIO;

  MEDIASUBTYPE_DOLBY_AC3;

  MEDIASUBTYPE_DVD_SUBPICTURE;

  MEDIASUBTYPE_DVD_LPCM_AUDIO;

  MEDIASUBTYPE_DVD_NAVIGATION_PCI;

  MEDIASUBTYPE_DVD_NAVIGATION_DSI;

  MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER;

  常用的Format type:

  FORMAT_None

  FORMAT_DvInfo DVINFO

  FORMAT_MPEGVideo MPEG1VIDEOINFO

  FORMAT_MPEG2Video MPEG2VIDEOINFO

  FORMAT_VideoInfo VIDEOINFOHEADER

  FORMAT_VideoInfo2 VIDEOINFOHEADER2

  FORMAT_WaveFormatEx WAVEFORMATEX

  5. Filter之间的数据传送

  Filter之间的数据是通过Sample来传送的。Sample是一个COM组件,拥有自己的一段数据缓冲。Sample由Allocator统一管理。如下图所示:

  Filter之间数据传送的方式有两种:Push模式和Pull模式。

  css中的filter滤镜功能

  CSS静态滤镜样式 (filter)(只有IE4.0以上支持)

  CSS静态滤镜样式的使用方法:{ filter : filtername( parameters1, parameters2,...) }

  Filter样式 简要说明 支持参数

  alpha 设置图片或文字的不透明度opacity、finishOpacity、style、startX、startY、finishX、finishY、add、direction、strength

  blur 在指定的方向和位置上产生动感模糊效果 add、direction、strength

  chroma 对所选择的颜色进行透明处理 color

  dropShadow 在指定的方向和位置上产生阴影 color、offX、offY、positive

  flipH 沿水平方向翻转对象

  flipV 沿垂直方向翻转对象

  glow 在对象周围上发光 color、strength

  gray 将对象以灰度处理

  invert 逆转对象颜色

  light 对对象进行模拟光照

  mask 对对象生成掩膜 color

  shadow 沿对象边缘产生阴影 color、direction

  wave 在垂直方向产生正弦波形 add、freq、lightStrength、phase、strength

  xray 改变对象颜色深度,并绘制黑白图象

  以上就是静态滤镜的全部内容,要注意的是CSS是区分大小写的!

  2.CSS动态滤镜

  动态滤镜可以为页面添加动人的淡入淡出、图象转化效果,它可以分为两种blend(混合)和reveal(显示),前者可以使对象渐渐消失或出现,后者提供了24种图象转化的效果。对于动态滤镜的调用除去象在静态滤镜中要定义的滤镜类型,参数等等,还用到脚本语言控制它的状态。

  首先,在开始一个动态效果之前,先需要进行装备(Apply),然后播放(Play)动态效果,在动态效果进行中还可以中断动态效果(Stop),以上可以用下面的方法实现:

  对象名.filters(滤镜数值).Apply()

  对象名.filters(滤镜数值).Play()

  对象名.filters(滤镜数值).Stop()

  对于滤镜状态的判断可以通过“对象名.filters(滤镜数值).status”判断,该值为0时,表示滤镜未执行,为1时,表示滤镜已经完成,为2时表示滤镜在执行中。

  在定义filter时,如上面所提到的,可以有混合(“filter:blendTrans(duration=时间数值)”,duration表示滤镜执行需要的时间,单位为秒)和显示(“filter:revealTrans(duration=时间数值,transition=过渡类型)”,过渡类型为从0-23的数值)两种。

  滤镜目前还未被W3C正式承认。滤镜只是微软IE浏览器的组成部分,不能用于Netscape浏览器。制定有关标准的组织正在就此进行讨论,但尚未达成最后定论。在我看来,滤镜是一种非常有趣而且是制作精彩的视觉效果必不可少的一部分。滤镜能节省带宽,而且是你能在制作奇妙的

  视觉设计时使用文字格式,而不必先制作庞大的文字位图以取得相同的效果。

  但由于这些功能尚未成为HTML的正式组成部分,所以并不是所有的浏览器都能看到这些特色。有些时候,你必须考虑以传统的方式制作相同的效果,当然,你不得不继续将庞大的GIF文件塞到网页之中。

  沉默...沉默...

  CSS滤镜filter详解

  语法:STYLE="filter:filtername(fparameter1, fparameter2...)"

  (Filtername为滤镜的名称,fparameter1、fparameter2等是滤镜的参数)

  滤镜说明:

  alpha:设置透明层次

  blur:创建高速度移动效果,即模糊效果

  chroma:制作专用颜色透明

  DropShadow:创建对象的固定影子

  FlipH:创建水平镜像图片

  FlipV:创建垂直镜像图片

  glow:加光辉在附近对象的边外

  gray:把图片灰度化

  invert:反色

  light:创建光源在对象上

  mask:创建透明掩膜在对象上

  shadow:创建偏移固定影子

  wave:波纹效果

Xray:使对象变得像被x光照射一样

1、滤镜:Alpha

  语法:STYLE="filter:Alpha(Opacity=opacity,FinishOpacity=finishopacity,Style=style,StartX=startX,StartY=startY,FinishX=finishX,FinishY=finishY)"

  说明:

  Opacity:起始值,取值为0~100, 0为透明,100为原图。

  FinishOpacity:目标值。

  Style:1或2或3

  StartX:任意值

  StartY:任意值

  例子:filter:Alpha(Opacity="0",FinishOpacity="75",Style="2")

2、滤镜:blur

  语法:STYLE="filter:Blur(Add = add, Direction = direction, Strength= strength)"

  说明:

  Add:一般为1,或0。

  Direction:角度,0~315度,步长为45度。

  Strength:效果增长的数值,一般5即可。

  例子:filter:Blur(Add="1",Direction="45",Strength="5")

3、滤镜:Chroma

  语法:STYLE="filter:Chroma(Color = color)"

  说明:color:#rrggbb格式,任意。

  例子:filter:Chroma(Color="#FFFFFF")

4、滤镜:DropShadow

  语法:STYLE="filter:DropShadow(Color=color, OffX=offX, OffY=offY,Positive=positive)"

  说明:Color:#rrggbb格式,任意。

  Offx:X轴偏离值。

  Offy:Y轴偏离值。

  Positive:1或0。

  例子:filter:DropShadow(Color="#6699CC",OffX="5",OffY="5",Positive="1")

5、滤镜:FlipH

  语法:STYLE="filter:FlipH"

  例子:filter:FlipH

6、滤镜:FlipV

  语法:STYLE="filter:FlipV"

  例子:filter:FlipV

7、滤镜:glow

  语法:STYLE="filter:Glow(Color=color, Strength=strength)"

  说明:

  Color:发光颜色。

  Strength:强度(0-100)

  例子:filter:Glow(Color="#6699CC",Strength="5")

8、滤镜:gray

  语法:STYLE="filter:Gray"

  例子:filter:Gray

9、滤镜:invert

  语法:STYLE="filter:Invert"

  例子:filter:Invert

10、滤镜:mask

  语法:STYLE="filter:Mask(Color=color)"

  例子:filter:Mask (Color="#FFFFE0")

11、滤镜:shadow

  语法:filter:Shadow(Color=color, Direction=direction)

  说明:

  Color:#rrggbb格式。

  Direction:角度,0-315度,步长为45度。

  例子:filter:Shadow (Color="#6699CC", Direction="135")

12、滤镜:wave

  语法:filter:Wave(Add=add,Freq=freq,LightStrength=strength,Phase=phase,Strength=strength)

  说明:

  Add:一般为1,或0。

  Freq:变形值。

  LightStrength:变形百分比。

  Phase:角度变形百分比。

  Strength:变形强度。

  例子:filter: wave(Add="0", Phase="4", Freq="5", LightStrength="5",Strength="2")

13、滤镜:Xray

  语法:STYLE="filter:Xray"

  例子:filter:Xray

  工业金属乐队Filter由曾於89年到93年间担任於工业金属摇滚名团Nine Inch Nails之吉他手的RichardPatrick创建,他坚信他有绝对的新玩意儿,能做出不同於NIN时期所带出的音乐色彩,所包容与展现的音乐性也更大,便毅然决然地离开事业正如日中天的NIN。之后便与也曾在91年至93年间待过NIN的BrianLiesegang以两人完成了95年的首张专辑,在音乐上仍保有NIN工业金属/工业舞曲的狂野力道,不仅加重了摇滚与金属的份量,更加入庞克、低保真等不同的音乐风格进去,成功地让Patrick跨出旧有的音乐藩篱,朝向更多元的音乐经营理念。

  Filter也为多部电影,包括【The Crow-City Of Angels】、【Spawn】、【TheX-Files:Fight The Future】、《2012》(2009)演唱单曲。97年BrianLiesegang因音乐理念的不同而离团后,Filter再加入Frank Cavanaugh(贝斯手)、StevenGillis(鼓手)及Geno Lenardo(吉它手)三位新血成为一个更完整的四人乐团,并推出99年热门大作「Title OfRecord」,此张专辑并获得全美著名另类摇滚杂志A.P.满分推崇。 其中《Fades Like aPhotograph》为2009年上映的《2012》的第二首片尾曲。

在MATLAB中

  FILTER One-dimensional digital filter.

  Y = FILTER(B,A,X) filters the data in vector X with the

  filter described by vectors A and B to create the filtered

  data Y. The filter is a "Direct Form II Transposed"

  implementation of the standard difference equation:

  a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)

  - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

  If a(1) is not equal to 1, FILTER normalizes the filter

  coefficients by a(1).

  FILTER always operates along the first non-singleton dimension,

  namely dimension 1 for column vectors and non-trivial matrices,

  and dimension 2 for row vectors.

  [Y,Zf] = FILTER(B,A,X,Zi) gives access to initial and final

  conditions, Zi and Zf, of the delays. Zi is a vector of length

  MAX(LENGTH(A),LENGTH(B))-1, or an array with the leadingdimension

  of size MAX(LENGTH(A),LENGTH(B))-1 and with remaining dimensions

  matching those of X.

  FILTER(B,A,X,[],DIM) or FILTER(B,A,X,Zi,DIM) operates along the

  dimension DIM.

  翻译:

  Y = filter(B,A,X) 过滤向量X,通过系数向量A,B,产生向量Y。

  [Y,Zf] = filter(B,A,X,Zi)给出初始和最终条件。ZI和Zf是延迟。

个人工具
名字空间

变换
查看
操作
导航
工具箱