【问题标题】:Running a script from a folder on a Tomcat Server从 Tomcat 服务器上的文件夹运行脚本
【发布时间】:2017-03-29 22:43:21
【问题描述】:

我正在尝试在我的 tomcat 网络服务器上运行一个脚本。之前在我的本地机器上运行脚本,这是我使用的代码。

String absolutePath = new File(".").getAbsolutePath();
        int last = absolutePath.length()-1;
        absolutePath = absolutePath.substring(0, last);
        String filePath =  "";
        if(osVersion.equalsIgnoreCase("Ubuntu"))
        {
            try (FileReader fr = new FileReader("template.txt");
                    FileWriter fw = new FileWriter("Ubuntu/ubuntu_file.json");) {
                   int c = fr.read();
                   while(c!=-1) {
                       fw.write(c);
                       c = fr.read();
                   }
               } catch(IOException e) {
                   e.printStackTrace();
               }
            filePath = "Ubuntu";
            String fi = absolutePath + filePath;
            System.out.println(fi);//Get the full path.
            // Create ProcessBuilder.
            ProcessBuilder pb = new ProcessBuilder("bash", "-c",
                    "cd "+fi+" ; PACKER_LOG=1 /usr/local/bin/packer  build ubuntu_file.json");

            Process p = pb.start();

但是,当我尝试在 tomcat 网络服务器上运行它时,我不断收到此错误。

EclipseEE.app/Contents/MacOS/Ubuntu 无法解析模板:打开 ubuntu_file.json: 没有这样的文件或目录

我对 Tomcat 还很陌生,我只是在学习它的来龙去脉。我应该将我的 Ubuntu 文件夹放在哪个 tomcat 目录(我假设它是 webapp 目录),以便 tomcat 获取文件夹的绝对路径,然后能够运行脚本。

【问题讨论】:

  • 你永远不应该依赖于 Web 服务器的当前目录(例如 Tomcat)。始终在 Web 应用程序代码中使用完全限定的文件名。
  • 如果这听起来很愚蠢,我很抱歉。我对这一切都很陌生。那我该怎么做呢?它最初不应该是一个网络应用程序。
  • 如果你不想硬编码一个合格的文件名(不是一个好主意),这意味着你的 webapp 需要能够被配置,例如使用servlet initialization parameters

标签: java tomcat servlets jakarta-ee path


【解决方案1】:

如果您有或多或少传统的 Tomcat 安装,则将设置 $CATALINA_HOME 环境变量并指向您的服务器安装,其中至少包含以下目录:

$CATALINA_HOME/
   bin/
   conf/
   lib/
   webapps/

您可以通过以下方式获取 $CATALINA_HOME 的值:

String catalinaHomeDir = System.getenv("CATALINA_HOME");

我倾向于将您的配置放在conf 子目录中。

如果您从同一个基础运行多个 Tomcat 实例,请务必阅读它随附的 RUNNING.txt 文件,因为您可能需要改用 $CATALINA_BASE

当使用 Eclipse 控制的服务器在本地运行时,您可能需要在 Eclipse Tomcat 运行时环境中设置 CATALINA_HOME/BASE

顺便说一句。这不是便携式解决方案。如果您需要迁移到其他容器(例如 WildFly 或 Glassfish),那么其他人推荐的绝对路径配置是可行的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多