java - session bean 的替代方案

标签 java spring session-bean

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

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

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

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

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

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

最佳答案

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

听起来您这里只有数百个字节,因此您并没有特别受到大小的限制 - 几兆字节将是一个更大的挑战。

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

其次,只需放入一些数据(可能是加密的,在 cookie 中),浏览器就会有效地为您保留这些数据,但它会在页面之间共享。

第三次使用 Http session 状态 - 您的案例听起来确实非常像典型的 session 候选者。为什么要避免它?根据服务器的功能,这种方法可能不会提供很大的弹性行为(如果状态位于一个服务器实例上,则 session 的所有请求必须由同一台服务器提供服务)。请注意,HTTP Session 和 EJB Session Bean 不是同一件事,HttpSession 的重量更轻。

使用自定义 session “数据库” - 可能是字面上的 SQL 数据库,也可能是更轻量的数据库。对于更大规模的数据输入情况,用户可能需要 10 分钟才能完成许多页面,这可能是最好的选择 - 用户的工作会被保存,以便在需要中断并稍后恢复时使用。这是更多的开发工作,您还需要考虑内务管理,但有时这是最好的选择。

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

关于java - session bean 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441881/

相关文章:

java - 计算单元测试运行期间发生的 gc 次数

java - Spring表单验证不返回错误消息

java - REST API,何时使用 @PathParam、@QueryParam、@RequestBody 和/或 @RequestHeader

jsf - 如何优雅地处理JSF应用程序故障?

java - Netbeans - 在 session bean 中存储用户名?

java - 用于简单 CRUD 的 EJB 3 session Bean 设计

java - 如何制作包含文件目录的字符串数组?

java - 我们如何在不使用任何内置函数的情况下在 Java 中找到 String 的长度? (甚至不是 charAt() 或 toCharArray() 或 length())

Java:序列化 String[] 数组以存储在 MySQL 数据库中?

java - 将对象从 JSP 传递到 Spring Controller