我有这个使用 struts2 的应用程序流程:
Page_A.jsp 包含可以使用方法 executeA 向 ActionA 类提交数据的表单
ActionA->executeA 方法将数据存储在具有键“myKey”的会话中
ActionA 将结果返回给 Page_B.jsp
Page_B.jsp 包含可以使用方法 executeB 向 ActionA 类提交数据的表单
在 ActionA->executeB 方法中,它将从“myKey”会话中获取提交的数据
我发现有两种方法可以从会话中设置和获取数据:
使用 ActionContext
// put the data into session Map session = ActionContext.getContext().getSession(); session.put("myKey", data); // get the data from session Map session = ActionContext.getContext().getSession(); data = (String[]) session.get("myKey");
使用 ServletActionContext
// put the data into session HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(false); session.setAttribute("myKey", data); // get the data from session HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(false); data = (String[]) session.getAttribute("myKey");
在这两种方式之间,哪一种方式更好?还是有其他更好的方法?(如果有的话,我更喜欢简单的方法)
第二件事,我想确保会话与用户登录会话相关联。这意味着一个用户的“myKey”会话数据将不同于另一个用户的“myKey”会话数据(“myKey”会话数据永远不会被另一个用户的“myKey”会话数据覆盖)。
例如:
用户 1 登录
User1 转到 Page_A.jsp 并提交数据,现在他在 Page_B.jsp 中(现在“myKey”会话包含 User1 提交的数据)
用户2登录
User2 也去 Page_A.jsp 并提交数据
我担心如果 User1 确实从 Page_B.jsp 提交,“myKey”中的数据是否仍会引用他提交的原始数据,或者他会从 User2 获取数据(因为“myKey”会话数据已被替换)?