struts2学习之拦截器

拦截器是Struts2框架的核心内容之一,许多核心功能(避免表单重复提交,数据类型转换,数据校验,文件上传,国际化及权限管理等)都是通过拦截器实现的。

Struts2中的拦截器是面向切面编程(AOP)设计思想的实现。

拦截器的使用通常包含以下几步:

1.创建拦截器类。

拦截器类可以通过实现Interceptor接口(实现init(),destroy(),intercept()方法),也可以通过集成AbctractInterceptor类并重写intercept()方法。

package cn.bdx.intercepter;

import java.util.Map;

import cn.bdx.model.LoginUser;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyInterceptor1 extends AbstractInterceptor{
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//已登录作为实例
		Object action = invocation.getAction();
		if(action instanceof LoginUser) {
			return invocation.invoke();
		}
		Map<String,Object> session = invocation.getInvocationContext().getSession();
		LoginUser loginUser = (LoginUser)session.get("loginUser");
		if(loginUser != null){
			return invocation.invoke();
		}else {
			((ActionSupport) action).addActionMessage("您还没有登录");
			return "input";
		}
	}
}

2.注册拦截器

拦截器在struts2设计为可插拔的方式,即在使用对拦截器类进行注册,在不使用时直接删除掉即可

在struts.xml文件中进行配置

方式1:配置package全局的拦截器

<package name="default" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="login" class="cn.bdx.intercepter.MyInterceptor1"></interceptor>
			<interceptor-stack name="myLoginStack">
				<interceptor-ref name="login">
					<param name=""></param>
				</interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="myLoginStack" />
	</package>

 注:interceptor标签用于配置自己的拦截器,interceptor-stack用于自定义自己的拦截器的stack,default-interceptor-ref的配置表明在这个package包中使用myLoginStack这个拦截器。

方式2:action内部的拦截器

<package name="default" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="login" class="cn.bdx.intercepter.MyInterceptor1"></interceptor>
		</interceptors>
		<action name="login" class="cn.bdx.controller.LoginUserController" method="login1">
			<interceptor-ref name="login"></interceptor-ref>
		</action>
	</package>

注:Struts2中有许多内置的拦截器,详细内容可以查看struts-default.xml文件内容。

猜你喜欢

转载自forsave.iteye.com/blog/2290706