SAIF:Struts的AOP

struts1中使用拦截器——saif-0.1.jar struts1中使用拦截器——----------------------------------------------------saif-0.1.jar 立即下载

我们都知道Struts默认没有实现AOP,这和WebWork2想比确实矮了一截,还好,有人(Lars Hoss 和 Don Brown)意识到这点,编写SAIF(Struts Action Invocation Framework)弥补了这个缺陷,下面就是SAIF的使用介绍。

SAIF的安装很简单:首先将saif-0.1.jar文件复制到WEB-INF/lib目录下即可,然后修改struts-config.xml文件,将SAIF以plugin方式添加到struts-config.xml文件中,如下:


<plug-in className="net.sf.struts.saif.SAIFPlugin">
<set-property property="interceptor-config" value="/WEB-INF/interceptor-config.xml" />
</plug-in>

最后,编写interceptor-config.xml文件,进行相关拦截器的声明,这样你就完成SAIF的安装和设定,下面我们将以一个现时的例子来阐述SAIF的使用及其优点。

我们现在有这个一个需求,在OA中,拟定人可以修改自己发的通知,其他人均不能修改,只能查看。我们撰写了两个Action:EditNoticeAction和ViewNoticeAction,我们传给这两个Action的参数时通知的编码:noticeId。通知对象的代码如下(Hibernate的PO方式):


public class NoticePO
{
private Integer id; //编码
private String title; //标题
private String content; //内容
private Integer authorId; //发布人编码
private Date publishedDate; //发布日前

//getter and setter methods
……….
}

同时我们拥有两个jsp文件:viewnotice.jsp和editnotice.jsp,这样我们在Action中根据noticeId将NoticePO构建出来,然后传给jsp页面,jsp负责将数据显示出来,这样的流程就完毕啦。但是我们在实现中忘记了这个一点,权限的设定。所以我们需要对EditNoticeAction进行拦截操作,也就是在EditNoticeAction操作完毕后,将session中的用户id和NoticePO中的authorId进行对比,如果相同,表示是该通知的拟定人,指向editnotice.jsp页面,否则,指向viewnotice.jsp页面。新建EditNoticeInterceptor,实现如下:


public class EditNoticeInterceptor extends DefaultInterceptor
{
public ActionForward afterAction(Action action, ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException
{
Integer userId=(Integer)request.getSession().getAttribute(“User_ID”);
NoticePO notice=( NoticePO)request.getAttribute(“notice”);
if(notice.getAuthorId()==userId)
{
return mapping.findForward(“view”);
}
return null;
}
}

这样我们就完成了拦截器的代码编写,下面就是在interceptor-config.xml对拦截器进行声明。


<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE interceptor-config SYSTEM "http://struts.sourceforge.net/saif.dtd">
<interceptor name="EditNoticeActionInterceptor"
type="net.jetmaven.interceptor.EditNoticeActionInterceptor"/>
<action type="net.jetmaven.action.EditNoticeAction">
<interceptor name="EditNoticeActionInterceptor"/>
</action>
</interceptor-config>

这样我们就完成了我们既定的需求,通过介入拦截器彻底地将权限和业务逻辑分开啦。

最后再说说SAIF,SAIF默认的拦截方法没有返回值,而在这里我们使用ActionForward作为返回值,目的就是想更改原先的流程,返回值为空表示继续原先流程,返回值不为空标识修改以前的流程,这样觉得更容易理解点,与实际情况更贴切。SAIF的拦截器可以重叠使用,就是针对某一Action可以有多个拦截器,这一点也是非常有用的,我们同样更加返回值来判定是否终止这个链,如果返回值为空,标识继续该链,否则终止该链,立即返回。

根据SAIF的结构,我们写了一个DTD(右击另存),这样在IntelliJ IDEA这样的环境下,你编写xml更方便啦,只需将“http://struts.sourceforge.net/saif.dtd”和实际的DTD文件关联就可以啦。我们针对SAIF进行了相关的更改,其实就是对流程(ActionForward)的设定,使其更适合实际情况,欢迎和您探讨。

 

参考资料:

ezerg 编程小语

saif(struts1 interceptor) struts1 拦截器功能的实现。struts2 中的interceptor很方便。但在struts1中没有这个功能,用这个插件很容易实现。 立即下载

相关推荐

Struts1 拦截器(SAIF)的使用

完整可运行起来的SSH项目!中使用了SAIF 插件 实现拦截器的效果!并且有sql语句 !我使用的是mysql数据库,如果你使用别的数据库请改配置文件!运行成功后注意控制台的输出

struts1的拦截器1_1

SAIF(Struts Action Invocation Framework)是一个开源组件,它让Struts框架具备Action拦截器与IOC的功能 1.将saif.jar包放入你的lib中。 2.创建Interceptor类。 3.写interceptor配置文件:interceptor-config.xml。这个配置文件中指定了interceptor类和要被拦截的action。 4.在...

移动开发记录 265

struts拦截器jar 包

struts1.x拦截器jar包,有saif-0.1.jar和 saif-spring.jar 两个jar包

Struts1.x中使用net.sf.struts.saif.SAIFSpringPlugin配置Interceptor(拦截器)

几个月前,Struts2发布,这个版本较struts1.x版本有了很大变化,其中一个就是增加了拦截器功能。这是个非常有用的功能,可是struts1.x却没有。其实,struts1.x可以配合插件,实现拦截器的功能。        SAIF(Struts Action Invocation Framework)是一个开源组件,它让Struts框架具备Action拦截器与IOC的功能,这样你的1.x框

gundumw100的专栏 676

saif——让struts1.1中实现AOP

   最近做一个基于struts1.1的项目,需要实现一个日志审计的功能,但又不想破坏原有代码的内聚行,于是考虑到在sturts1.1中采用AOP,但是由于自身缺陷,struts1.1不支持AOP,只好网上求助一下插件了,最后采用了saif插件,发现还挺好用,故在此写个使用方法分享一下。 具体步骤如下:      首先,到http://sourceforge.net/project/sho

1027

struts1实现aop

项目05年正式上线,所用struts框架版本较低,在此环境实现aop的方法如下: 步骤一:下载saif插件,放置到WEB-INF\lib下面。见附件 步骤二:在struts-config.xml中配置 [code="xml"] [/code] 步骤三:在WEB-INF目录中增加文件interceptor-config.xml [code="xml"]...

Dead_Knight的专栏 890

struts1的拦截器(1.1)

SAIF(Struts Action Invocation Framework)是一个开源组件,它让Struts框架具备Action与IOC的功能 1.将saif.jar包放入你的lib中。 2.创建Interceptor类。 3.写interceptor配置文件:interceptor-config.xml。这个配置文件中指定了interceptor类和要被拦截的action。 4.在strut

ld513508088的专栏 867

struts1拦截器实现所需saif.jar包

saif-spring.jar一个 需要的拿去 适用于struts1 实现了拦截器功能 有老项目的下载

saif相关jar包

里面包含saif,saif-spring,spring的三个jar包

saif-0.1.jar

saif-0.1.jarsaif-0.1.jarsaif-0.1.jar

saif相关jar包.rar

里面包含saif,saif-spring,saif-plugin,spring的四个jar包。之前上传的有点小问题

Struts开发之工具篇

好多开发人员会抱怨Struts开发难,框架设计不好,受到现有好多框架(WebWork)的挑战,当然作为一个经典的MVC框架,并且有相当多的开发人员,Struts的开发有自己独到的优点,下面我们将看看如何去开发一个Struts应用,在这里我们拟定做一个留言版的应用,包含一些功能:注册用户、留言、查看、修改等等。1 业务原型流程:要了解业务情况,简单的就是进行业务流程的建模。好多工具提供基于S

linux_china的专栏 2718

struts1.x和2.0比较 - 理论(4)

  四、       拦截器 Interceptor(以下译为拦截器),在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者定义在一个action执行的前后执行的代

317

Struts工具

Struts开发――工具篇好多开发人员会抱怨Struts开发难,框架设计不好,受到现有好多框架(WebWork)的挑战,当然作为一个经典的MVC框架,并且有相当多的开发人员,Struts的开发有自己独到的优点,下面我们将看看如何去开发一个Struts应用,在这里我们拟定做一个留言版的应用,包含一些功能:注册用户、留言、查看、修改等等。1 业务原型流程:要了解业务

涛涛的专栏 1178

Struts开发――工具篇

Struts开发――工具篇好多开发人员会抱怨Struts开发难,框架设计不好,受到现有好多框架(WebWork)的挑战,当然作为一个经典的MVC框架,并且有相当多的开发人员,Struts的开发有自己独到的优点,下面我们将看看如何去开发一个Struts应用,在这里我们拟定做一个留言版的应用,包含一些功能:注册用户、留言、查看、修改等等。1 业务原型流程:要了解业务

习惯的魅力 1108

关于struts1与struts2

1.Action方面 Action是整个Struts框架的核心内容,Struts1.x与Struts2的Action模型很大的区别。Struts2是一个pull-MVC架构 ,从开发者角度看,就是说需要显示给用户的数据可以直接从Action中获取,而不像 Struts1.x那样,必须把相应的Bean存到Page、Request或者Session中才能获取。Struts1.x 必须继...

weixin_30703911的博客 152
上一篇: Struts下的MapForm
下一篇: 配置JBoss 4 JDBC连接JDBC
ezerg
博客等级 码龄25年 13粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值