`
cskysnew
  • 浏览: 13194 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

SAIF:Struts的AOP

阅读更多

偶最近在研究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 代码
  1. <plug-in className="net.sf.struts.saif.SAIFPlugin">  
  2. <set-property property="interceptor-config" value="/WEB-INF/interceptor-config.xml" />  
  3. </plug-in>  


<set-property value="/WEB-INF/interceptor-config.xml" property="interceptor-config"></set-property>

最后,编写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对拦截器进行声明。


<!---->
<!---->
<interceptor name="EditNoticeActionInterceptor"></interceptor>type="net.jetmaven.interceptor.EditNoticeActionInterceptor"/>
<action type="net.jetmaven.action.EditNoticeAction"></action>
<interceptor name="EditNoticeActionInterceptor"></interceptor>

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

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

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

分享到:
评论
4 楼 cskysnew 2007-03-02  
Ivan Li 写道
我如果花时间去研究这个,不如直接升级到struts2



谢谢Ivan Li的建议,因为目前公司大部分人都使用struts1.1,因此我构建的框架希望能够较为简单,不需要太长时间的学习就可以较好的掌握,struts2需要所有人重新学习,代价较大。
3 楼 leafage 2007-03-02  
两年前我搭了一个框架是webwork+spring+hibernate但是发现我们项目组的人基本都不熟悉webwork,只会struts所以我就改成
struts+spring+hibernate,我当时就是用saif提供拦截器的功能来改写了webwork的,这样就不用再改写其他的,只是action的变化了,那个项目最后还是如期完成。系统已经运行一年了还OK!但我还是喜欢webwork的拦截器功能
2 楼 hgq0011 2007-03-02  
升级到struts2.0就好了。:)
1 楼 IvanLi 2007-03-02  
我如果花时间去研究这个,不如直接升级到struts2

相关推荐

    saif(struts1 interceptor)

    但是,由于Struts1的流行和项目需求,"saif(struts1 interceptor)"插件应运而生,旨在为Struts1添加拦截器功能。 拦截器在软件设计模式中是一种重要的组件,它允许在请求处理前后插入自定义的逻辑,例如日志记录、...

    Struts的AOP

    ### SAIF:Struts Action Invocation Framework 为了解决这一问题,LarsHoss和DonBrown开发了SAIF(Struts Action Invocation Framework),这是一种插件机制,能够为Struts框架引入AOP的能力。SAIF通过提供一种拦截...

    SAIF:2023年中国新富人群财富健康指数.pdf

    行业研究报告

    在struts1中使用拦截器——saif-0.1.jar

    本文将深入探讨在Struts1中如何使用拦截器,并以saif-0.1.jar为例,解释其在实际项目中的应用。 首先,理解Struts1拦截器的概念。拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序对请求进行拦截,执行...

    Struts1 拦截器(SAIF)的使用

    Spring负责依赖注入和AOP(面向切面编程),Struts1负责表现层管理,而Hibernate则处理持久化操作。在这个项目中,SAIF插件与这三个框架协作,提供拦截器功能。 **4. SQL语句和数据库配置** 项目中使用了MySQL...

    struts拦截器需要的saif-0.1.zip

    Struts1是其早期版本,而StrutsAop则是Struts框架的一个扩展,它引入了面向切面编程(AOP)的概念,使得在Struts框架中可以方便地实现横切关注点,如日志、事务管理等。在Struts1中,拦截器(Interceptor)扮演了...

    struts拦截器jar 包

    标题中的"struts拦截器jar包"指的是用于增强Struts 1.x框架功能的特定库,它们是`saif-0.1.jar`和`saif-spring.jar`。这两个jar包是由开发者或社区成员Saif创建的,可能是为了集成Spring框架或者提供特定的拦截器...

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

    总的来说,`struts1拦截器实现所需saif.jar包`提供了Struts1与Spring框架整合的能力,特别是利用Spring的AOP特性来实现拦截器功能。这使得开发者能够在Struts1项目中享受到Spring带来的便利,同时通过拦截器优化和...

    saif相关jar包

    "saif-spring"则可能是saif与Spring框架的集成,旨在使saif的功能能够无缝地融入到Spring应用中,使得开发者可以利用Spring的依赖注入、AOP(面向切面编程)和其他特性来管理和使用saif的功能。 接下来是"spring",...

    struts1.2拦截器使用插件

    在Struts1.2中,拦截器(Interceptor)是一个非常关键的组件,它实现了AOP(面向切面编程)的概念,使得开发者可以在不修改业务逻辑代码的情况下,对请求处理流程进行增强或拦截。本文将详细介绍Struts1.2中的拦截器...

    saif相关jar包.rar

    标题中的"saif相关jar包.rar"指的是一个压缩文件,其中包含了与saif相关的四个jar包:saif、saif-spring、saif-plugin以及spring。描述中提到的“之前上传的有点小问题”可能是指之前提供的版本存在错误或不完整,...

    struts1实现拦截所用的jar包

    7. **saif-0.1.jar**和**saif-spring.jar**:这两个JAR文件可能是特定的第三方库或者插件,它们可能提供了与Struts1和Spring的集成,例如自定义拦截器或辅助工具类。具体的功能需要根据文档或者代码来了解。 在项目...

    saif包.zip

    "saif包.zip"中的"saif-0.1.jar"就是针对Struts1框架的一个拦截器库。 saif-0.1.jar是一个第三方拦截器实现,它扩展了Struts1的核心功能,帮助开发者更方便地管理和定制请求处理流程。这个库可能包含了一系列预定义...

    struts2——jar包

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用。Struts2的核心在于提供一个强大的、灵活的和可扩展的架构,使得开发者能够更方便地构建和管理业务...

    saif-spring.jar

    saif-spring.jar 相信很多人需要

    saif-0.1.jar

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

    Format String Exploitation Tutorial-Saif EI-Sherei

    例如,`printf("my name is: %s\n", "saif");` 这段代码会输出 `my name is: saif`。在这个例子中,`%s` 是一个格式化标识符,表示后面紧跟的是一个字符串。 **表1-1:常见格式化标识符** | 格式标识符 | 描述 | ...

    SAIF嵌入式Linux系统工程师就业班入门复习大纲归类.pdf

    SAIF嵌入式Linux系统工程师就业班入门复习大纲归类.pdf

    SAIF&嘉信理财-2019年中国新富人群财富健康指数-2020.12-52页精品报告2020.pdf

    标题中提到的“SAIF&嘉信理财-2019年中国新富人群财富健康指数-2020.12-52页精品报告2020”揭示了以下几个关键知识点: 1. 报告主题:该报告聚焦于中国的新富人群,即那些财富状况良好,经济实力相对较强的个人或...

Global site tag (gtag.js) - Google Analytics