Java过滤器Filter的基本使用教程

 更新时间:2023年02月22日 11:06:36   作者:绿仔牛奶_  
过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理。本文将通过示例为大家讲解Java中过滤器Filter的用法与实现,需要的可以参考一下

过滤器Filter

  • 用于拦截请求、过滤响应
  • 在不使用过滤器时,浏览器向服务器发送请求后,服务器将会直接去获取资源并响应给浏览器
  • 添加Filter后,浏览器向服务器发送请求,请求在到达服务器之间会先经过Filter,在Filter进行一系列判断后满足条件才可以被允许通过过滤到达服务器. 而服务器的响应在抵达浏览器之前同样会先经过Filter之后才会到浏览器

Filter使用:

  • 导包:javax.servlet.Filter
  • Filter是一个接口,符合JavaEE规范
  • Filter接口的实现类被称作是一个过滤器,实现类需要重写Filter中的抽象方法
  • Filter中有三个方法如下
// init--> 初始化方法
default public void init(FilterConfig filterConfig) throws ServletException {}
// doFilter--> 过滤器实体方法
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException, ServletException;
// destroy --> 销毁过滤器的方法
default public void destroy() {}

init:在Web工程启动时就会调用进行初始化

doFilter:三个参数: request请求和response响应 chain链

FilterChain:过滤器链,当前过滤器过滤通过后会将请求或响应交给下一个过滤器执行,可以理解为当前过滤器允许该请求或响应通过

// 过滤器放行的固定写法
chain.doFilter(request, response);

destory:销毁该过滤器

配置Filter:

// 注解
@WebFilter(urlPatterns = {"/doFilter"})
// Web.xml配置  与配置Servlet方法相同
<filter>
	<filter-name>filterTest</filter-name>
	<filter-class>com.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>filterTest</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

使用实例:

向web界面输出文字,通过过滤器进行编码,不通过过滤器将会打印乱码

// 过滤器
@WebFilter(urlPatterns = {"/doFilter"})
public class Filter01 implements Filter {
    // 初始化方法
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Filter初始化完成");
    }
    // 过滤器主体
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset:utf-8");
        // 允许通过过滤器
        chain.doFilter(request, response);
    }
    // 销毁方法
    public void destroy() {
        System.out.println("Filter被销毁");
    }
}
// Servlet
@WebServlet(urlPatterns = {"/doFilter","/doNotFilter"})
public class Demo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("<h1>你好,郑州</h1>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

上述代码所示:当通过映射路径/doNotFilter将会打印出中文乱码,反之通过/doFilter则会设置好响应的中文编码正常输出

到此这篇关于Java过滤器Filter的基本使用教程的文章就介绍到这了,更多相关Java过滤器Filter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis Mapper.XML 标签使用小结

    MyBatis Mapper.XML 标签使用小结

    在MyBatis中,通过resultMap可以解决字段名和属性名不一致的问题,对于复杂的查询,引用实体或使用<sql>标签可以定义复用的SQL片段,提高代码的可读性和编码效率,使用这些高级映射和动态SQL技巧,可以有效地处理复杂的数据库交互场景
    2024-10-10
  • Go Java算法之K个重复字符最长子串详解

    Go Java算法之K个重复字符最长子串详解

    这篇文章主要为大家介绍了Go Java算法之K个重复字符最长子串详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java中Stringbuilder和正则表达式示例详解

    Java中Stringbuilder和正则表达式示例详解

    Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串,字符串连接是通过StringBuilder(或StringBuffer)类及其append方法实现的,这篇文章主要给大家介绍了关于Java中Stringbuilder和正则表达式的相关资料,需要的朋友可以参考下
    2024-02-02
  • Java学习随记之多线程编程

    Java学习随记之多线程编程

    这篇文章主要介绍了Java中的多线程编程的相关知识,文中的示例代码介绍详细,对我们的学习或工作有一定的价值,感兴趣的小伙伴可以了解一下
    2021-12-12
  • Java中List根据条件删除元素的几种方式

    Java中List根据条件删除元素的几种方式

    java List删除指定元素有四种方法,分别是普通for循环,增强for循环,CopyOnWriteArrayList以及原生的Iterator迭代器循环来删除list中指定的某个元素,非常的简单,并通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-04-04
  • Spring boot route Controller接收参数常用方法解析

    Spring boot route Controller接收参数常用方法解析

    这篇文章主要介绍了Spring boot route Controller接收参数常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java设计模式笔记之代理模式

    java设计模式笔记之代理模式

    这篇文章主要为大家详细介绍了java设计模式之代理模式笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java之通过OutputStream写入文件与文件复制问题

    Java之通过OutputStream写入文件与文件复制问题

    这篇文章主要介绍了Java之通过OutputStream写入文件与文件复制问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Spring 零基础入门WebFlux框架体系

    Spring 零基础入门WebFlux框架体系

    Spring5发布有两年了,随Spring5一起发布了一个和Spring WebMvc同级的Spring WebFlux。这是一个支持反应式编程模型的新框架体系。反应式模型区别于传统的MVC最大的不同是异步的、事件驱动的、非阻塞的,这使得应用程序的并发性能会大大提高,单位时间能够处理更多的请求
    2022-07-07
  • Hashmap非线程安全关于hash值冲突处理

    Hashmap非线程安全关于hash值冲突处理

    这篇文章主要为大家介绍了Hashmap非线程安全关于hash值冲突的处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04

最新评论