【问题标题】:Calling a stand alone java program from a servlet从 servlet 调用独立的 java 程序
【发布时间】:2011-07-31 22:16:15
【问题描述】:

我有一个独立的 java 程序,它具有“main 方法”,它在后台轮询套接字中的任何请求连续运行。

我还有一个 Web 应用程序,它需要将特定数据传递给连接到由独立 java 程序打开的套接字的客户端。有没有办法让我直接从我的 servlet 调用这个 java 程序,或者这根本不可能,因为 java 代码是由 jam 执行的,而 servlet 是由 servlet 容器管理的?

如果这是不可能的,任何其他建议都会非常有帮助。

谢谢, 五

【问题讨论】:

  • 你最终是如何解决你的问题的?

标签: java servlets


【解决方案1】:

任何让您在两个进程/JVM 之间进行通信的解决方案都可以让您在一个 servlet 和一个独立的 java 进程之间进行通信——例如套接字。如果您的独立进程已经在接受套接字连接,请让它也监听来自 servlet 的连接。

更新:每次调用java 命令(servlet 容器执行此操作)时,都会启动一个新的 JVM。同一台机器上的两个 Java 进程可以像任何其他两个进程一样进行通信。他们可以写入文件,与通用数据库通信,等等。作为 Java 进程,您还可以使用 JMX 进行通信。还有很多其他现成的选择。你真的只受限于你的想象力。如果我这样做,我可能会在独立进程中嵌入一个轻量级 HTTP 服务器并使用 HTTP 进行通信,因为它很简单。一些易于嵌入的服务器包括SimpleJettyGrizzly

【讨论】:

  • 那么,他的意思是 servlet 和我的 java 程序都运行在不同的 JVM 上,即使它们在同一台机器上?有没有办法在不使用套接字的情况下实现这一点?非常感谢。这很有帮助。
  • @Vicky:更新了我的答案。如果这能回答您的问题,请告诉我。
  • 非常感谢。确实如此,但我还有一个问题。对不起,如果我听起来很愚蠢。机器中安装了一个 java 虚拟机。 Java 程序被转换为字节码,并由同一个 JVM 对所有独立程序执行。 servlet 不使用这个 JVM 吗?我认为即使它在 servlet 容器中运行,它也会由同一个 JVM 执行。我的假设不正确吗? Simple , Jetty 和 Grizzly 可以通过一个 tomcat 服务器而不是一个完整的应用程序服务器来使用吗?谢谢你,我一定会尝试你建议的选项。
  • 好的,JVM 安装在机器上一次,但是每次运行java 时,都会生成一个新的 JVM instance。将其与 Windows 上的命令提示符进行比较。它曾经存在于磁盘上,但每次运行cmd 时,它都会弹出一个新提示,并且您的进程列表中会出现一个新的“cmd”。与 Java 相同。每次运行 java 时,它都会运行“相同”的 JVM,但运行的是不同的实例。我建议您以这个为主题提出一个新问题,看看您是否可以自己澄清一下。
  • 谢谢瑞恩。这确实澄清了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多