在JAVA中filter有啥作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JAVA中filter有啥作用?相关的知识,希望对你有一定的参考价值。

参考技术A

Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源。

例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。例如对Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。

它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

扩展资料

Filter的生命周期

和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作

filter对象只会创建一次,init方法也只会执行一次。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。

Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。

servlet中filter和chain有啥用?

【中文标题】servlet中filter和chain有啥用?【英文标题】:What is the use of filter and chain in servlet?servlet中filter和chain有什么用? 【发布时间】:2011-05-06 14:10:45 【问题描述】:

chain.doFilter(req,res); 我们在一个 servlet 程序中使用了它。我想知道 servlet 中方法 doFilter() 的用途是什么? 还有在 Java servlet 中过滤器和链的概念有什么用?

【问题讨论】:

【参考方案1】:

什么是过滤器?

Filters 用于intercept and process requests 在发送到 servlet 之前(如果有请求)。

Filters 用于intercept and process a response,然后由 servlet 发送回客户端。

为什么要使用它们?

-过滤器可以执行安全检查。

-压缩响应流。

-创建不同的响应。

doFilter() 有什么作用?

doFilter() 被称为 every time 容器确定 过滤器应应用于页面。

需要three arguments

->ServletRequest

->ServlerResponse

->过滤链

所有functionality that your filter supposed to do 都在doFilter() 方法中实现。

什么是过滤器链?

您的filters do not know anything about the other filters and servletFilterChain 通过您在DD 中定义的filter elements 知道order of the invocation of filtersdriven

【讨论】:

【参考方案2】:

过滤器用于补充 Servlet。对于用法,您应该阅读此内容,The Essentials of Filters。过滤器使用Chain of Responsibility GoF 模式实现。

【讨论】:

【参考方案3】:

Servlet 过滤器是 chain of responsibility pattern 的实现

关键是每个过滤器都位于它所映射到的每个 servlet 的“前面”和“后面”。因此,如果您有一个围绕 servlet 的过滤器,您将拥有:

void doFilter(..)  
    // do stuff before servlet gets called

    // invoke the servlet, or any other filters mapped to the target servlet
    chain.doFilter(..);

    // do stuff after the servlet finishes

您还可以选择调用chain.doFilter(..),在这种情况下永远不会调用servlet。这对于安全目的很有用 - 例如,您可以检查是否有用户登录。

【讨论】:

在写我的答案时,我收到一条消息,有人已经提供了一个。但我仍然继续努力,认为提供者一定没有提到模式和指向它的链接。但是在提交我的之后,我发现我完全错了。 +1 @Adeel Ansari 无论如何,您提供了一个我没有提供的链接 - 指向“过滤器的基本要素”的链接,所以也在那里 +1。

以上是关于在JAVA中filter有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

java 中的过滤器filter 都有啥作用

打包程序“source_ami_filter”中的“所有者”字段有啥作用?

servlet技术中的listener有啥具体作用

java中Method类有啥作用

java中FileDialog是啥类,有啥作用

java中的 validate()有啥作用