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>

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

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





Struts2——(7)拦截器组件的更多相关文章

  1. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  2. Struts2【拦截器】就是这么简单

    什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...

  3. struts2总结六: Struts2的拦截器

    一.Struts2的系统结构图

  4. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  5. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  6. struts2之拦截器

    1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...

  7. 【struts2】拦截器基础

    1)拦截器是什么? 拦截器(Interceptor)是Struts2最强大的特性之一,它是一种可以让你在Action执行之前和Result执行之后进行一些功能处理的机制.来回顾一下官方给出的Strut ...

  8. JavaWeb框架_Struts2_(三)---->Struts2的拦截器

    2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...

  9. (转)Struts2的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/68648101 Struts2的拦截器 拦截器的概述 拦截器,在AOP(Aspect-Orien ...

随机推荐

  1. Day1:字符编码

    一.ASCII码 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码),8位,一个字节,最多只能表示255个符号. ...

  2. liunx基本操作常用命令

    liunx通常用作服务器,运行服务器软件,服务器要等待,类似超市学关键命令操作 内核,外壳 shell命令跟内核打交道用的是发行版本,不是内核,Radhat公司的CentOS,阿里巴巴也用这个 liu ...

  3. 利用OBJECT_DEFINITION函数来代码存档

    作为一名数据库管理员,在进行代码迁移之前,总是尽力给提交于开发环境的代码一个完整的面貌.但是,不得不承认,我不能保证不发生任何可能破坏开发系统的事情.当这种情况发生时,可能的补救措施是恢复到目标代码的 ...

  4. 使用MongoDb连接数据库服务器

    链接MongoDb数据库服务器的字符串格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN] ...

  5. ARCGIS动态画点

    小马哥淡定 原文 ARCGIS动态画点 private void DrawPointOnMap(double x, double y,bool clear) { IMapControl2 pMapCt ...

  6. Gora快速入门 分类: C_OHTERS 2015-01-30 09:55 465人阅读 评论(0) 收藏

    概述 Gora是apache的一个开源项目. The Apache Gora open source framework provides an in-memory data model and pe ...

  7. 【u122】迎接仪式

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路 ...

  8. php实现用短路求值原理求1+2+3+...+n(短路求值是什么)(仔细分析题干)

    php实现用短路求值原理求1+2+3+...+n(短路求值是什么)(仔细分析题干) 一.总结 1.仔细分析题干,找出要点:该递归还是得递归啊 2.短路求值原理:&&就是逻辑与,逻辑与有 ...

  9. 【心情】bjdldrz

    如果我对勇士的记忆停留在73胜10负,

  10. hadoop集群安装(多机,非伪集群)

    1. 创建用户 创建hadoop用户组:sudo addgroup hadoop 创建hadoop用户:sudo adduser -ingroup hadoop hadoop 为hadoop用户分配r ...