Struts 2 拦截器教程1

Struts 2 拦截器例题

通过这个例子我们可以了解怎样在执行动作(action)之前或之后调用拦截器。让我们看看下面的图。

 

当向Struts 2框架传入一个请求时,下面的动作是被循环执行的。

  • 框架首先找到哪个动作(action)类被调用并且查找与动作(action)相关联的拦截器(interceptor)。
  • 框架创建一个动作调用器(ActionInvocation)的实例并调用invoke()方法。这里框架处理控制动作调用器(ActionInvocation)是为了进一步处理请求处理。
  • 动作调用器(ActionInvocation)是动作(action)和关联拦截器(interceptor)的封装体。
  • 动作调用器(ActionInvocation)调用在栈中的第一个拦截器(interceptor)的intercept()方法。我们使用下面的例子说明,这个例子非常的简单,值使用了一个记录log的拦截器(interceptor)。
  • LoggingInterceptor的intercept()方法代码如下:

  • 正如你所看到的,第一个logMessage()方法被调用并记录log信息。之后调用动作调用器(ActionInvocation)的invoke()方法,最后动作调用器(ActionInvocation)将循环调用栈中的下一个拦截器(interceptor),直到最后一个被调用。
  • 在执行完所有的拦截器(interceptor)之后,动作(action)类将被调用。最后返回字符串并发送给相应的视图(view)。这是正常的运行流程。
  • 但是如果发生错误,那么这个请求处理将被终止。之后的拦截器(interceptor)也不会被调用,动作(action)也不会被执行。如果任何或最终结果发送给用户,那么拦截器(interceptor)将以颠倒的顺序调用来进行后处理。
  • 现在让我们来看一下正常的流程。这个例子里只有一个拦截器(interceptor)在栈中。所以在记录"START_MESSAGE"之后,动作调用器(ActionInvocation)的invoke()方法将被调用,然后动作(action)返回"success"消息,然后再次调用拦截器(interceptor)做后处理,这个时候"FINISH_MESSAGE"被记录并返回结果(result)。基于结果(result)的相应视图(view)将被发送给用户。

使用拦截器(interceptor)的好处:

  • 极其灵活。
  • 动作(action)类更简洁更集中。
  • 代码的可读性和重用性。
  • 测试代码更方便。
  • 可以为每个请求在栈中添加相应的拦截器(interceptor)和自定义动作(action)进程。

让我们来看看下面的例子。在index.jsp页面中我们转向了"TestLogger" URL。

 

在struts.xml文件中,TestLogger URL被映射到TestLoggerAction类中。

 

interceptor-ref用来给动作(action)添加拦截器(interceptor)。所有的拦截器(interceptor)都被定义到struts-default.xml文件的struts-default包中。

 

现在TestLoggerAction类的execute方法将被调用。代码如下:

 

根据在XML文件中的设置,将被转向success页面。

 

下面是输出结果:

 

源代码:下载

源代码 + lib:下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值