JAVA学习之 浅析Filter

上一篇博客了解了Servlet,这次就来了解一下Filter,简单来说Filter是Servlet规范的一种技术,并不是一个Servlet。它也称为一个过滤器,用来改变一个request和修改一个response,能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response。

一、生命周期

上一篇也写到的Servlet的生命周期,Filter与Servlet类似:

1、启动服务器时加载Filter的实例,并调用Init()方法来初始化实例;(Filter的实例先于Servlet)

2、每次请求时都只调用方法doFilter()进行处理

3、停止服务器时调用destroy()方法,销毁实例;(销毁实例晚于Servlet)

(Filter实现javax.servlet包的Filter接口,包括方法:init(),doFilte(),destroy())

二、如何使用Filter

下面以添加用户为例,对比使用前后的差别:

1、不使用Filter:

2、使用Filter:

对比一下使用Filter给我们带来的便利:我们知道一个系统不可能只有添加用户功能,我们还有删除用户,修改用户等等很多需要实现的功能,然而设置字符集是每个功能都需要进行的,如果没有Filter,我们每一个页面都要进行设置字符集的操作,我们将设置字符集的方法写在doFilter中,在request之后记性拦截,每个jsp页面都能实现对字符集的设置。下面我们来看一个filter是如何实现这个功能的:

packagecom.tgb.drp.util.filter;

importjava.io.IOException;

importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
/**
 * 采用Filter统一处理字符集
 * @author YoungJong
 *
 */
public classCharsetEncodingFilter implements Filter {
     private String encoding;
/**
 * 销毁方法
 */
publicvoid destroy() {
//TODO Auto-generated method stub

}

/**
 * 实现doFilter
 */
publicvoid doFilter(ServletRequest request, ServletResponse response,
FilterChainchain) throws IOException, ServletException {

//设置字符集
        request.setCharacterEncoding("GB18030");
        //继续执行
         chain.doFilter(request,response);

}

/**
 * 初始化方法
 */
publicvoid init(FilterConfig filterConfig) throws ServletException {
//TODO Auto-generated method stub
       this.encoding=filterConfig.getInitParameter("encoding");
       System.out.println("CharsetEncodingFilter.init()-->>endcoding=" + encoding);
        }

}

当然我们还需要再web.xml中进行配置:

<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.tgb.drp.util.filter.CharsetEncodingFilter</filter-class>
<init-param>
     <param-name>encoding</param-name>
     <param-value>GBK</param-value>
</init-param>
</filter>        

<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
 

三、与servlet的对比:

与servlet相同的是,他们都需要实现接口,但是Filter实现的是Filter,而Servlet实现的则是HttpServlet,他们都需要在web.xml中进行配置,然而他们最大的不相同就是他们的作用:

1.Servlet是:主要是处理客户端的请求并将其结果发送到客户端。

2.Filter是:在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。在HttpServletResponse到达客户端之前,拦截HttpServletResponse。主要是进行拦截,做相应的处理后再传递。

差不多就这些内容,不过就这样戛然而止不太好吧?!所以做个小结:看视频中有这种说法:Filter体现一种模式
职责链模式;Servlet体现了一种模式
模板方法模式。关于Filter体现一种职责链还能够理解,但是对于Serlet体现一种模板方法还是没办法参透。。默默地哀伤中。。

JAVA学习之 浅析Filter

时间: 2024-07-30 18:31:46

JAVA学习之 浅析Filter的相关文章

JAVA学习之 浅析Servlet

一.什么是Servlet Servlet是一种在服务器端运行的java编写的程序,是按照Servlet规范编写的一个java类. 二.Servlet的工作过程 如图所示:为了实现客户与服务器端的动态交互,需要一个遵循HTTP协议的服务器端应用软件,来处理客户的各种请求,并将结果发送给客户端. 三.Servlet的生命周期 Servlet的生命周期是由Servlet的容器(例如:tomcat)来控制的:生命后期分为加载类及创建实例:初始化:服务:销毁 1.加载类及创建实例 在默认情况下,Servl

JAVA学习 之 浅析J2EE

J2EE的视频也看过了,感觉还不是很清晰,下面从几个方面理一下: 一.J2EE是什么 首先需要说明的是:J2EE并不是一种语言,而是一组规范,技术框架及技术的集合,是由一些程序语言和脚本语言组成,包括JAVA,XML,JSP,HTML,SQL等.它服务于企业级开发. 二.为什么有J2EE 1.企业级应用框架的需求 在许多企业级应用中,例如数据库连接,邮件服务,事务处理等一些通用企业需求模块,这些模块如果每次在开发中都需要开发人员来完成的话,会造成开发周期长和代码可靠性差等问题,于是许多大公司开发

JAVA学习之 浅析Jsp

一.什么是JSP JSP全称Java Server Pages,是由SunMicrosystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML.XML或其他格式文档的Web网页的技术标准. 二.与Servlet的对比 首先说一下Servlet的一点儿缺陷:在Servlet中所有的html标签必须要抱在Java字符串中,这样http响应就会十分的繁琐:而且Servlet修改后需要编译,才可以看到最新的效果. 与之不同的是Jsp:jsp提供了一套简单的标签来

JAVA学习篇--javaweb之Filter详解

在DRP项目中,多次提到了Filter,它解决了字符集的统一设置以及统一控制简单WebCache,从中我们可以体会到,它给我们带来的好处不仅仅是减少代码量这么简单,它的出现避免了我们每个页面重复的编写相同的代码,减少了我们的工作量,而且给维护带来了极大的便利,那么它是如何实现统一管理的呢?既然它能统一管理某些重复的操作,那么它和AOP有什么关系呢? Filter简介 ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过

2016最新Java学习计划

一.Java学习路线图 二.Java学习路线图--视频篇 六大阶段 学完后目标 知识点 配套免费资源(视频+笔 记+源码+模板) 密码        第一阶段 Java基础 入门 学习周期: 35天 学完后目标: 1.可进行小型应用程序开发 2.对数据库进行基本的增删改查管理 市场价值:¥5000 计算机基础知识 计算机基础.DOS常用命令.Java概述.JDK环境安装配置.环境变量配置.Java程序入门 1.2015年Java基础视频-深入浅出精华版(强烈推荐) 2.历经5年锤炼(适合初学者入

健康,home? [java的内存浅析]

健康,home? [java的内存浅析] 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 乐观上上,how can other kno u,u r yourself!I must be strong and carry on. -泥沙砖瓦浆木匠 一.闲谈下 201407月记着那时候身体垮了下来,呵呵.想说,对自己的说,也是对大家的负责吧.那时候胸疼胸闷,然后几乎累垮了,我还坚持了一星期,那一星期真的迷迷糊糊.完全不能

&lt;Java&gt;&lt;学习路线图&gt;

Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了. 但有一些一般的步骤: 1.熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯.2. 安装JDK(建议用你的Linux发行版自带的软件包管理器安装openjdk,过程中可能需要读发行版特定的文档)3. 写一个Java的Hello world程序,并用命令行工具javac编译,再用java命令运行这个程序.过程中熟悉源

转:Java学习路线图

作者: nuanyangyang 标  题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内   [以下肯定是不完整的列表,欢迎补充]   Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了.   但有一些一般的步骤:   1. 熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯. 2. 安装

Java学习-007-Log4J 日志记录配置文件详解及实例源代码

此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!