Struts2中Session的获取下面3中方式;
方式一:
ActionContext.getContext.getSession() //返回类型为Map<String,Object>方式二:
ServletActionContext.getRequest().getSession() //返回类型为HttpSession;方式三:
SessionAware让Action实现SessionAware接口,实现void setSession(Map<String,Object> session)方法,Struts2会在实例化Action后调用该方法,通过方法参数将Session对象注入进来。定义成员变量,接收注入进来的Session对象;
package cn.dynamic.login.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
/**
* Action基类,用于封装Action通过的方法
* @author fxq
*
*/
public class BaseAction implements SessionAware{
protected Map<String, Object> session;
/**
* 采用接口注入的方式统一获取Session;
*/
public void setSession(Map<String, Object> session)
{
session = session;
}
}
package cn.dynamic.login.action;
import cn.dynamic.login.dao.LoginDao;
import cn.dynamic.login.entity.Admin;
import cn.dynamic.login.factory.DAOFactory;
public class LoginAction extends BaseAction {
public String execute() {
//从session中取出生成的验证码;
String imageCode = (String)session.get("imageCode");
session.put("admin", admin);//向Session中存值;
}
}
针对三种方式,从返回类型和获取方式进行对比
返回类型对比
1和3方式
获取的Session是Map<String,Object>类型,Struts2采用该类型的目的是简化Session对象,而Session的存储结构和Map是一致的。
2方式
获取的Session是HttpSession,为了保持兼容性,Struts2提供了获取该类型的方式
获取方式对比
1和2方式
是主动获取Session
3方式
采用注入的方式自动注入Session,该方式是被动的。
推荐使用方式3,采用注入思想,更加灵活,面向接口编程。