struts2 在服务端接收客户端提交时取得 session 的两种方法
struts2 取 session 不同于传统的 Servlet,而是需要继承 Servlet 或者是调用 ActionContext,两种方法在 struts2 中均可使用,侧重不同,结果一样。
导入类
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
方法一:
Action 继承 ActionSupport 、ServletRequestAware、ServletResponseAware,以 Servlet 的方式取得 session,当 Action 被访问时,会自动先调用 setServletRequest 和 setServletResponse 以取得 session。
public class Action extends ActionSupport implements ServletRequestAware, ServletResponseAware
{
// 设置全局变量处理 servlet 传入
HttpServletRequest request = null;
HttpServletResponse response = null;
HttpSession httpSession = null;
public void setServletRequest(HttpServletRequest request)
{
// 通过传统 Servlet 方式取得 request
// 并得到 session
httpSession = request.getSession();
// 读取 session 中 LOGIN_NAME 值
Object objLoginName = httpSession.getAttribute("LOGIN_NAME");
if(objLoginName != null)
{
....
}
}
public void setServletResponse(HttpServletResponse response)
{
}
}
方法二:
Action 继承 ActionSupport, 创建 ActionContext 对象取得 session
public class Action extends ActionSupport
{
public String excute()
{
String strResult = Action.NONE;
// 创建 ActionContext 以提取 session
ActionContext actionContext = ActionContext.getContext();
// 用 map 存储 session
Map<String, Object> mapParam = actionContext.getParameters();
Map<String, Object> mapSession = actionContext.getSession();
// 取某个传入参数
Object objLoginName = mapSession.get("LOGIN_NAME");;
// 检查
if(objLoginName != null)
{
strResult = Action.SUCCESS;
}
}
......
......
......
return strResult;
}
两种方法各有优缺,struts2 中官方倾向第二种方法,减少全局变量的使用,而且更直观;第一种方法对 Action Class 内需要 session 的方法操作会更简单,而这也是上代 struts 保留下来的方法。
以上代码未经调试,纯属直接写的,但逻辑表达已经达到,若有问题Q群讨论
Q群: 236201801
.