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. python3 turtle画正方形、矩形、正方体、五角星、奥运五环

    python3 环境 turtle模块 分别画出 正方形.矩形.正方体.五角星.奥运五环 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:H ...

  2. php课程 10-35 php实现文件上传的注意事项是什么

    php课程 10-35 php实现文件上传的注意事项是什么 一.总结 一句话总结:记得限制大小和类型,还有就是用move_uploaded_file($sfile,$dfile);函数把上传到php临 ...

  3. Android ListView带CheckBox实现单选

    第1种方法: 首先是我们的bean: public class Bean { private boolean isChecked; private String msg = "这是一条测试数 ...

  4. AES 加密解密

    package XX.XX.XX.test; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...

  5. 【例题 6-7 UVA - 122 】Trees on the level

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二叉树的话,直接用数组存就好了. 写个bfs记录一下答案. [代码] #include <bits/stdc++.h> ...

  6. iproute2交叉编译

    测试zynq+ramdisk平台时发现自带的busybox无法通过ip命令配置can接口,执行can配置命令 ip link set can0 type can bitrate 会出现以下报错: ip ...

  7. 将App程序发布到苹果App Store

    发布iOS应用程序到App Store - 前期工作 要发布iOS应用程序到App Store首先需要一个iOS developer帐号,账号是收费的,$99美元/年.即便是免费应用也需要一个开发者账 ...

  8. Sql Server 删除所有表 脚本

    如果由于外键约束删除table失败,则先删除所有约束: --/第1步**********删除所有表的外键约束*************************/ DECLARE c1 cursor f ...

  9. glide 安装

    glide是go的一个包管理工具 参考了 https://studygolang.com/articles/10453?fr=email 遇到的问题是,用了 go get githubXXXXX去下载 ...

  10. 安装使用jupyter(原来的notebook)

    1.安装pyzmq 使用pip install pyzmq,安装不成功. 使用easy_install.exe pyzmq.成功安装. 2.安装tornado pip tornado 安装完尚不成功. ...