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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误相关的知识,希望对你有一定的参考价值。

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

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

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取值为空的错误的主要内容,如果未能解决你的问题,请参考以下文章

Java框架中Struts和Struts2框架的区别

Struts2框架运行流程及案例

为什么做Java的web开发我们会使用struts2,springMVC和spring这样的框架?

(21) java web的struts2框架的使用

STRUTS是啥

java开发框架都有哪些