Java Servlet过滤器

Java Servlet Filter是Java Web应用程序中最重要的Web组件。它可以拦截HTTP Web通信中的请求和响应。它可以提取和操作客户端和Web服务器之间交换的数据。因此,可以编写代码来预处理请求并使用它对响应进行后处理。您可以在请求传递给被调用资源之前执行日志记录,身份验证,操作会话属性等操作。您还可以在响应数据发送回客户端之前执行编码,格式化等操作。

Java Servlet Filter的优势

  1. 使Web应用程序的常见任务变得简单:
    在这里插入图片描述
    例如,当要验证会话对象以确保用户已登录每个jsp页面或servlet调用时。您可以在每个被调用的Web资源中调用用户身份验证代码。但是维护并不容易。如果添加新的servlet或jsp页面。您还必须向它们添加身份验证代码。使用 java servlet 过滤器,您可以轻松解决问题。您只需要在过滤器的 doFilter()方法中编写用户身份验证代码。并在web.xml中配置此java servlet过滤器应用于哪些Web资源。然后,首先处理对此java servlet过滤器类过滤的资源的所有请求。如果添加新的Web资源,则只需要在web.xml中添加xml配置,不需要更改源代码。

  2. Java Servlet Filter是可插入的:
    您可以创建多个java servlet过滤器并将它们应用于不同的资源。每个人都可以拥有自己的目的,例如记录请求数据,身份验证,更改请求字符集,压缩响应数据以及向http响应添加cookie或标头。您还可以配置java servlet过滤器顺序,以便处理请求他们所有人一个接一个。这也称为java servlet过滤器链。

  3. 动态:
    Java Servlet过滤器在Web容器启动时加载。当请求进入时,容器将在运行时调用它。并自动拦截请求和响应。

  4. 声明性:
    Java Servlet Filter在web.xml(java Web应用程序描述符)中声明。如果要配置新的,只需要在web.xml中声明它,不需要更改java和jsp页面代码。

  5. 模块化:
    因为每个Filter通常用于封装一个通用的逻辑功能。因此,一个过滤器类只是一个模块化功能单元。您可以轻松地向Web应用程序资源添加或删除任何过滤器(模块化功能)。

  6. Portable:
    基于java,因此它可以在java平台和web容器中移植。
    可重用: 因为它是可移植的并以声明方式配置,因此很容易在不同的Web应用程序中重用。

  7. 透明:
    因为它处理客户端和服务器之间的请求或响应,而不会对Web资源提供的核心处理产生任何影响。因此,对于目标资源,Filter是透明的,可以在必要时添加或删除到资源。但它不会打破网络资源。

  8. 结论:
    简而言之,Java Servlet Filter是通过web.xml灵活声明的模块化,可移植和可重用的Web组件。它可以透明地动态预处理请求或后处理响应。

Servlet过滤器实现
javax.servlet.Filter接口用于创建过滤器类。它包含Filter的所有生命周期方法。它由Web容器管理。

  1. void init(FilterConfig fConfig) :当容器加载并初始化Filter类时调用此方法。它只在它的生命周期中被调用一次。您应该初始化资源,例如获取数据库连接,打开文件处理程序。
    FilterConfig输入参数用于从Web应用程序配置文件(web.xml)获取此Filter的init参数。它还可以返回ServletContext对象以获取容器相关信息。
  2. doFilter(ServletRequest请求,ServletResponse响应,FilterChain链): 每次web容器调用此类时,都会执行此方法中的java代码。您可以使用Web容器提供的请求和响应对象来提取和操作请求或响应数据。您可以调用过滤器链中的下一个过滤器,或者使用FilterChain 对象将请求数据传递给目标资源 。
  3. void destroy(): 当容器删除Filter对象时调用此方法。您应该关闭在init()mehtod中打开的所有资源(例如数据库连接,文件处理程序)。此方法仅调用一次。

在配置文件中配置过滤器

有两种方法可以配置Filter对象。

  1. 在web.xml中声明:
  <!-- This is declaration. -->
  <filter>
    <display-name>Authenticate login credential.</display-name>
    <!-- This is the name. -->
    <filter-name>LoginAuthFilter</filter-name>
    <!-- This is the implementation class.  -->
    <filter-class>com.dev2qa.example.servlet.filter.LoginAuthFilter</filter-class>
  </filter>
  
  <!-- When request url match the url-pattern, the mapping filter will be invoked. -->
  <filter-mapping>
    <!-- This is just the filter name decalred above. -->
    <filter-name>LoginAuthFilter</filter-name>
    <!-- This is the request url such as http://localhost:8080/Dev2qaWebAppExample/HelloWorld -->
    <url-pattern>/HelloWorld</url-pattern>
  </filter-mapping>
  1. 使用WebFilter Annotation
    在Servlet 3.0中,可以使用javax.servlet.annotation.WebFilter来声明它。这个注释还有其他参数,可以定义它的名称,init参数,url模式等。但是如果你经常更改配置,最好使用web.xml。因为它不需要重新编译java类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值