AOP:面向切面编程(通过配置文件来指定作用到目标对象)

OOP:面向对象编程

AOP具有很好的可插拔特性,很灵活。

可用于封装共通的业务处理,之后可以通过配置作用到Action组件上。

共通的业务处理有:登录检查,日志记录,性能检测,事务处理。

1、拦截器规范

(1)必须实现Intercepter接口,实现interceptor方法。

(2)拦截器组件可以继承AbstractIntercepter类(实现了Intercepter接口)。

(3)拦截器组件可以继承MethodFilterIntercepter类(继承自AbstractIntercepter),增加了方法过滤功能(上面两种方式是拦截所有方法,这个方法可以拦截指定方法)。

2、拦截器相关配置(可参考struts-default.xml中的配置)

(1)声明

<interceptor name="拦截器名"  class="包名.类名"/>

(2)引用

<interceptor-ref name="拦截器名或拦截器栈名"/>

(3)注意:当为Action组件引用了拦截器后,需要将默认的defaultStack拦截器显式引入。

3、示例

(1)示例一:记录操作日志

package xsyu.intercepter;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Map; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class LoggerIntercepter extends AbstractInterceptor{ public String intercept(ActionInvocation invocation) throws Exception {
String result = invocation.invoke(); //调用后续的拦截器或者action业务方法
//记录用户操作
Map<String, Object> session = (Map<String, Object>) invocation.getInvocationContext().getSession();
//获取action名称
String actionName = invocation.getProxy().getActionName();
//获取类名
String clasName = invocation.getProxy().getAction().toString();
//获取方法名称
String methodName = invocation.getProxy().getMethod();
String user = "大碗干拌";
String msg = "用户" + user + "在" + new Date() + "执行了" + actionName + "中" + methodName + "方法";
FileWriter fw = new FileWriter("D:\\demo.log", true);
PrintWriter pw = new PrintWriter(fw);
pw.println(msg);
pw.close(); return result;
} }
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="pack1" extends="struts-default">
<interceptors>
<interceptor name="mylogger" class="xsyu.intercepter.LoggerIntercepter"/>
</interceptors>
<global-results>
<result name="fail">/fail.jsp</result>
</global-results>
<action name="index">
<result name="success" type="redirect">/add.jsp</result>
</action>
<action name="person" class="xsyu.action.PersonAction">
<interceptor-ref name="mylogger"/>
<interceptor-ref name="defaultStack"/>
<result name="list">/index.jsp</result>
<result name="init">/update.jsp</result>
<result name="view">/view.jsp</result>
</action>
<action name="list" class="xsyu.action.ListAction">
<result name="success">/list.jsp</result>
</action>
</package>
</struts>

注意:要添加默认拦截器。

一般是写两个拦截器,第一个拦截器先判断登录,第二个拦截器再记录日志。





最新文章

  1. UDP通信
  2. geohash算法原理及实现方式
  3. 决策树ID3算法示例
  4. 为Apache配置虚拟机Virtual Host
  5. KaliLinux装好系统后安装常用软件
  6. POJ 2528 区间染色,求染色数目,离散化
  7. sublime text 3 安装注释
  8. Metasploit Framework命令汇总
  9. android view生命周期
  10. hadoop HDFS 写入吞吐量
  11. select2 取值 赋值
  12. 结合Zen Coding快速编写HTML代码(sublime text2篇)
  13. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(47)-工作流设计-补充
  14. POJ 1026 Cipher(更换)
  15. 《java.util.concurrent 包源码阅读》09 线程池系列之介绍篇
  16. HashMap分析之红黑树树化过程
  17. 如何备份/迁移wordpress网站
  18. python Image resize 对iOS图片素材进行2X,3X处理
  19. 一、Linq简介
  20. 未能从程序集“System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.Transactions.TransactionScopeAsyncFlowOption”

热门文章

  1. Day2:列表、元组
  2. Android(Lollipop/5.0) Material Design(一) 简单介绍
  3. GitHub 上排名前 100 的 IOS 开源库简介
  4. 不可摸数 【杭电-HDOJ-1999】 附题
  5. 算法求解中的变量、数组与数据结构(STL 中的容器)
  6. HDU 1407 测试你是否和LTC水平一样高 枚举、二分、hash
  7. 【Python排序搜索基本算法】之拓扑排序
  8. ASP.NET MVC中实现多个button提交的几种方法
  9. apche commons项目简介 分类: B1_JAVA 2014-06-26 11:27 487人阅读 评论(0) 收藏
  10. [内核编程] 4.5 HOOK分发函数