在会话外保存对象值的方法

时间:2013-01-08 17:11:31

标签: java servlets persistence persistent-storage

这里的目标是让一个带有按钮的servlet在被点击时在会话内存之外创建一个持久的Date()对象,即在关闭浏览器和访问页面后可以检索变量值。
想知道这里最好的方法是什么? 我考虑过数据库或写入文件。

想要在屏幕上显示标签和按钮,当单击按钮时,它会在服务器上创建时间戳,标签包含自单击按钮以来的“时间已过去”。
基本上是持续时间,但所有用户/会话都可以看到相同的值 一旦请求加载#timeStarted,就会有一些javascript用setInterval()更新持续时间,这部分没问题。

"<label id=\"timeStarted\"> + getTimeStarted() + "</label>"

<form method="post" action="SomeServlet">  
    <input type="submit" value="Go"/>  
</form>

SomeServlet中声明变量/持久对象:

Date timeStarted = new Date();

2 个答案:

答案 0 :(得分:0)

您可以使用getServletContext()方法将其存储在ApplicationContext级别并将其存储在那里。这将使时间保持在应用程序级别。

但请记住,如果您在具有负载均衡器的多台服务器上运行该应用程序,则可能无法实现此目的。然后你必须寻找基于数据库的解决方案。否则,您可以将其存储在应用程序上下文中并检索所有用户。

在你的doGet / doPost方法中,

ServletContext context = request.getServletContext();
context.setAttribute("clicktime", new Timestamp(System.currentTimeMillis()));

答案 1 :(得分:0)

决定在这里使用一些AJAX,
单击按钮后,它会向{servlet'发送xmlhttprequest 然后servlet创建一个存储Date()对象值的文件,即长



加载页面时,它会从文件中检索Date值并显示在屏幕上..因此持久存储。