【Struts2】Session的獲取

00潤物無聲00發表於2017-06-25
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,採用注入思想,更加靈活,面向介面程式設計。


相關文章