Struts2——(7)拦截器组件
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)拦截器组件的更多相关文章
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- Struts2【拦截器】就是这么简单
什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- struts2之拦截器
1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...
- 【struts2】拦截器基础
1)拦截器是什么? 拦截器(Interceptor)是Struts2最强大的特性之一,它是一种可以让你在Action执行之前和Result执行之后进行一些功能处理的机制.来回顾一下官方给出的Strut ...
- JavaWeb框架_Struts2_(三)---->Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
- (转)Struts2的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/68648101 Struts2的拦截器 拦截器的概述 拦截器,在AOP(Aspect-Orien ...
随机推荐
- Mysql从入门到精通整理
目录 mysql基础 mysql进阶 mysql高级 mysql优化 正文 数据库是信息化产业的最基础的软件之一,各种管理系统,网站,在线游戏,背后基本都会有数据库的支持. 回到顶部 mysql基础 ...
- C# 进制转换 在什么情况下使用16进制,字节数组,字符串
C# 进制转换 Admin2013年9月18日 名人名言:从工作里爱了生命,就是通彻了生命最深的秘密.——纪伯伦 1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Con ...
- chmod用数字来表示权限的方法
前提: mode权限设定字串.格式:[ugoa...][[+-=][rwxX]...][,...] 当中u表示拥有者(user).g表示与拥有者属于同一个群体(group),o表示其它以外的人(ot ...
- (转)yum & wget代理设置
转自 http://www.cnblogs.com/windows/archive/2012/12/14/2817533.html yum 配置代理服务器访问要设置所有 yum 操作都使用代理服 ...
- 【Codeforces Round #440 (Div. 2) A】 Search for Pretty Integers
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先枚举一个数字的情况. 再枚举两个数的情况就好. [代码] #include <bits/stdc++.h> #defi ...
- 【SPOJ 694】Distinct Substrings (更直接的求法)
[链接]h在这里写链接 [题意] 接上一篇文章 [题解] 一个字符串所有不同的子串的个数=∑(len-sa[i]-height[i]) [错的次数] 0 [反思] 在这了写反思 [代码] #inclu ...
- SiFive Unleashed启动
SiFive Unleashed启动 请仔细参看SiFive官网的文档HiFive Unleashed 使用串口连接过程 连接好硬件(电源+USB) 尝试打开电源键,检测硬件能被识别 配置minico ...
- 账号被盗!请勿在CSDN,回复不论什么消息。
账号被盗!请勿在CSDN,回复不论什么消息.
- 博客已迁移至http://blog.csdn.net/lujinhong2/
http://blog.csdn.net/lujinhong2/ 请继续关注
- embed-it_Integrator memory compile工具使用之二
embed-it_Integrator memory compile工具使用之二 主要内容 使用ish接口自动加载memory的cfg文件运行生成memory 脚本内容 打开Integrate &am ...