java过滤器——filter的使用和配置

简介: 在做DRP的过程中用到了filter。前几天昌哥和欢姐在小会议室向我们介绍了AOP的思想,用到filter时觉得它们两者特别相似。

      在做DRP的过程中用到了filter。前几天昌哥和欢姐在小会议室向我们介绍了AOP的思想,用到filter时觉得它们两者特别相似。


      如下图:

13.png

      javaweb开发中,request和response是两个必不可少的对象,他们是在接收到每一次客户端请求后,由web服务器产生的。filter可以在request到达servlet之前和response即离开servlet时分别对它们进行处理。


      filter常常用于网站过滤敏感词汇、设置字符集、日志等比较“公共性”的事件处理中。


      在我们正常的编程中,每一条线,都是从上到下依次调用,而filter是在每一个完整的调用中横着“切了一刀”。通过配置,它可以对任意代码路径进行过滤。


 


      这里以转码/设置字符集为例,简单了解一下如何使用filter。


     


      建立Filter


      CharsetEncodingFilter.java

package com.drp.filter;
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;
/**采用filter统一处理filter
 * @author Danny
 *
 */
public class CharsetEncodingFilter implements Filter {
  @Override
  public void destroy() {}
  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    System.out.println("CharsetEncodingFilter---->>>>Filter开始");
    request.setCharacterEncoding("utf-8");    //设置字符集
    chain.doFilter(request, response);    //继续执行
                System.out.println("CharsetEncodingFilter---->>>>Filter结束");
  }
  @Override
  public void init(FilterConfig config) throws ServletException {}
}


      此过滤器CharsetEncodingFilter实现了javax.servlet.Filter接口(任何filter过滤器也必须实现这个接口);在服务器创建此filter并进行初始化执行init方法时,读取配置文件并存入FilterConfigure的对象中;实现doFilter方法,在请求到达jsp之前将字符集编码设置为utf-8,chain.doFiler()方法的作用是在对request对象进行处理之后,跳转到被拦截的servlet继续执行,执行完之后还要回到此处,chain.doFilter()下面还可以对response对象进行处理。


      配置filter


      web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
  xmlns="http://java.sun.com/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <filter>
    <filter-name>CharsetEncodingFilter</filter-name>
    <filter-class>com.drp.filter.CharsetEncodingFilter</filter-class>
  </filter>
  <filter-mapping><!-- 此filter对所有的jsp页面都有过滤效果 -->
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
</web-app>

      此处配置所起的作用是,此filter对所有的jsp页面都有设置字符集的效果,当每次访问jsp页面时,都会执行filter中的doFilter()方法,因此每次访问jsp页面前后,都可以在Console中看到doFilter方法输出的 “ CharsetEncodingFilter---->>>>Begin ” 和 “CharsetEncodingFilter---->>>>End ”。


      除此之外还有其他几种对filter作用域配置的方式:


      对所有的对象都有过滤效果


<filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

       对sysmgr下的所有对象都有过滤效果,无论是servlet还是jsp


<filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>/sysmgr/*</url-pattern>
</filter-mapping>


      只对指定的servlet具有过滤效果


<filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>/servlet/LoginServlet</url-pattern>
</filter-mapping>


 至此,无论访问哪个jsp页面,都会事先设置其字符集,不用分别对每个页面都进行设置了。


相关文章
|
人工智能 前端开发 Java
2025年WebStorm高效Java开发全指南:从配置到实战
WebStorm 2025不仅是一款强大的JavaScript IDE,也全面支持Java开发。本文详解其AI辅助编程、Java特性增强及性能优化,并提供环境配置、高效开发技巧与实战案例,助你打造流畅的全栈开发体验。
1077 4
|
Java 应用服务中间件 Linux
在Java 12环境中配置和部署Apache Tomcat的步骤。
这段部署Tomcat的冒险旅程充满技术挑战,但同时也像游戏一样充满乐趣。它需要你提前准备,仔细执行,并随时准备解决意外情况。成功后,你就可以在这匹强壮的网络野马上,带着你的Java应用,冲向Web开发的璀璨星空。
460 56
|
存储 搜索推荐 算法
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
本文深入探讨了Java大数据技术在智能金融理财产品风险评估与个性化配置中的关键应用。通过高效的数据采集、存储与分析,Java大数据技术助力金融机构实现精准风险评估与个性化推荐,提升投资收益并降低风险。
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
|
Java Shell 数据库
【YashanDB知识库】调用外部UDF未能识别Java环境配置
【YashanDB知识库】调用外部UDF未能识别Java环境配置
【YashanDB知识库】调用外部UDF未能识别Java环境配置
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
23571 12
|
Java
CentOS7.8配置Adoptium-Java17运行环境
本指南介绍如何设置清华镜像源并安装 Temurin-17-JRE 运行环境。首先,编辑 `/etc/yum.repos.d/adoptium.repo` 文件,配置清华镜像源。接着,使用 `yum install -y temurin-17-jre` 命令安装 Temurin-17-JRE,并通过 `java --version` 验证安装成功。相关配置和操作界面截图附后。
1281 8
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
9451 4
|
监控 Java 数据管理
java会话跟踪和拦截器过滤器
本文介绍了Web开发中的会话跟踪技术——Cookie与Session,以及过滤器(Filter)和监听器(Listener)的概念和应用。Cookie通过在客户端记录信息来识别用户,而Session则在服务器端保存用户状态。过滤器用于拦截和处理请求及响应,监听器则监控域对象的状态变化。文章详细解释了这些技术的实现方式、应用场景和主要方法,帮助开发者更好地理解和使用这些工具。
404 1
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
546 2