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>

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

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





转载于:https://www.cnblogs.com/lanzhi/p/6469572.html

Struts2——(7)拦截器组件相关推荐

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

    2019独角兽企业重金招聘Python工程师标准>>> 什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 ...

  2. struts2自定义拦截器并配置拦截器使其生效

    首先编写一个struts2的拦截器,要继承 MethodFilterInterceptor 并获取其中的方法 package star.july.d_interceptor;import com.op ...

  3. (转)Struts2的拦截器

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

  4. Struts2之拦截器篇

    拦截器是Struts2框架的核心和基础,Struts2绝大多数功能都是通过拦截器来完成的,当StrutsPrepareAndExecuteFilter拦截到用户请求后,大量拦截器会对该请求进行处理,然 ...

  5. struts2 18拦截器详解(五)

    I18nInterceptor 该拦截器处理defaultStack第四的位置,是用来方便国际化的,如果说我们的一个Web项目要支持国际化的话,通常的做法是给定一个下拉框列出所支持的语言,当用户选择了 ...

  6. Struts2自定义拦截器实例—登陆权限验证

    版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...

  7. dwz ajax session超时跳转登录页(struts2自定义拦截器)

    1.定义struts2拦截器(网上例子很多) 代码如下: package rt.intercepter;import java.util.Map;import javax.servlet.http.H ...

  8. Struts2 自定义拦截器(方法拦截器)

    转自:http://05061107cm.iteye.com/blog/365504 struts2系统自带了很多拦截器,有时需要我们自己定义,一般有两种方式: 一.实现Interceptor接口 J ...

  9. struts2中拦截器的使用

    拦截器的使用 实现AOP 转自http://www.cnblogs.com/fmricky/archive/2010/05/24/1742514.html 1.什么是拦截器(Interceptor) ...

最新文章

  1. fzu 2139 久违的月赛之二
  2. 图像处理与计算机视觉:基础,经典以及最近发展(4)图像处理与分析
  3. Java中的带参方法
  4. Java22-day13【Lambda表达式(标准格式、练习、注意事项)、接口组成更新(默认-静态-私有方法)、方法引用(构造器)】
  5. jMeter 里如何使用 properties
  6. [css] 当使用@font-face的时候,为什么src中要加入local呢?
  7. 计算机应用基础自考,自考计算机应用基础
  8. 编程之美2014 热身赛 题目3 : 树上的三角形
  9. 字节跳动 2022 校园招聘研发提前批正式启动!
  10. 代数学笔记11: 分圆域,分圆多项式,求解17次方程
  11. 怎么能把看不清的照片给看清_拍完照不会后期怎么办?教你一个懒人办法,能帮照片变“高级”...
  12. python——redis
  13. 北京理工大学计算机学院杨晨,杨旭_北京理工大学计算机学院
  14. lol韩服游戏内设置_LOL手游:灵药战队有多强?辅助国际服第六,AD堪比UZI
  15. yii2 提供接口给java_Yii2 使用 RESTful 写API接口 实例
  16. 二阶无源低通滤波器幅频特性曲线_二阶无源滤波器.doc
  17. mysql truncate分区表_MySQL分区表的管理~1
  18. mini-smooth-signature.js:小程序canvas带笔锋手写签名,支持微信/支付宝/钉钉/QQ等多平台小程序使用
  19. python花瓣长度和花瓣宽度散点图鸢尾花_matplotlib可视化操作及案例分析
  20. 树莓派之安装Vulkan

热门文章

  1. Deformable ConvNets--Part2: Spatial Transfomer Networks(STN)
  2. Cisco PT模拟实验(19) 路由器的NAT功能配置
  3. zabbix_server的自动发现,实现批量添加主机,并链接到模板
  4. Web开发经验谈之F12开发者工具/Web调试[利刃篇]
  5. ASP.NET 实现站内信功能(点对点发送,管理员群发)
  6. javascript刷新页面的集中办法
  7. jQuery对select操作
  8. 51CTO采访Cisco专家何凌:实现整体虚拟化
  9. 推荐的 PHP 读物列表
  10. 如何在 Linux 中创建一个共享目录