Java之Filter
一、何为Filter?
Filter也称之为过滤器,它是Servlet技术中比較激动人心的技术。WEB开发者通过Filter技术。对webserver管理的全部web资源。换句话说其主要用于前台向后台传递数据的过滤操作。
比如Jsp, Servlet,静态图片文件或静态
html文件等进行拦截。从而实现一些特殊的功能。
比如实现URL级别的权限訪问控制、过滤敏感词汇、压缩响应信息等一些高级能。
二、在开发中的应用
首先看一下Filter在项目中的应用。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1X3l1amllMjAxMWNvbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
从图中可见它在web容器和Servlet、jsp之间,类似于一个过滤器将web传过来的垃圾信息所有过滤掉,然后再传给server。这样提高了一些效率。接下来从代码中看看它是怎么用的:
1、新建一个类,实现filter接口并实现doFilter()方法
packagecom.bjpowernode.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 yujie
*
*/
public classCharsetEncodingFilter implements Filter { private Stringendcoding; publicvoid destroy() {
} publicvoid doFilter(ServletRequest request, ServletResponse response,
FilterChainchain) throws IOException, ServletException { //System.out.println("CharsetEncodingFilter--->>>begin");
//设置字符集
request.setCharacterEncoding(endcoding); //继续运行
chain.doFilter(request,response); //System.out.println("CharsetEncodingFilter--->>>end");
} publicvoid init(FilterConfig filterConfig) throws ServletException {
this.endcoding= filterConfig.getInitParameter("encoding");
System.out.println("CharsetEncodingFilter.init()-->>endcoding=" + endcoding);
}
}
2、在web.xml中进行配置
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.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>
3、訪问一个页面看看是否能进行控制
三、深入Filter应用场景
1>通过控制对chain.doFilter的方法的调用,来决定是否须要訪问目标资源。
比方,能够在用户权限验证等等。
推断用户是否有訪问某些资源的权限,有权限放行,没权限不运行chain.doFilter方法。
2>通过在调用chain.doFilter方法之前,做些处理来达到某些目的。
比方,解决中文乱码的问题等等。能够在doFilter方法前,运行设置请求编码与响应的编码。甚至能够对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写对应的request.getParameter方法)。
3>通过在调用chain.doFilter方法之后,做些处理来达到某些目的。
比方对整个web站点进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。
在类A内部中。将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法运行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。
四、Filter生命周期
简单的一句话和Servlet一样Filter的创建和销毁也是由WEBserver负责。简单步骤例如以下:
init()->doFilter()->destroy()
注意:init方法与destroy方法仅仅会运行一次。
五、总结
以上就是对Java中filter的简单理解,简单的一句话:filter就是一个过滤器。
它的功能非常强大。希望在今后的学习中渐渐深入。
Java之Filter的更多相关文章
- Java进阶(三十三)java基础-filter
java基础-filter 我们先看看没有filter的时候,整个web客户端-服务端的一个流程. 接下来我们再看看引入了filter之后的Uml图.尝试分析这两者之间的差别. filter从哪里来? ...
- java使用Filter过滤器对Response返回值进行修改
转:java使用Filter过滤器对Response返回值进行修改 练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过 ...
- 转:java使用Filter过滤器对Response返回值进行修改
练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过滤器对Response返回值进行修改 有时候在开发过程中会有这样一个 ...
- Java 8 – Filter a Map examples
Java 8 – Filter a Map examplesFew Java examples to show you how to filter a Map with Java 8 stream A ...
- Java 8 – Filter a null value from a Stream
Java 8 – Filter a null value from a Stream package com.mkyong.java8; import java.util.List;import ja ...
- Java中filter内处理重定向遇到的问题
这是在Java中filter内处理重定向遇到的问题.本意是写一个做URL rewrite 的filter,来重写URL,同时在处理登陆过程中要杀掉当前session,创建新session来代替. 1. ...
- 如何在Java的Filter中注入Service???
今天在做用户使用cookie自动登录的时候,发现在LoginFilter中读取到cookie以后要进行查询数据库然后进行用户名和密码的比对,查询数据库肯定要用到Service和Dao,一开始我以为在s ...
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...
- JAVA–利用Filter和session防止页面重复提交
JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览 ...
随机推荐
- Java:集合类的区别详解
Java中集合类的区别 Array是数组,不在集合框架范畴之内,一旦选定了,它的容量大小就不能改变了,所以通常在编程中不选用数组来存放. 集合 : 集合对象:用于管理其他若干对象的对象 数组:长度不可 ...
- 什么是HotSpot VM & 深入理解Java虚拟机 JVM
参考 http://book.2cto.com/201306/25434.html 另外,这篇文章也是从一个系列中得出的: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> ...
- Windows API常用函数
转自:http://www.cnblogs.com/xiashengwang/p/4026259.html .NET中虽然类库很强,但还是有些时候功能有限,掌握常用的api函数, 会给我们解决问题提供 ...
- gamma校正原理
http://blog.csdn.net/u013286409/article/details/50239377 目录(?)[-] 图2中左图为原图,中图为gamma = 1/2.2在校正结果,原 ...
- python可hash 不可hash类型
不可变类型是可hash #tuple str freezeset 可变类型是不可hash ##list set
- 2、cas4.0 单点登录 之 cas-client
cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书已经做好了证书的准备工作.如今结合cas-server来配置单点登录: 一.安装cas服务端(cas-ser ...
- Appium Android Bootstrap源代码分析之简单介绍
在上一个系列中我们分析了UiAutomator的核心源代码,对UiAutomator是怎么执行的原理有了根本的了解.今天我们会開始另外一个在安卓平台上基于UiAutomator的新起之秀--Appiu ...
- Django——静态文件(如bootstrap)的配置
静态文件如CSS, javascript(如bootstrap), 图片等文件在django中的配置官方文档写的比较模糊,自己通过实验验证后并整理如下,以防遗忘,目前只整理了关于本地开发中的设置方式, ...
- ecplise内存配置
-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:+UseG1GC
- Loadrunner中对中文进行UTF-8转码的探索
上一篇 / 下一篇 2010-02-22 15:20:28 查看( 2378 ) / 评论( 2 ) / 评分( 5 / 0 ) 这是一个HTTP接口测试中经常会碰到的问题,目前的服务器采用的都是U ...