Java Web高级特性之(一)过滤器

原创 2015年04月23日 23:00:44

过滤器的概念


过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤。


过滤器的工作原理







过滤器的生命周期







过滤器的API







多个过滤器下的应用







过滤器的分类


Servlet2.5


REQUEST——用户直接访问页面时,Web容器将会调用过滤器
ERROR——目标资源是通过声明式异常处理机制调用时,过滤器将被调用
FORWARD——目标资源是通过RequestDispatcher的forward方法调用时,过滤器将被调用
INCLUDE——目标资源是通过RequestDispatcher的include方法调用时,过滤器将被调用


Servlet3.0


ASYNC——目标资源是异步处理时,过滤器将被调用



过滤器在实际项目中的应用场景


1.对用户请求进行统一认证
2.编码转换
3.对用户发送的数据进行过滤替换
4.转换图像格式
5.对响应的内容进行压缩




过滤器的实例


以修改请求参数为例,讲解拦截器的用法:

/**
 * 过滤器类
 * 过滤请求参数content的前后空格
 * @author yonggang
 * @date 2015-4-24 上午12:12:58
 */
@Component
public class ParamFilter implements Filter{

	@Override
	public void init( FilterConfig filterConfig ) throws ServletException {
	}

	@Override
	public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException {
		String content = request.getParameter( "content" );
		Map<String, String[]> newParams = new HashMap<String, String[]>( request.getParameterMap() );
		if( StringUtils.isNotBlank( content ) ) {
			newParams.put( "content", new String[] { content.trim() } );
		}
		chain.doFilter( new ParameterRequestWrapper( ( HttpServletRequest )request, newParams ), response );
	}

	@Override
	public void destroy() {
	}

	
}



/**
 * 请求包装类<br>
 * 用于替换原有request的params<br>
 *
 * @author yonggang
 * @date 2015-4-7 下午8:56:44
 */
public class ParameterRequestWrapper extends HttpServletRequestWrapper {

	private Map<String, String[]> params;

	public ParameterRequestWrapper( HttpServletRequest request, Map<String, String[]> newParams ) {
		super( request );
		this.params = newParams;
	}

	@Override
	public String getParameter( String name ) {
		String result = "";

		Object v = params.get( name );
		if( v == null ) {
			result = null;
		} else if( v instanceof String[] ) {
			String[] strArr = ( String[] )v;
			if( strArr.length > 0 ) {
				result = strArr[ 0 ];
			} else {
				result = null;
			}
		} else if( v instanceof String ) {
			result = ( String )v;
		} else {
			result = v.toString();
		}

		return result;
	}

	@Override
	public Map<String, String[]> getParameterMap() {
		return params;
	}

	@Override
	public Enumeration<String> getParameterNames() {
		return new Vector<String>( params.keySet() ).elements();
	}

	@Override
	public String[] getParameterValues( String name ) {
		String[] result = null;

		Object v = params.get( name );
		if( v == null ) {
			result = null;
		} else if( v instanceof String[] ) {
			result = ( String[] )v;
		} else if( v instanceof String ) {
			result = new String[] { ( String )v };
		} else {
			result = new String[] { v.toString() };
		}

		return result;
	}

}

web.xml增加配置:
<filter>
		<filter-name>paramFilter </filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>paramFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>







java高级特性之--集合

集合框架 所谓集合框架就是一个类库的集合,集合框架就是用来表示和操作集合的统一架构,它包含了实现集合的接口与类 集合框架中不同集合类各自有不同的数据结构,所以在使用中要根据应用的性能要求来选择不同的集...
  • djx5344
  • djx5344
  • 2017年08月01日 09:15
  • 92

JAVA高级特性之集合

框架 http://www.cnblogs.com/skywang12345/p/3308498.html List集合 http://www.cnblogs.com/skywang12345/...
  • ChuanSuoYiDaSan
  • ChuanSuoYiDaSan
  • 2018年01月08日 14:27
  • 24

java高级特性之泛型

泛型擦除反射机制自定义泛型类自定义类型方法java泛类型相关知识1 为什么使用泛型解决元素存储时候的安全性问题,同时解决获取集合元素的时候类型强转的问题。提高代码的重用率。例如编写一个泛型类,而我们不...
  • xiaozhaorui
  • xiaozhaorui
  • 2016年07月18日 21:14
  • 691

JavaWeb学习篇之----Servlet过滤器Filter和监听器

一、Servlet过滤器的概念: ***********************************************************************************...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年04月10日 18:41
  • 44083

JavaWeb——过滤器的原理

在写一个JavaWeb的网站的时候遇到了这样一个问题。我将WebRoot下面的一个user文件夹设置成必须登录才可以访问,所以就使用了过滤器 public void doFilter(Servl...
  • fonxian
  • fonxian
  • 2015年06月11日 11:12
  • 1585

深入理解Java虚拟机:JVM高级特性与最佳实践

目 录 [ - ] 《深入理解Java虚拟机:JVM高级特性与最佳实践》前言《深入理解Java虚拟机:JVM高级特性与最佳实践》内容特色《深入理解Java虚拟机:JVM高级特性与最佳实践》目录第...
  • ityouknow
  • ityouknow
  • 2016年06月24日 10:18
  • 3108

Java Web 之过滤器Filter详解

、概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件...
  • xiantingxinbuone
  • xiantingxinbuone
  • 2013年08月18日 21:53
  • 1902

java高级特性

第六天: 教学任务:         第六章  高级特性, 共 39 个slide(132-171); 目标: -------------------------------...
  • jakeswang
  • jakeswang
  • 2016年01月25日 11:10
  • 498

java web中过滤器的配置

首先在项目中新建个类 public class FirstFilter implements Filter 要实现Filter接口 代码如下 package jia; import ja...
  • fengzijia
  • fengzijia
  • 2014年12月18日 23:58
  • 999

【学习总结】java高级特性之四种JAVA内部类总结

标题:java内部类 内部类:在JAVA中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、静态内部类、局部内部类、匿名内部类。 ...
  • heccmm
  • heccmm
  • 2016年12月20日 18:13
  • 383
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Web高级特性之(一)过滤器
举报原因:
原因补充:

(最多只允许输入30个字)