第十、拦截器
10.1、action拦截
10.2、全局拦截
10.3、方法拦截
10.1、action拦截
该拦截会拦截掉整个action中的所以方法。
主要内容:
1、创建拦截器类,继承
AbstractInterceptor
类。
2、在struts.xml中的package里面定义拦截器,action里面调用拦截器。
范例:
拦截器代码(
InterceptorDome1):
package
com.interceptor;
import
com.opensymphony.xwork2.ActionInvocation;
import
com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public
class
InterceptorDome1
extends
AbstractInterceptor
{
/**
*
*/
private
static
final
long
serialVersionUID
= 1L;
@Override
public
String intercept(ActionInvocation arg0)
throws
Exception {
// 在此添加判断条件。
System.
out
.println(
"拦截器已拦截。"
);
return
arg0.invoke();
}
}
配置代码(struts.xml):
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
<
struts
>
<
package
name
=
"user"
namespace
=
"/"
extends
=
"struts-default"
>
<
interceptors
>
<
interceptor
name
=
"Interceptor1"
class
=
"com.interceptor.InterceptorDome1"
></
interceptor
>
</
interceptors
>
<
action
name
=
"log*"
class
=
"com.action.LoginAction"
method
=
"log{1}"
>
<
result
name
=
"success"
>
/log{1}.
jsp
</
result
>
<
interceptor-ref
name
=
"Interceptor1"
/>
<!-- 当定义使用自己的拦截器后,struts本身自带的31个拦截器就无法使用,必须手动添加 -->
<
interceptor-ref
name
=
"defaultStack"
></
interceptor-ref
>
<
allowed-methods
>
login,logout
</
allowed-methods
>
</
action
>
</
package
>
</
struts
>
10.2、全局拦截
只需要在action拦截的的基础上更改struts.xml配置即可。
范例:
struts.xml
<
struts
>
<
package
name
=
"user"
namespace
=
"/"
extends
=
"struts-default"
>
<
interceptors
>
<
interceptor
name
=
"Interceptor1"
class
=
"com.interceptor.InterceptorDome1"
/>
<!-- 定义自己的拦截器栈
,里面的拦截器会被
一起调用 --
>
<
interceptor-stack
name
=
"myStack"
>
<
interceptor-ref
name
=
"Interceptor1"
/>
<
interceptor-ref
name
=
"defaultStack"
/>
</
interceptor-stack
>
</
interceptors
>
<!-- 定义所以action都会调用的拦截器栈 -->
<
default-interceptor-ref
name
=
"myStack"
></
default-interceptor-ref
>
<!-- 定义全局的result,无论哪个被拦截器拦截的action都会相应到需要的页面 -->
<
global-results
>
<
result
name
=
"fail"
>
/fail.jsp
</
result
>
</
global-results
>
<
action
name
=
"log*"
class
=
"com.action.LoginAction"
method
=
"log{1}"
>
<
result
name
=
"success"
>
/log{1}.
jsp
</
result
>
<
allowed-methods
>
login,logout
</
allowed-methods
>
</
action
>
</
package
>
</
struts
>
10.3、方法拦截
范例:
拦截器:
InterceptorDome.java
package
com.interceptor;
import
com.opensymphony.xwork2.ActionInvocation;
import
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public
class
InterceptorDome
extends
MethodFilterInterceptor
{
private
static
final
long
serialVersionUID
= 1L;
@Override
protected
String doIntercept(ActionInvocation arg0)
throws
Exception {
System.
out
.println(
"执行拦截"
);
return
arg0.invoke();
}
}
struts.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
<
struts
>
<
package
name
=
"user"
namespace
=
"/"
extends
=
"struts-default"
>
<
interceptors
>
<
interceptor
name
=
"interceptor1"
class
=
"com.interceptor.InterceptorDome"
></
interceptor
>
</
interceptors
>
<
action
name
=
"user*"
class
=
"com.action.UserAction"
method
=
"{1}"
>
<
result
name
=
"success"
>
/{1}.
jsp
</
result
>
<
interceptor-ref
name
=
"interceptor1"
>
<
param
name
=
"includeMethods"
>
edit
</
param
>
<!-- <param name="excludeMethods">edit
</param>
-->
</
interceptor-ref
>
<
interceptor-ref
name
=
"defaultStack"
></
interceptor-ref
>
<
allowed-methods
>
add,edit
</
allowed-methods
>
</
action
>
</
package
>
</
struts
>
欢迎大家的提问和纠正。