Servlet JSP 二重修炼:Filter过滤器

前言

好久没写博客了。哈哈~宝刀未老呀,操起笔来准备11.11华华丽丽的来一篇。都说温故知新,这句话绝对正确。按着人的记忆曲线,温故是巩固记忆力的好办法。就像我还是经常翻翻自己写的博客。回头来看看到的是新的东西。那就足够了。

从右到左:人生境界也

过滤器

其实拦截器我在 posted @ 2014-03-20 12:45 写过一篇:《⑧javaWeb之在例子中学习(过滤器Filter)》。会过头来看,发现里面讲的不太细粒。但是其中两个应用小例子是挺不错了。如果喜欢看例子的可以去看看。

什么是过滤器呢?


实过滤器(Filter)和Servlet很相似,都是java的组件。即请求发送servlet之前,可以用其截获和处理请求,也可以在serlvet
结束工作之后,在响应发回之前处理响应。因此,和上篇一样,过滤器filter是拦截请求,并对传给请求资源的ServletRequest 或
ServletResponse 进行处理的一个对象。如图:简单的描述其工作原理

 

过滤器做的事情

这是我们最希望做看到的事情,其实Filter可以当成一个插件组件。它的作用于request和response之间。

请求过滤器的作用:

  • 完成安全检查
  • 重新格式化请求首部或者体
  • 建立请求审计和日志

 

响应过滤器的作用:

  • 压缩相应流
  • 追加或者修改流
  • 创建一个完全不同的响应

 

案例代码解释

Servlet

API中提供了一个Filter接口,开发应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。Filter的实
现类实现了一个J2EE的过滤器,过滤器的api允许访问ServletCOntext,同样可以链接到另一个Filter。

Filter类似于Servlet一个样,有一个生命周期。里面有:init(), destroy(),还有个核心方法:doFilter()。

  • init(FilterConfig):这是Filter的初始化方法,Servlet容器创建Filter实例后将调用这个方法。在这个方法中可以读取web.xml文件中Filter的初始化参数
  • doFilter(ServletRequest,ServletResponse,FilterChain):

    这个方法完成实际的过滤操作,当客户请求访问于Filter关联的URL时,Servlet容器将先调用Filter的doFilter方法。
    FilterChain参数用于访问后续Filters

  • destroy():  Servlet容器在销毁Filter实例前调用该方法,这个方法中可以释放Filter占用的资源

过滤器执行机制图:

 

此我们实现这个接口:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public class DemoFilter implements Filter

{

    @Override

    public void init(FilterConfig filterConfig) throws ServletException

    {

    }

 

    @Override

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException

    {

        chain.doFilter(request, response);

    }

 

    @Override

    public void destroy()

    {

        //完成清理工作

    }

 

}

doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

大家主要看看这个参数:ServletRequest /ServletResponse
。这个方法不取HTTP请求和相应对象做参数,而只是常规的ServletRequest /ServletResponse
对象。这里是对通用性的设计,过滤器的设计的要通用,如果过滤器用于一个非web应用,所以实现非Http接口。但不用担心的
是,ServletResponse 是HttpServletResponse的超类。

 

Filter的设计

从Filter执行机制图,我们可以体会到其设计很像一个东西---”栈“。可以从我书中摘录的一张图片体会:Filter3→Filter7→SerlvetA→Filter7→Filter3

 

后记

重读Filter的积累。

时间: 2024-11-08 17:23:42

Servlet JSP 二重修炼:Filter过滤器的相关文章

Java中的Filter过滤器详解

Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理.使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将

JAVAEE Filter 过滤器设置是否缓存实例详解_java

在网页中,每次的客户端访问服务器,有部分不用重复请求,如有些图片,视频等就没有必要每次都请求,这样会让服务器增大工作量.为了防止这样,我们采用过滤器来设置客户端是都缓存. 页面的缓存与不缓存设置及html页面中meta的作用 HTTP1.1中启用Cache-Control 来控制页面的缓存与否,这里介绍几个常用的参数: no-cache,浏览器和缓存服务器都不应该缓存页面信息: public,浏览器和缓存服务器都可以缓存页面信息: no-store,请求和响应的信息都不应该被存储在对方的磁盘系统

web.xml-新手求助:filter过滤器的问题

问题描述 新手求助:filter过滤器的问题 web.xml配置 <filter> <filter-name>loginInterceptor</filter-name> <filter-class>com.cbt.Interceptor.LoginInterceptor</filter-class> <init-param> <param-name>loginPage</param-name> <par

JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)_java

下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

Java Web Filter 过滤器学习教程(推荐)_java

一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过F

Eclipse javax.servlet.jsp.PageContext cannot be resolved to a type 错误解决办法

目前在jsp页面form action中使用${pageContext.request.contextPath }/servlet的写法,但是一直提示有错误,错误如下:javax.servlet.jsp.PageContext cannot be resolved to a type 网上解答过说要缺少jsp-api.jar,导入这个包之后不报错了,但是程序启动访问这个页面的时候出现如下错误: org.apache.jasper.JasperException: Unable to read T

filter过滤-Filter过滤器的重定向问题

问题描述 Filter过滤器的重定向问题 FirstFilter过滤first.jsp 和second.jsp...通过重定向到second.jsp... 我不明白这个死循环为什么还能执行 System.out.println("doFilter----first---end");??不是先执行 System.out.println("doFilter........first.");之后就重定向到second.jsp,然后在执行second.jsp的过滤器,即一直

[Servlet&amp;JSP] 部署描述设置

Servlet的设置 以下是在web.xml中设置servlet的范例片段: <servlet> <servlet-name>Some</servlet-name> <servlet-class>club.chuxing.SomeServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>

Filter过滤器和Listener监听器详解

Filter过滤器和Listener监听器详解 Filter过滤器 Filter的简介 对资源的访问进行过滤,相当于小区的保安,进去要检查,出去还要检查. Filter的使用 编写一个类,继承并实现javax.servlet.Filter. package com.jyh.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.s