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

来源:互联网 发布:网络作家作品集 编辑:程序博客网 时间:2024/05/17 04:13

  在.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结合可能会发挥更大的功效,更深层次的应用还有待更深入的学习和探究!


0 0