0

我已经实现了一个 Servlet,并且一个 PHP 站点正在访问该 Servlet 以检索数据。我想知道存储会话变量的最佳方法是什么,或者我是否应该存储它。

需要存储的变量包括 ArrayList 和其他对象。

我已经考虑了大约 3 种可能性:

(1) 实现 HttpSessionListener,并将每个会话(当它创建时)存储到静态 SessionMap 中。然后在会话被销毁后将其删除。

(2) 将所有内容存储在 JSON 中。所以我必须序列化/反序列化每个对象并来回传递它。(我想在用户点击之间跟踪每个 ArrayList/Object 中的项目列表。)

(3) 将信息存储在 MongoDB 中(随便挑一个),使用 SessionID 作为主键。

你们有什么感想?

4

2 回答 2

0

这里HttpSessionListener是不必要的。您在 servlet 中基本上需要做的就是:

List<String> links = (List<String>) request.getSession().getAttribute("links");
if (links == null) {
    links = new ArrayList<String>();
    request.getSession().setAttribute("links", links);
}
links.add(request.getParameter("link"));

当会话被破坏时,属性无论如何都会被丢弃。

JSON 只会增加不必要的开销,而数据库仅在 Web 服务器中没有太多内存空间时才有用(但是,DB 反过来也会在一定程度上消耗内存)。

我只是想知道您认为如何从 PHP 开始维护相同的 servlet 会话。这将涉及使用 URL 中的 JSESSIONID 属性调用 servlet(坏主意)或使用 curl 作为代理的 PHP 脚本(为什么不只在 PHP 中完成这一切?)。还是在同一个域上运行?或者您是否使用 Quercus 在 Java servletcontainer 上运行 PHP?

于 2010-12-06T03:09:35.873 回答
0

我更喜欢这三者的结合。

  1. 具有简单的优点 - 如果有可用的会话,则无需访问数据库。
  2. JSON 是轻量级的,它是浏览器的语言。
  3. 将项目存储在数据库中并使用会话 ID 检索它们允许用户启动会话,使其处于不完整状态,然后稍后返回以从他们离开的地方继续。如果内存需求变得庞大且繁琐,那么数据库可能是存储信息的好方法。

我不认为它必须是一个排他性的选择。

于 2010-12-06T03:01:11.257 回答