博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Filter--过滤器Filter概述、API、配置与使用详解
阅读量:2443 次
发布时间:2019-05-10

本文共 2572 字,大约阅读时间需要 8 分钟。

过滤器Filter概述

  • 过滤器是一个运行在服务端的程序,在与之相关的Servlet或JSP页面之前运行,实现对请求资源的过滤功能。

  • Filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。

  • 过滤器可附加到一个或多个Servlet或JSP页面上,可以检查请求信息,也可以处理响应信息。

  • Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet执行前后实现一些特殊的功能。

  • 过滤器常用实例:

    • 自动登录
    • 解决全站乱码
    • 屏蔽非法文字
    • 进行响应数据压缩
  • 过滤器的编写流程

    • 实现类:需要实现接口javax.servlet.Filter
    • 配置:在web.xml使用和进行配置

Filter的访问流程

在这里插入图片描述

FIlter的API

Filter声明周期及其与生命周期相关的方法:

Filter接口有三个方法,并且这三个都是与Filter的生命相关的方法。

  • init(Filterconfig):

    代表filter对象初始化方法,filter对象创建时执行

  • doFilter(ServletRequest, ServletResponse, FilterChain):

    代表filter执行过滤的核心方法,如果某资源已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法

  • destory():

    代表filter的销毁方法,当filter对象销毁时执行该方法

Filter对象的声明周期:

  • Filter何时创建:服务器启动时就创建该filter对象
  • Filter何时销毁:服务器关闭时filter销毁

FilterAPI详解:

@Overridepublic void init(FilterConfig filterConfig) throws ServletException {
//参数config代表该Filter对象的配置信息的对象,内部封装的是该filter的配置信息。}
@Overridepublic void destroy() {
//Filter对象销毁时执行}
@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//ServletRequest、ServletResp:每次在执行doFilter方法时,web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。 //该request和response就是在访问目标资源的service方法时的request和response //FilterChain:过滤链对象,通过该对象的doFilter方法可以放行该请求}

Filter的配置

myFilter
pers.zhang.filter.MyFilter
myFilter
/*
REQUEST

简单示例:使用Filter完成访问WEB任何资源都打印当前时间

Filter:

package pers.zhang.filter;import javax.servlet.*;import java.io.IOException;import java.util.Date;/** * @author zhang * @date 2019/9/20 - 22:20 */public class MyFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter创建了..."); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println(new Date().toString()); //放行请求 filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() {
System.out.println("filter销毁了..."); }}

配置Filter:

myFilter
pers.zhang.filter.MyFilter
myFilter
/*

启动服务器,控制台输出:

filter创建了...

使用浏览器访问web下任意资源,控制台输出:

Fri Sep 20 22:48:22 CST 2019

关闭服务器,控制台输出:

filter销毁了...

转载地址:http://bisqb.baihongyu.com/

你可能感兴趣的文章
heroku_使用Heroku和Facebook SDK在云中构建您的应用
查看>>
SitePoint播客#145:Addy Osmani的Backbone.js基础
查看>>
Google发布Chrome 4.0
查看>>
将ip保存在txt文档中_将任何文件存储在Google文档中
查看>>
disconf apps_Google Apps Drop IE6支持
查看>>
使用Screenr创建截屏视频
查看>>
微信小程序使用flex布局_使用Flex来启动您PHP应用程序!
查看>>
互联网总线带宽_新技术将使互联网带宽翻倍
查看>>
java自由职业者是什么_一个成功的自由职业者需要什么?
查看>>
paas云平台架构_PaaS:通过Node.js中的RESTful API管理您的云基础架构
查看>>
HTML完整格式–什么是HTML完整格式?
查看>>
java开发持久层_Java与软件开发保持同步以确保持久流行
查看>>
Angular vs React – Angular和React之间的区别
查看>>
有源蜂鸣器驱动程序_Windows 10现在处于8.25亿有源设备上:这对程序员意味着什么
查看>>
oracle认证考试_通过获得Oracle助理认证来提升您的职业-PrepAway进行的1Z0-052考试复习
查看>>
java语言作为入门好吗_Java作为学生的第一语言
查看>>
sql内联接外联接三张表_在SQL中联接三个或更多表
查看>>
数据科学 python_Python如何帮助数据科学专业人员
查看>>
pcb布局设计_PCB设计布局的重要提示
查看>>
软件敏捷开发_避免开发敏捷软件的错误
查看>>