Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 会话bean的替代方案_Java_Spring_Session Bean - Fatal编程技术网

Java 会话bean的替代方案

Java 会话bean的替代方案,java,spring,session-bean,Java,Spring,Session Bean,我有一个基于jsp和spring mvc的web应用程序,我需要在其中解决此任务: 用户必须能够使用向导对话框添加主实体的新实例。该向导由3个步骤组成: 在第一步中,必须有一个允许填写主实体字段的表单,包括与多对一相关实体的关联(建议使用下拉字段)。表单应包含不同类型的字段:文本、数字、日期、单选按钮等。有些字段应为必填字段,有些字段则为非必填字段。 示例:输入姓名、姓氏、出生日期、电话、孩子人数、选择性别(单选按钮)、部门(下拉列表)等 在第二步中,用户填充其他属性,包括与当前实体的多对多关联

我有一个基于jsp和spring mvc的web应用程序,我需要在其中解决此任务:

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

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

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

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


  • 如何在不使用会话(Http会话、会话范围)的情况下传输和保存信息?您需要在多个服务器交互中保持状态。一般来说,有几种可能性,例如要保留的状态数据的大小会影响我们的决策

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

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

    第二,只需将一些数据(可能是加密的,放在cookie中)就可以了。浏览器为您保留数据,但这些数据是跨页面共享的

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

    使用自定义会话“数据库”-可以是SQL数据库,也可以是更轻的数据库。对于较大规模的数据输入情况,用户可能需要10秒的时间来完成许多页面,这可能是最好的选择-如果用户需要中断并稍后继续,则保存用户的工作。这是更多的开发工作,你也需要考虑内务管理,但有时这是最好的选择


    总而言之:请非常清楚为什么您拒绝使用“显而易见的”HTTP会话技术,从简单性的角度来说,这是我的出发点。

    这是体系结构需求的一部分。这一要求来自一个事实,即现代高负载web应用程序通常部署在许多应用程序服务器上(形成集群),并且任何下一个web请求都可以由任何不同于服务于上一个请求的服务器的服务器来处理。对,事实上,一些应用程序服务器会在实例之间传播会话,但会牺牲一些开销,而且大多数基础设施也提供简单的会话关联,因此在实践中,实用的方法通常只是使用Http会话。