`
gaojingsong
  • 浏览: 1201342 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Java Web之过滤器(Filter) 】

阅读更多

Java三大器(Filter/listener/(Interceptor))之过滤器(Filter) 

Interceptor:是在面向切面编程的,就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,是基于JAVA的反射机制。比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

servlet、filter、listener是配置到web.xml中(web.xml 的加载顺序是:context-param -> listener -> filter -> servlet ),interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。 

 

 

 

Filter,过滤器,用于在servlet之外对request 和response 进行修改。Filter 有一个 FilterChain 的概念,一个FilterChain 包括多个 Filter。客户端请求 request在抵达servlet 之前会经过 FilterChain 里面所有的 Filter,服务器响应 response 从servlet 抵达客户端浏览器之前也会经过 FilterChain 里面所有的 Filter 。

 

 

Filter简介

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

 

它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

 

Filter功能

在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。

在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

 

 

 Filter 的实现

1、实现自定义的 Filter 需要满足一下条件:

1)实现 javax.servlet.Filter 接口,实现其 init、doFilter、destroy 三个方法。

2)实现在web.xml中的配置。

 

2、javax.servlet.Filter 接口

1) Filter 接口有三个方法:这三个方法反应了  Filter 的生命周期。

①、init:只会在 web 程序加载的时候调用,即启动如tomcat等服务器时调用。一般负责加载配置的参数。

②、destroy :web程序卸载的时候调用。一般负责关闭某些容器等。

③、doFilter:每次客户端请求都会调用一次。Filter 的所有工作基本都集中在该方法中进行。

 



 

 

配置 Filter:每个过滤器需要配置在web.xml中才能生效,一个Filter需要配置<filter> 和 <filter-mapping>标签。

1)<filter>  :配置 Filter 名称,实现类以及初始化参数。可以同时配置多个初始化参数。

2)<filter-mapping> :配置什么规则下使用这个Filter 。

①、<url-pattern> :配置url的规则,可以配置多个,也可以使用通配符(*)。例如 /jsp/* 适用于本ContextPath下以“/jsp/ ”开头的所有servlet路径, *.do 适用于所有以“ .do”结尾的servlet路径。

 

②、<dispatcher> :配置到达servlet的方式,可以同时配置多个。有四种取值:REQUEST、FORWARD、ERROR、INCLUDE。如果没有配置,则默认为REQUEST。它们的区别是:

# REQUEST :表示仅当直接请求servlet时才生效。

# FORWARD :表示仅当某servlet通过forward转发到该servlet时才生效。

# INCLUDE :Jsp中可以通过<jsp:include/>请求某servlet, 只有这种情况才有效。

# ERROR :Jsp中可以通过<%@page errorPage="error.jsp" %>指定错误处理页面,仅在这种情况下才生效。

 

③、<url-pattern>和<dispatcher> 是且的关系,只有满足<url-pattern>的条件,且满足<dispatcher>的条件,该Filter 才能生效。

 

<!-- 过滤器配置 -->  

    <filter>  

        <filter-name>MyFilter</filter-name>  

        <filter-class>servlet.filter.MyFilter</filter-class>  

        <init-param>  

            <param-name>name</param-name>  

            <param-value>Sam-Sho</param-value>  

        </init-param>  

    </filter>  

    <filter-mapping>  

        <filter-name>MyFilter</filter-name>  

        <url-pattern>/jsp/*</url-pattern>  

        <url-pattern>*.do</url-pattern>  

  

        <dispatcher>REQUEST</dispatcher>  

        <dispatcher>FORWARD</dispatcher>  

    </filter-mapping>  

 

3)总结:一个Web程序可以配置多个Filter ,访问有先后顺序,<filter-mapping> 配置在前面的Filter 执行要早于配置在后面的Filter 。

 

 

 

常用 Filter 

字符编码的 Filter 

防盗链 Filter  --> 防盗链需要使用到请求头 Referer 

权限校验 Filter

文件上传 Filter 

GZIP 压缩 Filter

 

       //获取浏览器支持的压缩格式  

        String acceptEncoding = request.getHeader("Accept-Encoding");  

        System.out.println("Accept-Encoding: " + acceptEncoding);  

  

        if (acceptEncoding != null && acceptEncoding.toLowerCase().indexOf("gzip") != -1) {  

  

            // 如果客户浏览器支持 GZIP 格式, 则使用 GZIP 压缩数据  

            GZipResponseWrapper gzipResponse = new GZipResponseWrapper(response);  

            chain.doFilter(request, gzipResponse);  

  

            // 输出压缩数据  

            gzipResponse.getOutputStream();  

            gzipResponse.finishResponse();  

  

        } else {  

            // 否则, 不压缩  

            chain.doFilter(request, response);  

        }  

  • 大小: 88.5 KB
0
0
分享到:
评论

相关推荐

    JAVA Web中过滤器

    在JAVA Web开发中,过滤器(Filter)是一个至关重要的组件,它主要负责在请求被Servlet处理之前或之后执行一些预处理或后处理操作。过滤器是JAVA Servlet API的一部分,通过实现javax.servlet.Filter接口来创建...

    JAVA web过滤器Filter学习资料

    JAVA Web 过滤器 Filter 学习资料 JAVA Web 过滤器 Filter 是一种强大且灵活的工具,用于在服务器上过滤与 servlet 或 JSP 页面相关的请求信息。它提供了多种选择,包括以常规方式调用资源、利用修改后的请求信息...

    java 中如何使用filter过滤器

    在Java Web开发中,Filter(过滤器)是一个强大的工具,它允许开发者在数据处理的前后进行拦截和修改。本文将详细介绍如何在Java中使用Filter过滤器,以及如何配置相关的配置文件,让你一目了然。 ### 1. Filter...

    java web权限访问过滤器

    本教程将详细讲解如何使用Java Web中的过滤器(Filter)来实现这样的访问控制。过滤器是Servlet API的一部分,它允许我们在请求到达目标资源(如Servlet、JSP页面)之前或之后对请求和响应进行拦截处理。 首先,...

    java Web项目中过滤器使用方法

    在Java Web开发中,过滤器(Filter)是一个强大的工具,它允许开发者在数据处理的前后进行拦截和修改。本文将详细讲解Java Web项目中过滤器的使用方法,以及如何配置和实现过滤器。 1. **过滤器的概念** 过滤器是...

    Java Web过滤器详解

    Java Web过滤器详解 Java Web过滤器是一种服务端组件,用于截取用户端的请求与响应信息。过滤器的应用场景非常广泛,以下是其中的一些: 一、统一认证 过滤器可以对用户请求进行统一认证,保证不会出现用户账户...

    java-web -- servlet 拦截器 过滤器使用

    在Java Web开发中,Servlet、拦截器(Interceptor)和过滤器(Filter)是三个非常重要的概念,它们在处理HTTP请求和响应时起到了关键作用。理解并熟练运用这三者能够帮助开发者实现更高效、更安全的Web应用。 首先...

    过滤器(java编写的过滤器)

    在Java Web开发中,过滤器(Filter)是一种非常重要的技术组件,它可以在请求到达目标资源(如Servlet或JSP页面)之前或之后执行某些操作。过滤器可以用来实现各种功能,如用户认证、权限检查、编码转换、日志记录等。...

    javaFilter自定义编码过滤器

    JavaFilter自定义编码过滤器知识点 一、Filter接口和 FilterChain接口 在 Java 中, Filter 接口和 FilterChain 接口是 Servlet 规范中的两个重要组件。 Filter 接口用于定义一个过滤器, FilterChain 接口用于将...

    过滤器在Java Web开发中的应用研究.pdf

    在深入分析和探讨过滤器在Java Web开发中的应用研究时,首先要了解过滤器的定义及其在Java Web开发中的重要作用。过滤器是一种设计模式,用于拦截请求和响应,以便执行某些预处理或后处理操作。在Java Web开发中,...

    Java中配置过滤器

    在Java Web开发中,过滤器(Filter)是一种非常重要的机制,它可以在请求到达目标资源之前或响应返回客户端之后执行特定的操作。例如,可以使用过滤器来实现统一的编码设置、安全控制、日志记录等功能。 #### 一、...

    Java过滤器,字符过滤,标签过滤

    Java过滤器是Java Web开发中的一个重要概念,它主要用于在HTTP请求和响应的过程中对数据进行预处理或后处理。在这个小样例中,我们看到的是如何使用Java实现字符过滤和标签过滤,以及字符编码的转换。这在处理用户...

    JAVA WEB中的Servlet过滤器

    在Java Web开发中,Servlet过滤器(Filter)是不可或缺的一部分,它允许开发者在请求到达Servlet之前或响应离开Servlet之后对其进行处理。Servlet过滤器是按照指定的配置顺序进行调用的,能够实现数据的预处理、后...

    JAVA Web 用过滤器和包装器消除乱码

    本文将深入探讨如何使用JAVA Web的过滤器和包装器来消除乱码问题。 首先,我们来看过滤器(Filter)。在JAVA Web中,过滤器是Servlet规范的一部分,它允许我们在请求到达目标Servlet或JSP之前对请求进行预处理,也...

    JAVA过滤器标准代码

    在Java Web开发中,过滤器(Filter)是一种用于拦截请求和响应的重要机制,可以实现对用户请求的预处理和后处理,以及对响应的处理。本文将深入解析“JAVA过滤器标准代码”,探讨其核心功能、实现原理以及应用场景。...

    Java自定义过滤器

    1. **过滤器接口**:`javax.servlet.Filter`是Java Web应用中的过滤器接口,所有自定义过滤器都必须实现该接口。 2. **生命周期方法**: - `init(FilterConfig config)`:过滤器初始化方法,仅执行一次,在容器启动...

    管道过滤器程序,主要用java实现

    8. **使用现代框架**:现代Java Web框架如Spring MVC和Filter API一起使用,可以更方便地管理和配置过滤器,同时提供更多的功能和灵活性。 在提供的压缩包文件`src`中,可能包含了实现上述知识点的源代码。这些代码...

    java filter打印请求返回参数

    为了实现在过滤器中获取请求体内容以及响应内容的功能,本方案主要采用了以下技术手段: 1. **对`HttpServletRequest`进行封装**:通过创建`HttpServletRequestWrapper`子类来包装原始请求对象,并重写`getReader()...

    accp java过滤器 PPT

    Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。在ACCP课程中,这个“accp java过滤器 PPT”很可能是为了帮助学习者深入理解如何在Web应用程序中有效地使用...

    java中文过滤器

    在Java Web中,过滤器是Servlet API的一部分,通过实现`javax.servlet.Filter`接口并覆盖`doFilter()`方法来完成特定的过滤任务。这个`SetCharacterEncodingFilter`通常会在请求到达Servlet之前设置请求的字符编码,...

Global site tag (gtag.js) - Google Analytics