struts2中我想把结果放入到session中ActionContext.getContext().getSession()
很多初学Java Web的同学因为使用 Strut2框架而分不清两个 Session的区别。
1. JSP/Servlety有个原生的 session 对象,这是9大内置对象中的一个,书上写的都有,都记得。类型是 HttpSession session; 函数方法是 setAttribute(),getAttribute(),用法如下
// java
// 保存到 原生session
ServletActionContext.getRequest().getSession().setAttribute("myStr",myStr);
// jsp
用struts标签: <s:property value="#session.myStr" />
用EL表达式:${sessionScope.myStr}
用JSP代码:<%=session.getAttribute("myStr")%>
2. 若是项目使用了Struts2框架,Struts2自己也封装了个 session,这个 session是个 Map类型的对象。所以和 Map 用法一样的,使用 put 存值,get 取值。用法是:
// java
// 保存到struts2 session
ActionContext.getContext().getSession().put("user", user);
// jsp
用struts标签: <s:property value="#session.user" />
用EL表达式:${hello}
用JSP代码:<%=session.getAttribute("user")%>
在项目中,如果使用了 Struts2 框架,最好 Java 和 JSP 文件中都保持使用 Struts2 的 Session,因为原生 session 在一些不是用户调起的Action中可能无法正常获取值(因为原生Session依赖request请求,如Action之间跳转可能就没有request请求),而Struts2 Session则没有这个问题。
这个问题,可在Action内 使用 Stust2 Session 保存一个变量,紧跟着,使用原生的
ServletActionContext.getRequest().getSession().getAttribute 就无法获取到值。
如果有误,欢迎指出 。
使用上面的代码,注意import 相应的类库。
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
session.put("result",result);
这样看你懂了吗,你取得的getSession()的类型是Map型的。所以只有put()方法。没有setAttribue();只有在jsp页面中取的时候才用到getAttribue("result"):同样的,application也是一样的。都是map类型的。
action中声明,private Map session;
public void setSession(Map arg0) {
this.session = arg0;
}
你可以使用这个得到原生的session对象
ServletActionContext.getRequest().getSession().setAttribute(arg0, arg1);