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