JAVA学习之 浅析Filter
来源:互联网 发布:微软 azure认证 知乎 编辑:程序博客网 时间:2024/05/22 05:02
上一篇博客了解了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
- Java学习之Filter
- Java学习之Filter
- java学习之Servlet Filter
- JAVA互联网学习之Filter
- JAVA学习 之 浅析J2EE
- JAVA学习之 浅析Servlet
- JAVA学习之 浅析Jsp
- java 之 编码实现Filter学习示例
- JAVA学习篇--javaweb之Filter详解
- java 之 编码实现Filter学习示例
- JAVA学习篇--javaweb之Filter详解
- java学习之集合---浅析HashMap
- Angular 学习之 filter
- JavaWeb学习之Filter
- python学习之Filter
- java ee 之 filter
- java web 之filter
- android PorterDuffXfermode ,PorterDuff.Mode 使用 以及Porter-Duff规则详解
- deep_c++::多态,虚函数的一点理解
- qt主界面和右键菜单
- UIButton多行title
- android 开发中通过JNI无法向SD卡写入文件的解决办法
- JAVA学习之 浅析Filter
- OpenStack OVS GRE/VXLAN网络
- 常成员函数:Const类限定的成员函数
- os上的hadoop执行环境及eclipse嵌入hadoop开发环境配置记录
- 跳台阶问题
- js面向对象编程之静态方法与实例方法
- MyEclipse 快捷键
- makefile模板
- Vim命令合集