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 Web高级特性之(二)监听器

监听器的概念 web应用当中监听器是什么: web应用服务器—>监听器Session 定义:监听器是Servlet中的一种特殊类,用于监听ServletContext、HttpSession和S...

java web 高级特性 张孝祥 part6

  • 2008年10月22日 22:20
  • 7.77MB
  • 下载

java web 高级特性 张孝祥 part5

  • 2008年10月22日 22:16
  • 19.07MB
  • 下载

Java Web高级特性之(三)拦截器

拦截器在在流行的开源框架中很常见,依赖的技术就是Java的动态代理。 用在面向切面编程,动态代理就是拦截器的简单实现。 AOP(Aspect Oriented Programming)...

java web 高级特性 张孝祥 part2

  • 2008年10月10日 11:02
  • 19.07MB
  • 下载

JAVA Web中过滤器

  • 2009年06月01日 17:25
  • 18KB
  • 下载

java web 过滤器跟拦截器的区别和使用

今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深...

java web过滤器案列

  • 2015年07月02日 12:09
  • 2.7MB
  • 下载

java web自动登陆和乱码过滤器

  • 2015年09月02日 11:17
  • 1.35MB
  • 下载

java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)

转载地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request、response对...
  • alleged
  • alleged
  • 2016年08月18日 17:13
  • 1889
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Web高级特性之(一)过滤器
举报原因:
原因补充:

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