锁定老帖子 主题:SAIF:Struts的AOP
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-02
偶最近在研究spring的aop功能,在研究struts与aop结合时,上网搜到了一个叫SAIF的东西,他是一个struts的拦截器,感觉还不错。这篇文章是我刚刚看到的,讲的不错,拿出来和大家分享。(似乎用SAIF的人很少,是不是因为它没有一个很好的开发团队,目前只有一个0.1版本只支持struts1.1) 我们都知道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文件中,如下: xml 代码
最后,编写interceptor-config.xml文件,进行相关拦截器的声明,这样你就完成SAIF的安装和设定,下面我们将以一个现时的例子来阐述SAIF的使用及其优点。 我们现在有这个一个需求,在OA中,拟定人可以修改自己发的通知,其他人均不能修改,只能查看。我们撰写了两个Action:EditNoticeAction和ViewNoticeAction,我们传给这两个Action的参数时通知的编码:noticeId。通知对象的代码如下(Hibernate的PO方式): //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,实现如下: 这样我们就完成了拦截器的代码编写,下面就是在interceptor-config.xml对拦截器进行声明。 这样我们就完成了我们既定的需求,通过介入拦截器彻底地将权限和业务逻辑分开啦。 最后再说说SAIF,SAIF默认的拦截方法没有返回值,而在这里我们使用ActionForward作为返回值,目的就是想更改原先的流程,返回值为空表示继续原先流程,返回值不为空标识修改以前的流程,这样觉得更容易理解点,与实际情况更贴切。SAIF的拦截器可以重叠使用,就是针对某一Action可以有多个拦截器,这一点也是非常有用的,我们同样更加返回值来判定是否终止这个链,如果返回值为空,标识继续该链,否则终止该链,立即返回。 根据SAIF的结构,我们写了一个DTD(右击另存),这样在IntelliJ IDEA这样的环境下,你编写xml更方便啦,只需将“http://struts.sourceforge.net/saif.dtd”和实际的DTD文件关联就可以啦。我们针对SAIF进行了相关的更改,其实就是对流程(ActionForward)的设定,使其更适合实际情况,欢迎和您探讨。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-02
我如果花时间去研究这个,不如直接升级到struts2
|
|
返回顶楼 | |
发表时间:2007-03-02
升级到struts2.0就好了。:)
|
|
返回顶楼 | |
发表时间:2007-03-02
两年前我搭了一个框架是webwork+spring+hibernate但是发现我们项目组的人基本都不熟悉webwork,只会struts所以我就改成
struts+spring+hibernate,我当时就是用saif提供拦截器的功能来改写了webwork的,这样就不用再改写其他的,只是action的变化了,那个项目最后还是如期完成。系统已经运行一年了还OK!但我还是喜欢webwork的拦截器功能 |
|
返回顶楼 | |
发表时间:2007-03-02
Ivan Li 写道 我如果花时间去研究这个,不如直接升级到struts2
谢谢Ivan Li的建议,因为目前公司大部分人都使用struts1.1,因此我构建的框架希望能够较为简单,不需要太长时间的学习就可以较好的掌握,struts2需要所有人重新学习,代价较大。 |
|
返回顶楼 | |
浏览 5006 次