使用struts2获取session出现异常

ActionContextctx=ActionContext.getContext();HttpSessionsession=(HttpSession)ctx.getSe... ActionContext ctx = ActionContext.getContext();
HttpSession session = (HttpSession) ctx.getSession();
session.setAttribute("buyer", buyerManager.getBuyer(username, password));
=================================================================
java.lang.ClassCastException: org.apache.struts2.dispatcher.SessionMap cannot be cast to javax.servlet.http.HttpSession
展开
 我来答
与人知识
2017-06-12 · TA获得超过746个赞
知道小有建树答主
回答量:150
采纳率:100%
帮助的人:32万
展开全部

楼上答案很对,补充一下:

如果你使用了 Struts2 框架,初学者很容易弄混,Struts2包装后的 session 和 JSP/Servlet 原生的 session。

  1. 教科书里都写到:JSP内置的9个对象中有个 session 对象,该对象就是 JSP/Servlet 的内置类 HttpSession,因为它是个内置对象,所以用法是

    HttpServletRequest request = ServletActionContext.getRequest();

    HttpSession session = request.getSession();

    session.getAttribute(xxx, "xxx"); 有点类似 Map 但是使用的 是该对象的特殊方法 setAttribute() 

  2. Strut2框架中的核心对象 ActionContext 是所有Action的上下文,为了方便 Struts库把常用的JSP对象也都包装成了ActionContext的属性(可以简单这么理解)。ActionContext有个属性就是 session,然后暴露出来的方法就是 getSession(),这个session属性的类型是个Map,所以它使用时一般就是

    Map session = ActionContext.getContext().getSession();返回一个 Map类型变量。

    session.get(xxx,"xxx"); 就是Map的put, get 方法。


可以看到 二者 区别很大。第一个是 HttpSession 对象实例,第二个只是个  Map 变量而已。

Struts2 这些框架都是可有可无的。没有Struts2框架,JSP/Servlet里面也是有 session对象的,毕竟session是JSP/Servlet内置的 9 个对象中的一个嘛。

反正自己要看清楚,自己使用的哪个 session, 是内置的 HttpSession,还是Struts2提供的ActionContext对象的session属性。

鼻涕一米二
2011-04-26 · TA获得超过816个赞
知道小有建树答主
回答量:460
采纳率:100%
帮助的人:265万
展开全部
ActionContext.getContext().getSession();
返回值是map类型,Map<String,Object>
你要取session的真实类型可以:
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
如果要取map类型(手动初始化):
Map session = ActionContext.getContext().getSession();
session.put("sessionName","sessionValue");
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liyaming_liym
2011-04-26 · TA获得超过1222个赞
知道小有建树答主
回答量:525
采纳率:0%
帮助的人:314万
展开全部
有一点你要清楚,struts2中的session是以Map类型来封装的,
而获取session的时候你是这样写的:
HttpSession session = (HttpSession)ctx.getSession();
这样写是不正确的,应该这样写:
HttpServletRequest request = (HttpServletRequest)ctx.getRequest();
HttpSession session = request.getSession();
追问
getRequest() ?你自创的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式