JAVA servlet doFilter()用法

Filter也就是java中的过滤器filter,联想到现实中的过滤器其实我们很容易想到它存在的意义和功能。但实际上总会有一些出入,本文我们就来详细地介绍一下这个在web开发中举足轻重的角色。

Filter是是Servlet技术中引人入胜的一种技术,它能够对目标资源的请求和响应进行截取,过滤字符编码,做一些业务逻辑上的判断等。WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的过滤功能。实际上,过滤器的配置比较简单,直接实现 Filter 接口即可,也可以通过 @WebFilter 注解实现对特定 URL 拦截,在Filter 接口中定义了三个方法。

1. init():该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。注意:这个方法必须执行成功,否则过滤器会不起作用。
2. doFilter():容器中的每一次请求都会调用该方法,从而实现过滤功能。在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作
3. destroy():当容器销毁,过滤器实例时调用该方法,一般在方法中销毁或关闭资源,在过滤器 Filter的整个生命周期也只会被调用一次。该方法的使用是为了完成某些资源的回收。

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可以进行逻辑判断,如用户是否已经登录、有没有权限访问该页面等等工作,它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关的请求,只有当你的web应用停止或重新部署的时候才能销毁。

package com.cn.util;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;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class FilterUtil implements Filter{@SuppressWarnings("unused")private FilterConfig filterConfig;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;System.out.println("过滤器Filter初始化");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {throw new ServletException("FilterUtil just supports HTTP requests");}HttpServletRequest httpRequest = (HttpServletRequest) request;HttpServletResponse httpResponse = (HttpServletResponse) response;httpRequest.setCharacterEncoding(this.filterConfig.getInitParameter("encoding"));httpResponse.setCharacterEncoding(this.filterConfig.getInitParameter("encoding"));chain.doFilter(httpRequest, httpResponse);}@Overridepublic void destroy() {System.out.println("过滤器Filter销毁");}}

web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。Filter一般用于web开发中转换图像的格式,权限管理,对请求和相应进行加密处理,对用户发送的数据进行过滤和替换等等。

过滤器Filter实际上也只是javaweb体系中的一个功能的体现,想学习更多关于javaweb的相关知识,提升自己的前端开发能力可以在网上查询相关的资料或者学习我们的专业课程来进一步的学习哦。

原文链接

JAVA servlet doFilter()用法相关推荐

  1. JAVA Servlet API简介及接口与类的用法

    本章介绍了Java Servlet API中的主要的接口与类的用法,并且介绍了它们的生命周期.表4-1 对接口与类的作用与生命周期作了归纳.这些接口与类的生命周期都由Servlet容器来控制,容器会在 ...

  2. Java Servlet完全教程

    本文来自Java Servlet完全教程 Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广 ...

  3. Java Servlet 开发常用代码、模板、问题

    一 空Servlet类模板 import java.io.IOException; mport java.io.PrintWriter; import javax.servlet.ServletExc ...

  4. Java Servlet和JSP教程

    http://www.bccn.net/article/web/jsp/jc/200409/72.html 简介 这是一个比较完整的Servlet.JSP教程,包含大量的实用资料和示例,仙人掌工作室倾 ...

  5. Java Servlet API中文说明文档

    Java Servlet API中文说明文档 目 录 1.... Servet资料 1.1      绪言 1.2      谁需要读这份文档 1.3      Java Servlet API的组成 ...

  6. Java Servlet教程– ULTIMATE指南(PDF下载)

    Java Servlets是一种基于Java的Web技术. Java Servlet技术为Web开发人员提供了一种简单,一致的机制,以扩展Web服务器的功能并访问现有的业务系统. 几乎可以将Servl ...

  7. java nodefilter类,Java Servlet Filter过滤器概述

    Java Servlet Filter过滤器概述 Filter是Servlet的过滤器,是Servlet 2.3规范中新增加的一个功能,主要用于完成一些通用的操作,如编码的过滤.判断用户的登录状态等. ...

  8. 编程基础---java Servlet 学习

    来源1 来源2 来源3 Servlet 为创建基于 web 的应用程序提供了基于组件.独立于平台的方法,可以不受 CGI 程序的性能限制.Servlet 有权限访问所有的 Java API,包括访问企 ...

  9. java servlet 教程_Java Servlet完全教程

    Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...

最新文章

  1. PHP版UTF-8文件BOM自动检测移除程序
  2. FormsAuthentication详解
  3. 分类器评价与在R中的实现:收益图与提升图
  4. Zynq的AMP开发注意事项之禁用L2 cache
  5. boost的chrono模块线程时钟的测试程序
  6. 中国科学院大学2014年数学分析高等代数考研试题
  7. SpringBoot 信息输出
  8. linux(centos)搭建SVN服务器
  9. java lock接口_Java Lock接口
  10. Oracle中修改sysman和dbsnmp密码正确流程
  11. 在32位windows 7下安装PyLucene
  12. WordPress社会化评论插件多说、有言、灯鹭、评论啦
  13. [swift 进阶]读书笔记-第八章:错误处理 C8P3 带有类型的错误
  14. Visual Basic.Net连各种数据库的几种方法
  15. ok6410开发板移植DirectFB手记
  16. mysql check约束无效
  17. python九九乘法表代码中的i+1的意思_python---九九乘法表代码
  18. Mac如何共享wifi热点
  19. python爬虫爬取强智教务系统过程
  20. 斯坦福「AI百年研究」首份报告:2030年的人工智能与生活

热门文章

  1. 手把手教你系列 - Particle粒子特效(上)
  2. OpenCV-基于自定义色条实现灰度图上色
  3. 1452: 你家的狗有病吧
  4. x86的PC机上运行ARM架构开发板
  5. 抖音账号矩阵搭建管理获客系统
  6. 计算机网络--应用层Web简单介绍
  7. 科技界女性-第9频道的Betsy Aoki
  8. 2022年06月数据库排行榜
  9. MKLINK命令 创建文件夹快捷方式
  10. 品牌增删改查案例,登录以及注册