【问题标题】:Calling a Java program from a CGI script fails从 CGI 脚本调用 Java 程序失败
【发布时间】:2011-04-16 12:52:05
【问题描述】:

我有一个 Python CGI 脚本,我试图从中调用 Java 程序来执行任务。 Java 程序使用JExcelAPI。当我从浏览器运行 Python 脚本时,它会失败并显示无法从 JExcelAPI 中找到类的类定义的错误消息。我想这是因为 Python CGI 脚本是在 apache 用户下运行的,而 apache 用户没有设置适当的环境变量(即 CLASSPATH 变量)。我尝试使用-classpath /path/to/JExcelAPI 开关调用程序,但这也不起作用。你能帮我找到让 apache 用户了解 JExcelAPI 的方法吗?有没有办法为apache用户设置CLASSPATH环境变量?

谢谢

【问题讨论】:

    标签: java python linux apache cgi


    【解决方案1】:

    想到几个解决方案:

    1. 创建一个调用 java 程序的 bash 脚本。您可以设置您喜欢的所有变量并在命令行上调试,例如sudo -u apache /usr/local/bin/java-task-wrapper。这大大简化了从 cgi 调用它的过程,并且与启动 JVM 相比,bash 的开销可以忽略不计。

    2. 使用 uberjar 等工具创建一个独立的可执行 jar。不再有 classpah 问题,因为所有内容都包含在内:java -jar java-task-standalone.jar

    3. 执行java -cp /path/to/JExcelAPI:/my/program/classes com.acme.MainClass

    4. exec 通常有一个变体,它需要一个额外的数组或 hashmap 来添加环境变量。

    一些注意事项:

    • 不再全局设置 CLASSPATH 变量,因为它会导致许多冲突。在包装脚本中可以,因为减少了冲突的可能性。

    • JVM 需要很长时间才能启动并且执行会很慢,因为 JIT 没有机会发挥它的魔力。在像 jetty 或 winstone 这样的轻量级网络服务器中运行您的脚本或在套接字上侦听将消除启动成本并使 JIT 使事情变得更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多