Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从CGI脚本调用Java程序失败_Java_Python_Linux_Apache_Cgi - Fatal编程技术网

从CGI脚本调用Java程序失败

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

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


谢谢

我想到了几种解决方案:

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

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

  • exec
    java-cp/path/to/JExcelAPI:/my/program/classes com.acme.MainClass

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

  • 一些注意事项:

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

    • JVM的启动需要很长时间,而且执行会很慢,因为JIT没有机会发挥它的魔力。在轻量级Web服务器(如jetty或winstone)中运行脚本或在套接字上侦听脚本将消除启动成本,并启用JIT以加快速度