Java技术积累——AOP思想之Filter的使用

  在.NET中也曾介绍过关于Filter的使用。它是AOP思想的一个很重要的应用。同样在Java中同样也是支持filter的。在这里仅以温故的目的再总结一下filter的一些基础知识点。

1、.net mvc中有关filter的使用

http://blog.csdn.net/wangyy130/article/details/44241957

        2、Java小例子

  在DRP视频中用到了filter是关于JSP页面乱码问题,给每个页面设置编码格式,如果按照平常的书写习惯,需要在每个页面中都进行设置:request.setCharacterEncoding("UTF-8");

为了方便,省去重复的代码,这里用到了filter,具体代码如下:

public class CharsetEncodingFilter implements Filter { //这里要实现Filter这个父类

	private String encoding;
	
	/**
	 * 真正要执行的filter 
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		System.out.println("CharsetEncodingFilter--->>begin");
		//设置字符集
		request.setCharacterEncoding(encoding);
		//继续执行,这里用doFilter这个方法来保证继续执行JSP下面的代码
		chain.doFilter(request, response);

	}

	/**
	 * 初始化操作,这里可以获取参数
	 */
	public void init(FilterConfig filterConfig) throws ServletException {
		
		this.encoding=filterConfig.getInitParameter("encoding"); //获得初始化参数
		System.out.println("CharsetEncodingFilter--->>init()"+encoding);

	}

}
  从上面代码中并不能真正实现filter来拦截所有的JSP进行设置编码格式。还需要有配置文件的设置,由配置文件提前声明filter拦截的对象。这样在执行的时候,只要符合要求的类或方法就会被拦截到filter中去执行响应的操作。

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>UTF-8</param-value>
   		</init-param>
   </filter>
   
   <filter-mapping>
   		<filter-name>CharsetEncodingFilter</filter-name>
   		<url-pattern>*.jsp</url-pattern>
   </filter-mapping>
    在这个xml文件中,拦截的对象是由url-pattern来指定的。这里的设置和servlet是一样的。只是servlet种配置的url-pattern指的是servlet对应的URL地址,而filter中则指的是要执行filter操作的类或方法。

三、总结

  不难发现filter的使用应用了AOP思想,它可以拦截所有在url-pattern中所指定的内容,并且在这个拦截器中可以加入自己想要加入的操作或执行的方法。那么这样就为我们在项目中想要加入日志管理,权限管理提供了很大的方便。再者,之前在学习的过程中,还讨论过代理模式,关于代理模式,也是AOP思想的典型应用之一,可分为静态代理和动态代理。而在这里的filter的使用似乎类似于静态代理,但却可以灵活配置。动态代理更加灵活方便,可在运行时随时加载代理所想要委托的接口的方法,若与filter结合可能会发挥更大的功效,更深层次的应用还有待更深入的学习和探究!


评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值