【问题标题】:How to access an object that was created in one servlet from another servlet如何从另一个 servlet 访问在一个 servlet 中创建的对象
【发布时间】:2011-03-11 07:26:14
【问题描述】:

我有问题。假设有 2 个 servlet:Load() 和 Process()。在 Load() 期间,我想创建和初始化一些对象。在 Process() 期间,我想将这些对象用于其他一些事情。

由于 servlet 中没有主类(与桌面编程相反),我认为我不能返回由 Load() 创建的对象并将其作为参数从主类传递给 Process()。

那么,我如何在一个 servlet 调用期间创建一个对象并从其他 servlet 使用/访问该对象?

【问题讨论】:

  • 搜索“servlet 间通信”
  • 您从错误的角度看待 servlet。我建议阅读this answer,然后再重新考虑。
  • @BalusC 我阅读了您提供的链接。正如您在(您的)答案中描述的那样,我正在以 threadsafe 方式使用事物。谢谢你,非常好的解释。我正在使用 HttpSession(如下面的@Bozho 所述)将用户定义的对象存储到会话中。我认为这很好。为什么你说我从错误的角度来看 servlet?
  • 与桌面编程的比较实在没有根据。
  • 我同意。可能是我写的不准确。

标签: java web-applications object servlets


【解决方案1】:

使用ServletContextgetServletContext().setAttribute(..)

另外,考虑将初始化代码和处理代码放在一个 servlet 中。如果其中一个只有init(),另一个有doGet(),并且这些对象应该只在这两个servlet之间共享,那么这种分离没有意义。

更新:如果您想在同一用户的连续请求中重用对象(即不初始化一次并在任何地方使用它们),而不是将它们放在ServletContext 中,而是将它们放在在较小的范围内 - HttpSession(由request.getSession() 获得)

【讨论】:

  • 我正在关注这个教程docstore.mik.ua/orelly/java-ent/servlet/ch11_03.htm你对此有何看法?
  • @Bikash 太可怕了。它正在做各种可能的黑客攻击,而不是使用 意味着在 servlet 之间共享数据的ServletContext
  • 到目前为止,我看到 ServletContext 用于在设计时定义全局变量,并且可以在运行时被各种 servlet 访问。但是,我的标准有点不同。我需要在调用其中一个 servlet(/Load)期间创建一个类的对象(来自附加到我的 Web 项目的外部 jar),并且我需要在调用另一个 servlet(/Process)期间访问该对象。 ServletContext 还好吗?
  • @Bikash - 你现在所说的情况完全不同。尽管如此,那些方法还是不正确的。查看我的更新。
【解决方案2】:

不确定我是否理解您对 Load() 和 Process() 的含义。 Servlet 没有函数。它们被映射到某个 URL,并且它们的 service() 函数被 servlet 容器调用。可以将多个 servlet 映射到一个 URL,并按照它们在 web.xml 中定义的顺序调用它们。

回答您的问题:状态通常通过setAttribute() 存储在会话对象中

您可以通过 getAttribute() 在另一个 Servlet 中访问它。

【讨论】:

  • 我没有说 servlet 是函数。我的意思是我为 myslef 写了两个 servlest:Load 和 Process,当然,我已经在 web.xml 中映射了它们。正如@PeterMmm 所指出的,我想我找到了我在谷歌上寻找的术语——“servlet 间通信”。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
相关资源
最近更新 更多