【问题标题】:Is there a way to put Java objects in a POST request from a JSP?有没有办法将 Java 对象放入来自 JSP 的 POST 请求中?
【发布时间】:2010-12-13 23:52:21
【问题描述】:

我有一个 JSP 页面,它呈现并调用 Web 服务来加载一些初始数据。用户填写一些表单信息,然后将其提交给服务器,服务器可能会返回相同的 JSP 页面以进行进一步处理(以及另一个提交)。初始数据永远不会改变,但它是一个对象表示,所以我试图弄清楚如何在每个 POST 之间维护它,所以我并不总是调用服务。会话变量是执行此操作的唯一方法吗?任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 有什么特别的原因让您对在会话中坚持使用它持谨慎态度?
  • 我在这个问题上可能感觉太强了。除了不知道这是否是最好的方法之外,我没有任何理由不这样做。

标签: java jsp post


【解决方案1】:
【解决方案2】:

我会在登录时将其填充到会话变量中 - 在客户端中存储数据本质上是不安全的。如果您没有使会话过期而是创建它们以便可以将它们序列化到存储并使用支持它的 Web 容器,那么您永远不必重新加载它们。

如果这不感兴趣,那么在 Web 服务周围创建一个缓存,以便将结果保存在那里,并在一些不活动后过期。不过,这将需要积极清理。

【讨论】:

    【解决方案3】:

    会话是要走的路。你真的需要每次都通过网络发送吗?如果有真正的目的,请考虑JSON,否则使用会话并将其存储在服务器端。

    【讨论】:

      【解决方案4】:

      根据 Web 服务的设置方式,您或许可以在您和它之间插入一个缓存层。例如,如果它是一个 REST Web 服务(或者至少是一个允许缓存 GET 响应的服务),那么您可以继续从中获取内容,但几乎所有请求都会从您的本地 HTTP 缓存中得到响应。

      如果您决定进行序列化,您可以使用 XML、JSON 或其他方法,例如 Google 的Protocol Buffers。使用像 XStream 这样高度自动化的序列化库,您甚至可以自动化 JavaBeans 的映射。

      【讨论】:

        【解决方案5】:

        会话变量是唯一的方法吗?

        不是唯一的,但也许是最好的。我认为发送回和转发对象没有任何意义,因为客户端不需要。此外,它可能会被篡改。

        替代方法是 serialize your object using Base64 encoding(所以它是 text/plain )并存储为隐藏值。

        但是,同样,应该进入服务器的东西应该保留在服务器中。

        从博客条目中学到的经验教训:Why Isn't My Encryption.. Encrypting?

        如果不需要发送给客户端,那就不要发送!发送给客户端的秘密可能会以各种方式被篡改和破坏这不容易看到甚至预测。在我们的例子中,我们可以将登录状态存储在服务器上,并且完全避免将任何状态传输到客户端。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多