`

javaweb之Filter详解

    博客分类:
  • Java
阅读更多

出处:http://blog.csdn.net/chenshufei2/article/details/8091908

 

一、概念:

Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能

二、Filter简介

Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

三、快速入门

1、新建一个类,实现Filter接口

2、实现doFilter()方法,打印一句话,来证明能够进行拦截

3、在web.xml中进行配置(参照Servlet配置)

4、访问一个页面,看看能不能拦截

1>

[java] view plaincopy
 
  1. package com.test.filter;  
  2.   
  3. import java.io.IOException;  
  4. import javax.servlet.Filter;  
  5. import javax.servlet.FilterChain;  
  6. import javax.servlet.FilterConfig;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.ServletRequest;  
  9. import javax.servlet.ServletResponse;  
  10. public class Demo1Filter implements Filter {  
  11.     private FilterConfig filterConfig;  
  12.   
  13.     public void doFilter(ServletRequest request, ServletResponse response,  
  14.             FilterChain chain) throws IOException, ServletException {  
  15.         System.out.println("Demo1过滤前");  
  16.         System.out.println(filterConfig.getInitParameter("param1"));  
  17.         chain.doFilter(request, response);//放行。让其走到下个链或目标资源中  
  18.         System.out.println("Demo1过滤后");  
  19.     }  
  20.   
  21.     public void init(FilterConfig filterConfig) throws ServletException {  
  22.         System.out.println("初始化了");  
  23.         this.filterConfig = filterConfig;  
  24.     }  
  25.   
  26.     public void destroy() {  
  27.         System.out.println("销毁了");  
  28.     }  
  29. }  

 

2>web.xml中进行配置

[html] view plaincopy
 
  1. <filter>  
  2.     <filter-name>Demo1Filter</filter-name>  
  3.     <filter-class>com.itheima.filter.Demo1Filter</filter-class>  
  4.     <init-param>  
  5.         <param-name>param1</param-name>  
  6.         <param-value>value在这里呢</param-value>  
  7.     </init-param>  
  8. </filter>  
  9. <filter-mapping>  
  10.     <filter-name>Demo1Filter</filter-name>  
  11.     <url-pattern>/*</url-pattern>  
  12.     <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 -->  
  13.     <dispatcher>FORWARD</dispatcher>  
  14.     <dispatcher>ERROR</dispatcher>  
  15.     <dispatcher>INCLUDE</dispatcher>  
  16. </filter-mapping>  

 

四、Filter的应用场景

通过对filter过滤器的了解,可以得知在以下三种情况下可以做些处理:

1> 通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。

比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。

2> 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。

比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)

3> 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。

比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类Aresponse对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类AByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。

五、Filter实现拦截的原理

Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filterdoFilter方法

六、Filter生命周期

Servlet一样Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是,它是1>在应用启动的时候就进行装载Filter(Servletload-on-startup配置效果相同)2>容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。3>当用户访问的资源正好被Filterurl-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)4>应用服务被停止或重新装载了,则会执行Filterdestroy方法,Filter对象销毁。

注意:init方法与destroy方法只会直接一次。

七、Filter部署应用注意事项

1> filter-mapping标签中servlet-nameurl-pattern

Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)

2> filter-mapping标签中dispatcher

指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARDERROR之一,默认REQUEST。用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。

REQUEST

当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcherinclude()forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。

 

INCLUDE

如果目标资源是通过RequestDispatcherinclude()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

 

FORWARD

如果目标资源是通过RequestDispatcherforward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

 

ERROR

如若在A.jsp页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了ERRORdispather那么则会拦截,否则不会拦截。

分享到:
评论

相关推荐

    Javaweb开发技术详解

    JavaWeb开发技术是现代互联网应用开发的重要组成部分,汪大乐所著的《Javaweb开发技术详解》一书深入浅出地介绍了这一领域的核心概念和技术。JavaWeb开发主要涉及Servlet、JSP、JSTL、过滤器、监听器、MVC设计模式...

    JavaWeb之Filter过滤器详解

    JavaWeb中的Filter过滤器是JavaWeb开发中一个重要的组件,主要用于在请求被处理之前和响应被发送给客户端之前进行拦截和处理。这篇文章将详细介绍Filter的工作原理、使用方式以及一个具体的防盗链功能的实现案例。 ...

    javaweb开发详解(源代码)

    JavaWeb开发详解主要涵盖了一系列与构建基于Java技术的Web应用程序相关的技术、工具和实践。这里,我们将深入讨论其中的关键知识点,结合"javaweb开发详解"的书籍源代码,为你的学习提供指导。 1. **JavaWeb基础**...

    JavaWeb Servlet中Filter过滤器的详解

    JavaWeb Servlet中Filter过滤器的详解 1.简述  Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制、过滤敏感词汇、压缩响应信息)。Filter能够对Servlet容器的请求和响应进行检查...

    javaweb520-JavaWeb-master.zip

    【JavaWeb开发框架详解】 JavaWeb是一个广泛使用的开发平台,用于构建动态、交互式的Web应用程序。这个名为"javaweb520-JavaWeb-master.zip"的压缩包很可能包含了一个完整的JavaWeb项目实例,让我们来深入探讨...

    《Tomcat与Java Web开发技术详解(第2版)》_(孙卫琴)_源码.zip

    关于源码,书中可能包含了一系列的示例应用,如简单的Servlet、JSP页面、过滤器(Filter)、监听器(Listener)等。通过阅读和运行这些源码,读者能更直观地理解Java Web开发中的各个组件及其交互方式。 此外,书中...

    JavaWeb详解3

    标题《JavaWeb详解3》表明文章是关于Java Web开发技术的深入解析。由于标题中包含“详解3”,可以推断,这篇文章是系列教程的一部分,主要针对那些希望深入了解Java Web技术的读者。通常,这样的系列教程会按照顺序...

    崔希凡JavaWeb笔记day28(JavaWeb完毕)

    ### JavaWeb知识点详解:崔希凡JavaWeb笔记day28 #### 一、Servlet3.0之WebServlet注解 ##### 1. Servlet3.0简介与环境要求 - **Servlet3.0**:Servlet规范的最新版本之一,带来了诸多改进,其中最显著的变化是...

    javaweb-留言板

    【JavaWeb 留言板系统详解】 JavaWeb 留言板系统是基于 JavaServer Pages(JSP)、Servlet 和关系型数据库技术构建的一款交互式应用程序。它允许用户在网页上发布留言,其他用户可以浏览并回复这些留言,提供了一个...

    使用JavaWeb写的一个新闻系统

    【JavaWeb新闻系统详解】 JavaWeb技术是一种广泛应用于开发企业级Web应用的技术栈,它结合了Java语言的强大功能和Web的交互性。本新闻系统项目是基于JavaWeb实现的,旨在为初学者提供一个实际操作的平台,了解并...

    Javaweb 图书书城(不太完善)

    【JavaWeb图书书城系统详解】 JavaWeb图书书城是一个基于JavaWeb技术开发的在线图书销售平台,虽然在描述中提到它可能不完全完善,但这个项目已经包含了基础功能,可以为我们提供一个学习和理解JavaWeb开发的良好...

    javaweb-demo

    【JavaWeb-Demo详解】 JavaWeb技术是Java平台上的一个重要组成部分,主要用于开发和构建Web应用程序。这个名为"javaweb-demo"的项目很可能是用来演示JavaWeb应用的基础架构和核心功能。下面,我们将深入探讨JavaWeb...

    javaWeb选择题,面试

    ### JavaWeb选择题详解 #### 第1题:Filter的实现方式 - **题目解析**:在JavaWeb开发中,Filter是一种用于拦截用户请求并进行预处理或后处理的技术。为了实现一个Filter,开发者需要实现`javax.servlet.Filter`...

    Java Web开发详解.pdf

    6. **Servlet Filter和Listener**:Filter用于在请求到达目标Servlet之前进行预处理,Listener则监听Web应用中的各种事件。掌握这两者,可以实现日志记录、权限控制等功能。 7. **AJAX(Asynchronous JavaScript ...

    javaweb图书管理系统

    《JavaWeb图书管理系统详解》 JavaWeb图书管理系统是一款基于JAVA技术构建的Web应用程序,它集成了用户注册登录、管理员后台管理以及图书的管理查询等多种功能,为图书馆的日常运营提供了便利。本文将深入探讨该...

    javaweb项目—web整站系统

    【JavaWeb整站系统详解】 JavaWeb是一种基于Java技术的Web开发框架,用于构建动态、交互式的Web应用程序。这个"javaweb项目—web整站系统"是一个完整的JavaEE项目,旨在提供一个全面的Web解决方案,包括用户界面、...

    基于Javaweb技术的BBS论坛.rar

    《基于Javaweb技术的BBS论坛系统详解》 在信息技术日新月异的今天,Web开发领域中,基于Java技术的BBS论坛系统因其稳定性、可扩展性及安全性等优势,备受开发者青睐。本篇文章将深入探讨利用Javaweb技术构建BBS论坛...

    (重温)JavaWeb–Filter 过滤器(JavaWeb 的三大组件之一)

    【JavaWeb - Filter 过滤器详解】 JavaWeb 技术中,Filter(过滤器)是三大核心组件之一,与Servlet程序和Listener监听器并列。Filter 是 JavaEE 规范的一部分,它定义了一个接口,允许开发者在请求被处理之前或...

    JavaWeb重点叙述

    ### JavaWeb重点知识点详解 #### JSP 部分 **1. Servlet 生命周期** Servlet 的生命周期主要包括以下几个阶段: - **初始化阶段**:当容器启动时,它会读取 web.xml 文件,根据配置加载并实例化 Servlet。接着...

Global site tag (gtag.js) - Google Analytics