发布网友 发布时间:2022-11-01 10:52
共3个回答
热心网友 时间:2023-10-19 10:31
楼上答案很对,补充一下:
如果你使用了 Struts2 框架,初学者很容易弄混,Struts2包装后的 session 和 JSP/Servlet 原生的 session。
教科书里都写到:JSP内置的9个对象中有个 session 对象,该对象就是 JSP/Servlet 的内置类 HttpSession,因为它是个内置对象,所以用法是
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
session.getAttribute(xxx, "xxx"); 有点类似 Map 但是使用的 是该对象的特殊方法 setAttribute()
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属性。
热心网友 时间:2023-10-19 10:31
ActionContext.getContext().getSession();热心网友 时间:2023-10-19 10:32
有一点你要清楚,struts2中的session是以Map类型来封装的,