簡體   English   中英

Tomcat中的Java執行腳本

[英]java execute script in Tomcat

我創建了一個Spring Boot項目,該項目在本地tomcat上運行(我打算將其部署到Web服務器上)。 在該項目中,我創建了一個REST服務,該服務應執行一個.bat文件。

我的休息服務看起來像這樣(都不起作用)

@RequestMapping(value = "/esc", method= RequestMethod.GET)
public String esc() throws IOException, InterruptedException {
      String folder = "P:\\Documents\\testcmd";
    String[] cmdarray = new String[]{"cmd -c","dosomething.cmd"};
    ProcessBuilder processBuilder = new ProcessBuilder( cmdarray );
    processBuilder.directory(new File(folder));
    Process process = processBuilder.start();

    int exitCode = -1;
    boolean finished = false;
    while ( !finished ) {
        exitCode = process.waitFor();
        finished = true;
    }
    return folder;
}

@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
    //final String shCmd = "/bin/bash -c helloworld.sh";
    System.out.println("Working Directory = " +
            System.getProperty("user.dir"));
    final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
    String output = executeCommand(shCmd);

    return output;
}
private String executeCommand(String command){
    Process p;
    InputStream in = null;
    String value = "";
    try {
        p = Runtime.getRuntime().exec(command);
        in = p.getInputStream();
        int ch;
        while((ch = in.read()) != -1) {
            value = String.valueOf((char)ch);
        }
    }catch (IOException e){
        e.printStackTrace();
    }
    return value;
}

我嘗試使用processbuilder和運行時。 我要執行的文件在此文件夾中:“ P:\\ Documents \\ testcmd”

甚至可以使用tomcat服務器執行本地文件嗎?

我解決了問題。 使用Runtime.getRuntime().exec(command)是正確的。 只有我的系統調用是錯誤的。 而不是final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd"; 我不得不使用"P:/Documents/testcmd/dosomething.cmd" 另外,我還必須更改dosomething.cmd因為它是錯誤的。 當執行普通的Java代碼時,該文件將打開一個cmd終端,然后在一個無限循環中打印問候。 我更改了文件內容,而不是在終端中無休止地循環,它將向所有文件打印問候。

// method is mapped on root/ex
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
    System.out.println("Working Directory = " +
            System.getProperty("user.dir"));
    final String shCmd = "P:\\Documents\\testcmd\\dosomething.cmd -c";
    String output = executeCommand(shCmd);

    return output;
}

批處理文件之前和之后

@echo off
:start
echo hallo
pause
goto start

@echo off
@echo This is a test>> P:/Documents/testcmd/file.txt
@echo 123>> P:/Documents/testcmd/file.txt
@echo 245.67>> P:/Documents/testcmd/file.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM