当前位置: 首页 > 面试题库 >

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

平和雅
2023-03-14
问题内容

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

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

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


问题答案:

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

在servlet中,您可以将对象作为属性添加到请求对象,会话对象或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");

如果将其放在会话中,则以后的所有servlet都可以使用它,但是该值将绑定到用户:

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

直到会话过期为止(基于用户的不活动状态)。

由您重置:

request.getSession().invalidate();

或者一个servlet从范围中删除它:

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

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

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

直到将其删除:

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


 类似资料:
  • 问题内容: 我有两个线程。可以调用修改变量的类的update方法。另一个调用读取该变量的类的update方法。只有一个线程写入,一个(或多个)线程读取该变量。由于我是多线程技术的新手,我需要在并发方面做什么? 谢谢, 问题答案: 如果有且仅有一个写线程,你可以逃脱使得它。否则,请查看答案。 仅在只有一个写线程的情况下才起作用,因为只有一个写线程,因此它始终具有的正确值。

  • 背景:我正在并行运行自动化测试。使用pom.xml中的分叉,多个浏览器在相同数量的线程中启动,即1个浏览器是1个线程。 中的下面插件创建了与线程(fork)计数相等数量的。 所有这些类都同时并行执行。因此,似乎每当我创建或时,每个线程都会创建自己的这些,因此跨多个线程共享变量的概念是不起作用的。 我只想让一个线程访问“准备测试数据”函数,并将<code>标志 我正在按照教程https://www.

  • 问题内容: 我有点不知道该怎么做: 我有一些链式选择框,每个视图一个选择框。应保存每个选择,以便建立查询。最后,应运行查询。 但是,您如何在Django中共享状态?我可以从视图传递到模板,但不能从模板传递到视图,也不能从视图传递到视图。或者我真的不确定如何执行此操作。请帮忙! 问题答案: 有很多方法…在模板视图中…将变量放在表单的隐藏字段中。因此,当你以后续形式“提交”时,值将包含在以下reque

  • 问题内容: 我想像这样在多个线程之间共享一个变量: 我想在主线程和帮助线程之间共享,这是我创建的两个不同的Java类。有什么办法吗?谢谢! 问题答案: 二者并可以参照包含该变量的类。 然后,可以使该变量为 volatile ,这意味着 对该变量的更改在两个线程中立即可见。 有关更多信息,请参见本文。 易变变量 共享已同步的可见性功能,但不共享原子性功能。这意味着线程将自动 查看volatile变量

  • 问题内容: main.js total.js add.js remove.js console.log 背景: 我有一个应用程序(irc bot),我想添加一个功能,使偷看者可以执行@add 1或@remove1。我有一个main.js,然后根据所说的触发器需要不同的文件。因此,add将触发add.js文件,然后将需要require(’main.js’)并添加10(为简化起见,为10,它将解析该数

  • Python 3.1.2 我对多处理产生的两个线程之间的变量共享有问题。过程这是一个简单的bool变量,它应该决定线程是应该运行还是应该停止执行。下面是三种情况下显示的简化代码(但使用与我的原始代码相同的机制): 主要用于Thread加工。Thread类型和自紧度。正在运行布尔类型[工作正常] 我想了解的是为什么它是这样工作的,而不是另一种。(即,为什么第2点没有像我认为的那样起作用)。 测试是从