Java技术积累——AOP思想之Filter的使用
2015-09-24 15:10
495 查看
在.NET中也曾介绍过关于Filter的使用。它是AOP思想的一个很重要的应用。同样在Java中同样也是支持filter的。在这里仅以温故的目的再总结一下filter的一些基础知识点。
为了方便,省去重复的代码,这里用到了filter,具体代码如下:
web.xml
1、.net mvc中有关filter的使用
/article/1601485.html2、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结合可能会发挥更大的功效,更深层次的应用还有待更深入的学习和探究!相关文章推荐
- Spring MVC 4.1.3 + MyBatis 零基础搭建Web开发框架(注解模式哦)
- struts2 文件下载
- Spring jdbc call oralce procedure or function
- java装箱和拆箱已及"=="与"equals"的区别
- spring上传文件
- J2ee开发环境搭建之(一)JDK
- struts2 文件上传 三种方式
- java测试运行时间
- java学习3-冒泡排序对数组进行排序
- Spring实现数据库读写分离
- Java HashMap工作原理
- struts2前台页面传值到action的三种方式
- eclipse集成jetty开发web项目(不采用maven方式)
- java file类实现List生成本地文件与续写本地文件
- JAVA实现AES加密
- JAVA基础--db09_java继承-final-抽象类-接口
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 基于spring,Atomikos,mybatis的分布式动态数据源JTA实现
- java 冒泡算法和选择算法的比较
- Struts2中的值栈--ValueStack