Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 字符串压缩:通过URL传递对象_Java_Json_Object_Compression_Url Parameters - Fatal编程技术网

Java 字符串压缩:通过URL传递对象

Java 字符串压缩:通过URL传递对象,java,json,object,compression,url-parameters,Java,Json,Object,Compression,Url Parameters,我有两个页面,比如A和B。用户从A页导航到B页。B页需要有一些从A页传递的值。其中一些值是对象。现在我有以下方法将参数传递到Page-B 将对象存储在某个范围内(例如会话、页面流) 将对象转换为字符串后,将其作为查询字符串传递 上述两种方式的缺点分别如下: 如果用户将Page-B添加为书签以供以后使用,并尝试从不同会话访问它,则会生成异常。因为对象不在范围中 URL的长度有限制,即2048个字符()。因此,如果我将其转换为JSON并尝试通过URL传递它,并且如果JSON字符串超过了有限的字

我有两个页面,比如A和B。用户从A页导航到B页。B页需要有一些从A页传递的值。其中一些值是对象。现在我有以下方法将参数传递到Page-B

  • 将对象存储在某个范围内(例如会话、页面流)
  • 将对象转换为字符串后,将其作为查询字符串传递
上述两种方式的缺点分别如下:

  • 如果用户将Page-B添加为书签以供以后使用,并尝试从不同会话访问它,则会生成异常。因为对象不在范围中
  • URL的长度有限制,即2048个字符()。因此,如果我将其转换为JSON并尝试通过URL传递它,并且如果JSON字符串超过了有限的字符数,我将从Page-B获得JSON异常
是否可以压缩对象的字符串表示形式,使其不超过限制字符

我如何(通过任何其他方式)解决这个问题


非常感谢任何解决方案

将序列化对象放入URL是一个非常糟糕的主意。如果您想通过URL(获取参数)访问状态,那么通常URL应该只包含一些识别问题项的方法

幸运的是,如果您使用数据库后端来持久化对象,那么数据库通常会以主键的形式为您提供一个标识。然后,您可以将该ID放入URL中,让Java在收到该ID的请求时检索该ID的对象


如果您不使用数据库后端,那么就由您为您的对象提供一个可以定位它们的标识。最简单的解决方案是在映射中存储对对象的引用,并将映射键放在URL中

将序列化对象放入URL是一个非常糟糕的主意。如果您想通过URL(获取参数)访问状态,那么通常URL应该只包含一些识别问题项的方法

幸运的是,如果您使用数据库后端来持久化对象,那么数据库通常会以主键的形式为您提供一个标识。然后,您可以将该ID放入URL中,让Java在收到该ID的请求时检索该ID的对象


如果您不使用数据库后端,那么就由您为您的对象提供一个可以定位它们的标识。最简单的解决方案是在映射中存储对对象的引用,并将映射键放在URL中

存储它们并将ID作为GET参数传递,或者发布对象。或者使用cookie。通常通过使用POST方法而不是标准GET来避免URL长度限制,然后URL的参数部分移动到HTTP请求的消息体部分。您在URL中传递什么类型的对象?我是说他们有什么用?它们是表示会话信息还是静态信息(如用户偏好)?如果是会话范围,那么如果用户尝试使用带书签的url,则应在使用这些对象之前重定向用户以再次登录。我不是一个网络专家,但我就是这么看的。也许您可以使用Cookies。@mvw,但GET是一种安全的方法,而POST不是。有很好的理由想继续下去。当然,服务器必须遵守这些语义,这样区别才有意义。@mvw如果用户将页面添加到书签中,这将无助于用户访问该页面。请将其存储并将ID作为GET参数传递,或者发布对象。或者使用cookie。通常通过使用POST方法而不是标准GET来避免URL长度限制,然后URL的参数部分移动到HTTP请求的消息体部分。您在URL中传递什么类型的对象?我是说他们有什么用?它们是表示会话信息还是静态信息(如用户偏好)?如果是会话范围,那么如果用户尝试使用带书签的url,则应在使用这些对象之前重定向用户以再次登录。我不是一个网络专家,但我就是这么看的。也许您可以使用Cookies。@mvw,但GET是一种安全的方法,而POST不是。有很好的理由想继续下去。当然,服务器必须遵守这些语义,这样区别才有意义。@mvw如果用户将页面添加到书签中,这将无助于用户访问该页面。然后,您必须知道何时清理该页面map@nafg是的,你知道,与确保URL中的序列化数据不被破坏或被故意操纵为恶意相比,这是一个远没有那么麻烦的问题map@nafg是的,你知道,与确保URL中的序列化数据不被破坏或被故意操纵为恶意相比,这是一个麻烦小得多的问题。