java - 如何在两个或多个 Servlet 之间共享变量或对象?

标签 java web-applications servlets

我想知道是否有某种方式可以在两个或多个 Servlet 之间共享一个变量或一个对象,我的意思是一些“标准”方式。我想这不是一个好的做法,而是一种更简单的构建原型(prototype)的方法。

我不知道这是否取决于所使用的技术,但我会使用 Tomcat 5.5


我想共享一个简单类的对象 vector (只是公共(public)属性、字符串、整数等)。我的意图是在数据库中拥有一个静态数据,显然它会在 Tomcat 停止时丢失。 (仅用于测试)

最佳答案

我认为您在这里寻找的是请求、 session 或应用程序数据。

在 servlet 中,您可以将对象作为属性添加到请求对象、 session 对象或 servlet 上下文对象:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    String shared = "shared";
    request.setAttribute("sharedId", shared); // add to request
    request.getSession().setAttribute("sharedId", shared); // add to session
    this.getServletConfig().getServletContext().setAttribute("sharedId", shared); // add to application context
    request.getRequestDispatcher("/URLofOtherServlet").forward(request, response);
}

如果你把它放在请求对象中,它将对被转发到的 servlet 可用,直到请求完成:

request.getAttribute("sharedId");

如果您将它放在 session 中,它将可供所有 servlet 使用,但该值将与用户相关联:

request.getSession().getAttribute("sharedId");

直到 session 因用户不活动而过期。

由你重置:

request.getSession().invalidate();

或者一个 servlet 将其从作用域中移除:

request.getSession().removeAttribute("sharedId");

如果您将它放在 servlet 上下文中,它将在应用程序运行时可用:

this.getServletConfig().getServletContext().getAttribute("sharedId");

直到你删除它:

this.getServletConfig().getServletContext().removeAttribute("sharedId");

关于java - 如何在两个或多个 Servlet 之间共享变量或对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/123657/

相关文章:

java - 为什么servlet中没有构造函数?

tomcat - 使用 Maven3 Eclipse 7 Tomcat 7 出现 404 错误的 WebServlet

java - 如何对自定义实体集合进行排序?

jquery - jQuery 是否鼓励懒惰和无组织的 UI 设计?

php - Web 应用程序架构 : Future Proofing

javascript - 在浏览器中存储私钥的最佳方式?

java - 用双反斜杠替换单反斜杠需要八个反斜杠吗?

java - txt 文件中存储的文件的资源管理器 View

java - 数组(搜索最大值)

java - Spring 启动 FileNotFoundException : Could not open ServletContext resource [/WEB-INF/main-servlet. xml]