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 ...
随机推荐
- (转)alter database open resetlogs 的意义
转自:http://blog.sina.com.cn/s/blog_63216bda0100zblr.html Oracle文档中提到,一旦用备份的控制文件进行数据库恢复,就需要使用resetlogs ...
- HibernateCRUD基础框架(2)-HQL语句构造器(HqlQueryBuilder,HqlUpdateBuilder)
上篇讲述了最基本的实体类,本篇接着讲述HQL语句构造器,包括查询和更新等. 优点:通过面向对象的方式构造HQL语句,更快捷,不需要手动拼接HQL. 缺点:封装可能降低性能,只能支持常用的和较为简单的H ...
- 【零基础入门学习Python笔记012】一个打了激素的数组3
列表的一些经常使用操作符 比較操作符 逻辑操作符 连接操作符 反复操作符 成员关系操作符 +表示两个连接.*表示复制. list中"+"两边的类型必须一致. 演示样例: water ...
- 【u246】卫星照片
Time Limit: 1 second Memory Limit: 64 MB [问题描述] 农夫 John 正在研究他的农场的卫星照片.照片为一个R (1<= R <= 75) 行C ...
- Yii Framework2.0开发教程(1)配置环境及第一个应用HelloWorld
准备工作: 我用的开发环境是windows下的apache+mysql+php 编辑器不知道该用哪个好.临时用dreamweaver吧 我自己的http://localhost/相应的根文件夹是E:/ ...
- JobService和JobScheduler机制在Android5.0以上保活
JobService和JobScheduler机制在Android5.0以上保活 我们知道在Android5.0之前,Android源代码还是有不小漏洞的,导致非常多不光明的手段来进行++保活++.但 ...
- angular之Http服务
原文 https://www.jianshu.com/p/53e4a4bfad7d 大纲 1.什么是angular服务 2.服务的类别 3.认识angular的Http请求 4.简单实例 5.angu ...
- CentOS下安装和配置MySQL-JDK-Tomcat-Nginx(个人官网环境搭建手册)
今天,重新弄我的个人云主机的环境,准备运营自己用Java写的个人官网等网站. 服务器环境:阿里云CentOS 6.4位 包括以下脚本在内的绝大部分命令和脚本,都是我亲自执行过,靠谱的. 完整的&quo ...
- [RxJS] Split an RxJS observable conditionally with windowToggle
There are variants of the window operator that allow you to split RxJS observables in different ways ...
- Objective-C基础笔记(8)Foundation经常使用类NSString
一.创建字符串的方法 void stringCreate(){ //方法1 NSString *str1 = @"A String!"; //方法2 NSString *str2 ...