0

我有基于 jsp 和 spring mvc 的 web 应用程序,我需要解决这个任务:

用户必须能够使用向导对话框添加主实体的新实例。该向导包括 3 个步骤:

  1. 第一步必须有一个允许填写主要实体字段的表单,包括与多对一相关实体的关联(建议使用下拉字段)。表单应包含不同类型的字段:文本、数字、日期、单选按钮等。有些字段应该是必需的,有些则不是。示例:输入姓名、姓氏、出生日期、电话、孩子数量、选择性别(单选按钮)、部门(下拉)等。

  2. 在第二步,用户填写其他属性,包括与与当前实体多对多相关的实体的关联。示例:将员工与他拥有的技能相关联(复选框),添加一些注释(文本区域)。

  3. 在第三步中,前两步中的所有字段都应显示为只读字段。用户应确认将此数据保存到数据库中。用户确认保存后,应将数据保存到数据库中,并将用户重定向到包含对象列表的页面。

如何在不使用会话(Http 会话、会话范围)的情况下传输和保存信息?

4

1 回答 1

1

您需要跨多个服务器交互保持状态。有几种可能性,一般来说,要保留的状态数据的大小等因素会影响我们的决策。

听起来你这里有几百个字节,所以你并没有特别受到大小的限制——几兆字节会更具挑战性。

第一种可能性,将其全部保存在浏览器中的 JavaScript 变量中,实际上不需要向服务器发送任何内容。这是典型的现代动态 Web UI,服务器提供数据而不是页面。听起来你在一个多页的世界里,所以打折这个选项。

其次,只需将一些数据(可能已加密,在 cookie 中)有效地保存在浏览器中,但它会在页面之间共享。

第三次使用 Http Session 状态 - 你的情况听起来很像典型的会话候选者。为什么要避免它?根据您的服务器的能力,这种方法可能不会提供很好的弹性行为(如果状态在一个服务器实例上,那么会话的所有请求都必须由同一台服务器提供服务)。请注意,HTTP Session 和 EJB Session Bean 不是一回事,HttpSession 的重量更轻。

使用自定义会话“数据库”——字面意思是 SQL 数据库,可能更轻一些。对于较大规模的数据输入案例,用户可能需要 10 分钟来完成许多页面,这可能是最佳选择 - 如果用户需要中断并稍后恢复,则可以保存用户的工作。这是更多的开发工作,您也需要查看家务,但有时它是最好的选择。

总而言之:非常清楚为什么您拒绝“显而易见的”HTTP 会话技术,就简单而言,这就是我要开始的地方。

于 2013-01-21T15:41:47.603 回答