• Servlet中Filter的学习


    1. Filter简介

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
    2. Filter的执行流程
    a. 过滤器是在目标资源执行之前 执行过滤的. 
    b. 目前资源执行前 会走过滤器, 回来的 时候也会走 过滤器
    如图:
    3. Filter开发步骤

    第一步: 编写一个类, 去实现 filter 接口:

    第二步: 去注册, 映射 过滤器的拦截资源的 路径

    由于 浏览器过来访问目标资源的时候都是 通过一个具体的 路径来访问的目标数据所以 那么过滤器 对哪些 目标资源的请求进行拦截, 实际上也是通过这个url 路径配置来实现的 .在web.xml文件中配置

    第三步: 编写 一个 HelloServlet, 输出些数据

    第四步:去访问

    表示 访问 day21_filter 这个工程下的 helloservlet , 那么这时候 首先会执行 filter1的 doFilter方法, 如果这个方法中,

    放行了就可以看到  helloServlet输出的数据, 如果没放行, 就看不到. 

    4. Filter的生命周期

    Init方法 ---- filter 初始化方法

    DoFilter方法----- filter 的 执行过滤的方法

    Destory方法 ----- filter 销毁的方法

    5. FilterConfig对象

    Filter中封装了 Filter的初始化参数信息的 一个对象.  并且这个 对象 是对某个Filter 独占.的每个filter 都会有一个与之 对应的FilterConfig对象. 初始化参数信息可以通过 在web.xml文件中 . Filter 元素中配置. 

    那么这些 信息就只能在 filter1 对应的那个 FilterConfig中获得

    在 filter 的init方法中, 接收 了一个参数 叫做 FilterConfig对象.  你就可以直接调用其 api 来获得参数信息.

    6. Filter案例

    案例一:解决全站的相应乱码问题

    问题描述:

    由于经常在访问servlet的时候, 要输出中文, 要解决乱码:Response.setContextType(“text/html;charset=utf-8”);

    所以我们在Filter中对项目进行了相应乱码的设置。

    解决方案:

    新建一个EncodingFitler类,实现了doFilter方法。

    EncodingFitler的web.xml配置如下:

    案例二 解决全站的一些同类型的页面的禁止缓存问题.

    问题描述:在开发过程中, jsp 页面中的数据一般也是实时性要求比较高的.  那么通常会 针对jsp 告诉浏览器不要缓存数据

    要使得浏览器禁止缓存,需要三个头信息:

    Cache-control:   no-cache

    Pragma:  no-cache

    Expires:  时间值 ------ setDateHeader();

    解决方案:

    新建NoCacheFilter类,实现doFilter方法

    在web.xml的配置如下:

    实现了对所有JSP页面的禁止缓存。

    案例三 是某个类型数据可以缓存

    问题描述:

    对于实际开发过程中, 长时间不会改变的数据, 或者永远都不会变的数据,  那么就要告诉浏览器要缓存.

    需要设置头信息:

    Cache-control:  "max-age" "=" delta-seconds -------------- max-age=3600 ------- 一个 小时    

    Expires:  System.currentTimeMillis()+ 1000*60*60L

    这两个头的 值,都是用于设置 缓存多长时间, 如上的内容表示 . 都是缓存 1 个小时

    解决方案:

    新建CacheFilter类,实现doFilter方法:

    在web.xml的配置如下:

  • 相关阅读:
    安卓学习第一课——电话拨号器
    CodeForces 644B【模拟】
    hdu5861【线段树】
    CodeForces 41A+43A【课上无聊刷水题系列】
    hdoj5493【树状数组+二分】
    HDU5894【组合数学】
    Codeforces643A【一种暴力】
    CodeForces 689C【二分】
    CodeForces 665B 【水-暴力】
    CodeForces 653A【水】
  • 原文地址:https://www.cnblogs.com/xumaodun/p/4906793.html
Copyright © 2020-2023  润新知