码迷,mamicode.com
首页 > 编程语言 > 详细

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

时间:2017-07-25 22:47:28      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:name   log   value   attribute   写法   java web   为什么   类库   示例   

我的百度知道回答,感觉这个知识很有意义,专门贴出来。

不过还有待验证的地方,就是

ActionContext.getContext().getSession("name", "Tom");
//如果在JSP中通过 EL 或者 Struts2 标签怎么显示?

以下是回答正文。

 


 

 

很多初学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.hello" />
用EL表达式:${hello}
用java代码:<%=session.getAttribute("hello")%>

 

 

很多人说session为什么无法取出值呢?看看他们的代码,你觉得这对么?

//错误代码示例:
//Action
Map<String, Object> session=ActionContext.getContext().getSession();
session.put("name","Tom");
//JSP
他的名字叫做 <%=session.getAttribute("name")%>

/*
这明显犯了分不清2个session的错误。Action中你是放在 Struts2框架封装的session(其实是个Map)中去了,而JSP中,你却又读取原生的session。根本不是一个东西。
*/

//正确写法
//Action
//必须是从 request对象中获得 原生的HttpSession类型的session
//原生sessiond的方法是 setAttribute和 getAttribute,不是put,set
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("name","Tom");
//JSP
他的名字叫做 <%=session.getAttribute("name")%>

 

 

使用上面的代码,注意import 相应的类库。

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

标签:name   log   value   attribute   写法   java web   为什么   类库   示例   

原文地址:http://www.cnblogs.com/muyun/p/7236424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!