Struts2.X 拦截器使用
2008-10-16 16:38
281 查看
什么是拦截器
拦截器,在AOP(Aspect-OrientedProgramming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
在
Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
拦截器的定义和使用
1.定义拦截器所
有的Struts
2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor。除此之外,大家可能
更喜欢继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor。
package
test;
import
com.opensymphony.xwork2.ActionInvocation;
import
com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public
class
TestInterceptor
extends
AbstractInterceptor {
@Override
public
String intercept(ActionInvocation arg0)
throws
Exception {
System.out.println(
"begin intercept"
);
return
arg0.invoke();
}
}
TestInterceptor.java
arg0.invoke()表示不做任务操作,返回被拦截的action
2.定义action
package
test;
import
com.opensymphony.xwork2.ActionSupport;
public
class
Test
extends
ActionSupport {
@Override
public
String execute(){
return
SUCCESS;
}
}
Test.java
3.配置拦截器
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<
struts
>
<
constant
name
=
"struts.action.extension"
value
=
"do"
/>
<
include
file
=
"struts-default.xml"
/>
<
package
name
=
"struts"
extends
=
"struts-default"
>
<
interceptors
>
<
interceptor
name
=
"test"
class
=
"test.TestInterceptor"
/>
</
interceptors
>
<
action
name
=
"Test"
class
=
"test.Test"
>
<
interceptor-ref
name
=
"test"
/>
<
result
name
=
"error"
>
/error.jsp
</
result
>
<
result
name
=
"success"
>
/success.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
struts.xml
4.新建jsp,并发布。
访问http://localhost:8080/Interceptor/Test.do则可看到后到拦截器的运行过程
begin intercept
以上是一个简单的拦截器的实现。但一般的都要从jsp往传一些参数,那么,怎么办呢。
在拦截器中我们可以得到session,parameter,application等,我们可以利用这些来传参数
我现把
TestInterceptor.java
改成
package
test;
import
java.util.Map;
import
com.opensymphony.xwork2.Action;
import
com.opensymphony.xwork2.ActionInvocation;
import
com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public
class
TestInterceptor
extends
AbstractInterceptor {
@Override
public
String intercept(ActionInvocation arg0)
throws
Exception {
System.out.println(
"begin intercept"
);
Map session = arg0.getInvocationContext().getParameters();
String[] str = (String[]) session.get("str");
if
(
null
!= str) {
return
arg0.invoke();
}
else
{
return
Action.ERROR;
}
}
}
TestInterceptor.java通过parameter传参数
访问http://localhost:8080/Interceptor/Test.do同样可看到后到拦截器的运行过程
但跑的结果就是error,进入error.jsp
访问http://localhost:8080/Interceptor/Test.do?str=123
结果就是seccuss,进入seccuss.jsp
参考:max的struts2中文教材
相关文章推荐
- Struts2拦截器的使用1
- Struts2拦截器的使用 (详解)
- Struts2拦截器的使用
- 如何使用预定义的拦截器(struts2)
- Struts2拦截器的使用
- Struts2使用11 -- 拦截器1 -- 概述
- Struts2使用20 -- 注解配置2 -- 生命周期回调注解(拦截器注解)
- struts2拦截器使用
- Struts2拦截器的使用
- 解决struts2使用拦截器后参数无效问题
- struts2拦截器使用(用户session失效后的统一页面指向)
- Struts2使用拦截器完成权限控制示例
- struts2拦截器的配置和使用
- Struts2拦截器的使用
- struts2中使用拦截器(Interceptor)控制登录和权限
- struts2使用拦截器
- Struts2的拦截器使用
- Struts2拦截器配置和使用
- 4.5.4: Struts2的拦截器机制---使用拦截器
- Struts2拦截器的使用 (详解)