场合
我有一些单一责任的Servlet接受请求,完成工作,做出响应并完成 - 在这些情况下不需要维护状态。
但是,我有“普通的旧Java对象”,它根据用户在客户端上启动的操作来维护状态信息,我希望根据请求提供给我的Servlet。我想使这个对象的单个实例可用,并且不需要/想要维护多个共享实例。
附注:这些数据是暂时的(可能需要保留10分钟),而不是我想保留在数据库中的。
问题
我之前使用JSP维护了一个对象的共享实例,但在这种情况下,Servlet更有意义。所以,我的问题是如何适当地管理这个维护状态的对象的生命周期,并且可以通过HTTP请求或其他一些机制在无状态Servlet之间共享它?
换句话说,如果这是一个非Web应用程序,无状态Servlet将是我将任务委托给的对象,有状态对象将保持结果。
我已经研究过ServletContext,但我并不完全明白这个目的是为了知道这是否是我需要的。
答案 0 :(得分:13)
也许我理解你的问题是错的,但你有没有想过会议?
[编辑] 所以你真的需要这个会议。
您可以这样使用会话:
public class TestServlet extends HttpServlet {
....
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("test", new Date());
}
....
}
您存储在那里的对象,需要应该是可序列化的IIRC。
如果你使用eclipse或netbeans,代码洞察功能和javadoc应该引导你如何使用它来获得更高级的东西。
答案 1 :(得分:1)
如果可以将所有servlet保存在同一个webapp(context)下,则可以将会话存储到ServletContext或HttpSession中。
如果您需要多个实例,ServletContext / HttpSession将不起作用。我建议将会话存储在memcached中。
在任何情况下,您都需要自己管理会话超时。