您的位置:首页 > 编程语言 > Java开发

Struts2.X 拦截器使用

2008-10-16 16:38 281 查看

什么是拦截器

拦截器,在AOP(Aspect-Oriented
Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是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中文教材
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: