导航:首页 > 净水问答 > 过滤器使用才能继续传递到下一个过滤器

过滤器使用才能继续传递到下一个过滤器

发布时间:2022-04-29 02:15:15

❶ 编写servlet过滤器,下面哪个接口用于调用过滤器链中下一个过滤器

一个filter必须实现javax。servlet。Filter接口定义的三...个过滤器的过滤条件时该请求就会交给这个过滤器

❷ 过滤器使用哪个方法才能继续传递到下一个过滤器

最省事的方法就是用新型的鱼池过滤,不仅如此,新型的鱼池过滤系统还能快速反冲洗,将过滤器的脏物冲洗干净。安装简单,占地空间小,成本低了,并且后期维护方便。西普鱼池过滤就不错,整合了物理和生化双重过滤,将过滤干净重新流回泳池,使鱼池水变澄清。

❸ java web 过滤器跟拦截器的区别和使用

区别如下:

1 、拦截器是基于java的反射机制的,而过滤器是基于函数回调。

2 、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

3 、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

4 、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

5 、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

使用如下:

在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。

这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。

(3)过滤器使用才能继续传递到下一个过滤器扩展阅读

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

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

❹ 请问:如何在java过滤器更改url请求地址,然后交给下一个过滤器处理

更改地址?除非你在这个filter里重定向,第二次直接放行,到第二个filter

❺ 编写servlet过滤器时,哪个接口用于调用过滤器链中下一个过滤器

void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)这个方法有3个参数,调用过滤器链中内的下一个容过滤器用的是第三个参数

filterChain.doFilter(request, response);

❻ java连个过滤器之间的跳转

你就想定义一个filter一样定义两个filter就可以。在filter中不是有一个filterchain么,他就是把请求传递给下一个filter去处理的。

❼ 编写servlet过滤器是,哪个接口用于调用过滤器链中下一个过滤器

1、首先要明确拦截器、滤器
1.1 拦截器:
拦截器AOP(Aspect-Oriented Programming)用于某或字段访问前进行拦截前或加入某些操作拦截AOP种实现策略
Webwork文文档解释——拦截器态拦截Action调用象提供种机制使发者定义action执行前执行代码action执行前阻止其执行同提供种提取action重用部式
谈拦截器词家应该知道——拦截器链(Interceptor ChainStruts 2称拦截器栈 Interceptor Stack)拦截器链拦截器按定顺序联结条链访问拦截或字段拦截器链拦截器按其前定义顺序调用
1.2. 拦截器实现原理:
部候拦截器都通代理式调用Struts 2拦截器实现相简单请求达Struts 2ServletDispatcherStruts 2查找配置文件并根据其配置实例化相拦截器象串列表(list)调用列表拦截器
1.3 滤器
滤器程序先于与相关servlet或JSP页面运行服务器滤器附加或servlet或JSP页面并且检查进入些资源请求信息滤器作选择:
①规式调用资源(即调用servlet或JSP页面)
②利用修改请求信息调用资源
③调用资源发送响应客户机前其进行修改
④阻止该资源调用代转其资源返特定状态代码或替换输

1.4 Servlet滤器基本原理
Servlet作滤器使用客户请求进行处理处理完交给滤器处理客户请求滤链逐处理直请求发送目标止例某网站提交修改注册信息网页用户填写完修改信息并提交服务器进行处理需要做两项工作:判断客户端否效;提交数据进行统编码两项工作由两滤器组滤链进行处理滤器处理功提交数据发送终目标;滤器处理功视图派发指定错误页面
-

❽ 关于Servlet过滤器的问题

相同,1,如果没有过滤器的话,会跳转到过滤器处理后的request请求的页面,专如果你用的是request跳转页面,就属相同,如果用response那么就是重定向,他们的request和response就不相同,

2.chain.doFilter(request,response)之后的代码是在你过滤器放行之后,把你当前的请求执行完过后才执行的,比如说:用户发送一个请求到你的服务器,被你的过滤器拦截下来了,并且过滤通过以后,那么它会完成当前请求所需要的操作。当请求完成的时候,服务器要响应给客户端的时候,它就会执行你chain.doFilter(request,response)之后的代码

❾ 如何开发传输过滤器

在开发自己的 filter 之前,看看 DMO(DirectX Media Object)是否满足你的要求,因为 DMO 可以做许多和 filter
相同的工作,但是开发 DMO 比开发 filter 要简单多了。开发 transform filter 主要有下面的几个步骤,努力的遵循

第一步选择一个基类
下面的基类适合开发 transform filter。
CTransformFilter 就是为了 transform filter 而设计的基类,这个类中有分开的输入和输出 buffers,这种类型的
filter 有时也称作 -transform filter,当一个 -transform filter 接收到一个输入 samples 的时候,它就
将 sample 写入到一块新的输出 buffer 中,然后将这个新的 buffer 传递给下一个 filter。
CTransInPlaceFilter,这个类型的 filter 在原来的 buffer 里修改 data,也叫 trans-in-place filters.
当这种类型的 filter 接收到一个 sample,它改变这个 sample 中的数据,然后将 sample 传递下去,这种类型的输入
pin 和输出 pin 总是按照某个媒体类型连接起来。
CVideoTransformFilter 这个类型的 filter 仅仅是为了视频解码器设计的。从 CTransFormFilter 派生而来,但是这
个 filter 可以根据下游的 render 自动的丢弃 data。
CBaseFilter 是个总基类,所有的 filter 都是从这个类派生出去的。如果上面的 filter 都不适合你,那么你只有自
己从这个基类中派生了。
第二步声明自己的 Filter 类
首先声明一个从基类派生的 c++类
class CRleFilter : public CTransformFilter
{
/* Declarations will go here. */
};
每个 filter 类都需要连接的 pin 类。根据你的需要,你要派生和你的 filter 连接的 pin 类。
你还要给你的 filter 设置一个不能重复的 CLSID,你可以利用 Guidgen or Uuidgen 来产生一个 128 位 CLSID,切忌
不要拷贝其它的 filter 的。有很多种方法来声明 CLSID,下面的例子使用了 DEFINE_GUID 宏。
[RleFilt.h]
// {1915C5C7-02AA-415f-890F-76D94C85AAF1}
DEFINE_GUID(CLSID_RLEFilter,
0x1915c5c7, 0x2aa, 0x415f, 0x89, 0xf, 0x76, 0xd9, 0x4c, 0x85, 0xaa, 0xf1);

[RleFilt.cpp]
#include
#include "RleFilt.h"
然后,给你的 filter 写一个构造函数
CRleFilter::CRleFilter()
: CTransformFilter(NAME("My RLE Encoder"), 0, CLSID_RLEFilter)
{
/* Initialize any private variables here. */
}
注意,构造函数中有个参数就是我前面定义的 CLSID。
第三步 支持媒体类戏协议
当两个 pin 连接的时候,他们必须就某种媒体类型达成一致协议,否则连接失败,数据媒体类型描述了数据的格式,
如果没有媒体类型,一个 filter 可能传递一种类型的数据,然后其它的 filte 却不能识别这种数据。
Pin 连接的时候达成协议的机制主要通过 IPin::ReceiveConnection 方法来实现的。输出 pin 用某种媒体类型作参数
调用输入 pin 上的这个方法,输入 pin 要么接受,要么拒绝。如果输入 pin 拒绝连接,那么输出 pin 更改一下媒体类
型继续连接,直至所有的媒体类型都连接一遍,如果没有找到合适的媒体的类型,那么连接失败。
在输入 pin 也可以通过 IPin::EnumMediaTypes 方法来任意的枚举它所支持的媒体类型 list。输出 pin 可以通过这个
list 也可以检查是否支持某种媒体类型。
CTransformFilter 实现一个通用的框架。如下
1 输入 pin 没有首选的媒体类型,这个主要看上游的 filter 提议的媒体类型。对于视频数据,媒体类型包括图片的
大小,和桢率,这个信息必须由上游的源 filter 或者 parser filter 提供。对于音频数据,设置的数据格式就小了
许多,因此,要重载输入 pin 的 CBasePin::GetMediaType
2 当上游的 filter 提议一个媒体类型进行连接的时候,输入 pin 就调用
CTransformFilter::CheckInputType 方法,这个方法拒绝和接受媒体类型。
3 只有输入 pin 连接以后,输出 pin 才能够连接,这个是属于 transform filter 的一个特性。大多数情况下,filter
在设置输出 pin 的 type 之前一定要设置好输入 pin 的类型
4 当输出 pin 没有连接的时候,它向下游 filter 连接的时候,要枚举本 filter 支持的媒体类型,形成一个 list,他
通过调用 CTransformFilter::GetMediaType 方法来产生这个 list,输出 pin 会就下游 filter 所支持的所有的媒体类
型进行连接
5 为了检测输入 pin 是否支持某个特定的输出媒体类型,输出 pin 通过调用 CTransformFilter::CheckTransform 方
法。
上面列出的三个 CTransformFilter 方法都是纯虚函数,因此你的 filter 必须实现这三个函数
当上游的 filter 连接的时候提议一个媒体类型,那么输入 pin 就会调用函数
virtual HRESULT CheckInputType(const CMediaType* mtIn) pure;
这个函数包含了一个 CMediaType 类型的对象指针,这个类型封装了一个 AM_MEDIA_TYPE 结构。在这个函数中,你要
检查 AM_MEDIA_TYPE 结构的中相关的 field,如果该结构中有任何 fied 不合法,就返回 VFW_E_TYPE_NOT_ACCEPTED,
如果所有的媒体类型都是正确的,返还 S_OK
,例如,在 RLE 编码 filter,输入类型必须是 8 位或者 4 位的没有压缩的 RGB 视频。没有必要支持其它的输入格式,
例如 16,24 位,因为那样,filter 还得进行转换。下面的例子假定 filter 只支持 8 位的视频,不支持 4 位的视频
HRESULT CRleFilter::CheckInputType(const CMediaType *mtIn)
{
if ((mtIn->majortype != MEDIATYPE_Video) ||
(mtIn->subtype != MEDIASUBTYPE_RGB8) ||
(mtIn->formattype != FORMAT_VideoInfo) ||
(mtIn->cbFormat < sizeof(VIDEOINFOHEADER)))
{
return VFW_E_TYPE_NOT_ACCEPTED;
}

VIDEOINFOHEADER *pVih =
reinterpret_cast(mtIn->pbFormat);
if ((pVih->bmiHeader.biBitCount != 8) ||
(pVih->bmiHeader.biCompression != BI_RGB))
{
return VFW_E_TYPE_NOT_ACCEPTED;
}

// Check the palette table.
if (pVih->bmiHeader.biClrUsed > PALETTE_ENTRIES(pVih))
{
return VFW_E_TYPE_NOT_ACCEPTED;
}
DWORD cbPalette = pVih->bmiHeader.biClrUsed * sizeof(RGBQUAD);
if (mtIn->cbFormat < sizeof(VIDEOINFOHEADER) + cbPalette)
{
return VFW_E_TYPE_NOT_ACCEPTED;
}

// Everything is good.
return S_OK;
}
在这个例子中,函数首先检查 major type and subtype,然后检查格式类型,为了确保 block 格式是一个
VIDEOINFOHEADER 结构,这个 filter 也要支持 VIDEOINFOHEADER2,
如果格式类型是正确的,这个 sample 还得检查 VIDEOINFOHEADER 结构的 biBitCount and biCompression members,
2 virtual HRESULT GetMediaType(int iPosition, CMediaType *pMediaType) PURE;
CTransformFilter::GetMediaType 根据序号 iPositiong 返回一个 fiter 支持的输出类型。只有输入 pin 被连接上以
后,这个方法才会被调用,因此,你可以利用上游 filter 支持的媒体类型来决定下游输出的媒体类型
下面的例子返回一个输出媒体类型,这个输出是根据输入类型修改的
HRESULT CRleFilter::GetMediaType(int iPosition, CMediaType *pMediaType)
{
ASSERT(m_pInput->IsConnected());
if (iPosition < 0)
{
return E_INVALIDARG;
}
if (iPosition == 0)
{
HRESULT hr = m_pInput->ConnectionMediaType(pMediaType);
if (FAILED(hr))
{
return hr;
}
FOURCCMap fccMap = FCC('MRLE');
pMediaType->subtype = static_cast(fccMap);
pMediaType->SetVariableSize();
pMediaType->SetTemporalCompression(FALSE);

ASSERT(pMediaType->formattype == FORMAT_VideoInfo);
VIDEOINFOHEADER *pVih =
reinterpret_cast(pMediaType->pbFormat);
pVih->bmiHeader.biCompression = BI_RLE8;
pVih->bmiHeader.biSizeImage = DIBSIZE(pVih->bmiHeader);
return S_OK;
}
// else
return VFW_S_NO_MORE_ITEMS;
}
这个例子函数中,调用了 IPin::ConnectionMediaType 从输入 pin 上得到输入的媒体类型。然后改变了媒体类型结构
的几个 filed,表示是压缩格式
1 It assigns a new subtype GUID, which is constructed from the FOURCC code 'MRLE', using the FOURCCMap
class.
2 It calls the CMediaType::SetVariableSize method, which sets the bFixedSizeSamples flag to FALSE and the
lSampleSize member to zero, indicating variable-sized samples.
3 It calls the CMediaType::SetTemporalCompression method with the value FALSE, indicating that every frame
is a key frame. (This field is informational only, so you could safely ignore it.)
4 It sets the biCompression field to BI_RLE8.
5 It sets the biSizeImage field to the image size.
3 virtual HRESULT CheckTransform(const CMediaType* mtIn, const CMediaType* mtOut) PURE;
CTransformFilter::CheckTransform 检查输出的媒体类型和输入的媒体类型是否匹配。当输入 pin 在输出 pin 连接之
后才开始连接的时候,输出 pin 会调用这个函数来检查输出媒体类型是否和输入媒体类型是否匹配。
下面的例子演示了查询数据的格式是否为 RLE8 视频,图像的大小是否和输入的匹配,调色板的入口是否一致,如果
图像大小不一致就要拒绝
HRESULT CRleFilter::CheckTransform(
const CMediaType *mtIn, const CMediaType *mtOut)
{
// Check the major type.
if (mtOut->majortype != MED

阅读全文

与过滤器使用才能继续传递到下一个过滤器相关的资料

热点内容
污水处理厂运行台账需要哪些 浏览:872
过滤阻力主要是 浏览:288
怎么去掉暖瓶里的水垢 浏览:210
不锈钢胆除水垢方法 浏览:143
梯形树脂瓦图片大全 浏览:151
麻将净化器灯什么牌子 浏览:316
高效率超声除垢设备 浏览:34
小分子水和纯净水自来水哪个解渴 浏览:919
污水处理工艺管线设计计算 浏览:540
厦门市环保局洗车场污水处理 浏览:309
饮水机不干净会有什么影响 浏览:585
白酒淀粉过滤使用方法 浏览:329
深圳公司污水处理 浏览:699
污水处理厂泥饼含水率化验怎么做 浏览:303
用蒸馏水洗衣服好吗 浏览:524
污水排放每人每天多少立方 浏览:854
ro膜净水机的水的味道 浏览:245
华谊阻燃树脂 浏览:895
污水净化有哪些风险 浏览:341
水垢大软管硬管淋浴 浏览:59