struts1的拦截器1_1

转载 2012年03月23日 22:10:38

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

我们都知道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能够有多个拦截器,这一点也是很有用的,我们同样更加返回值来判定是否终止这个链,假如返回值为空,标识继续该链,否则终止该链,立即返回。



struts1的拦截器1_2

Struts2已经发布一段时间了,这个版本较struts1.x版本有了很大变化,其中一个就是增加了拦截器功能。这是个非常有用的功能,可是struts1.x却没有。     其实,struts1.x可...
  • sprita1
  • sprita1
  • 2012年03月23日 22:13
  • 4331

struts1的拦截器,一个简单的示范

1·首先写一个类 MyInterceptor 继承ActionServlet,代码如下 [java] view plaincopy public class...

在struts1.2中使用拦截器

 要在struts1.2中使用拦截器,必须使用到以下三个包: 1:saif-0.1.jar  2:saif-spring.jar 3:spring.jar把以上三个包放入到自己J2EE工程中的web-...

Struts1.3——Struts入门

本文介绍了struts的入门知识,通过手工配置实现一个struts项目介绍了struts的工作原理和流程...
  • ggGavin
  • ggGavin
  • 2016年06月21日 20:48
  • 6201

Spring AOP与struts1.x,struts2.x的结合

spring AOP用于做权限拦截是一个很好的选择.spring AOP其拦截的原理就是生成目标类的代理类对目标类应用通知(advice) 通知类型有: 前置通知 后置通知 最终通知 例外通知 环绕通...

struts1跳入指定方法

1 主页面调用 $.ajax({ /cap/mainPage/updateTreeInfo.do?method=updateTree">url:"/cap/mainPage/updat...

struts2拦截器demo1

  • 2013年10月29日 21:12
  • 10KB
  • 下载

Struts2拦截器的使用1

如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了str...
  • gd2008
  • gd2008
  • 2012年10月17日 10:34
  • 464

Struts2的拦截器(1)

框架提供默认的拦截器栈可以满足大部分应用程序的需要的,所以大部分应用并不需要修改默认的拦截器栈来新增加新的拦截器。 许多动作(Action)有着共同的问题需要处理。另外,不同的动作,面临的需要处理的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts1的拦截器1_1
举报原因:
原因补充:

(最多只允许输入30个字)