Servlets Liberty Profile赢了吗';t运行外部进程(使用Runtime.getRuntime().exec(cmd))

Servlets Liberty Profile赢了吗';t运行外部进程(使用Runtime.getRuntime().exec(cmd)),servlets,websphere-liberty,Servlets,Websphere Liberty,正如标题所示,WLP不会运行该进程——它不会向进程输入流或错误流返回任何内容。 如果有人知道需要进行的配置,我很想知道。。 (注意,该过程可以通过手动运行命令来运行-此外,整个过程在tomcat8上运行顺利,所以…) 编辑1: 问题不在于你们所说的WLP下的命令执行,所以我接受了答案 问题不同:我向一个多部分servlet发送了一个媒体文件,并使用以下代码将其存储在磁盘上的一个文件中: InputStream is = request.getInputStream(); St

正如标题所示,WLP不会运行该进程——它不会向进程输入流或错误流返回任何内容。 如果有人知道需要进行的配置,我很想知道。。 (注意,该过程可以通过手动运行命令来运行-此外,整个过程在tomcat8上运行顺利,所以…)


编辑1: 问题不在于你们所说的WLP下的命令执行,所以我接受了答案

问题不同:我向一个多部分servlet发送了一个媒体文件,并使用以下代码将其存储在磁盘上的一个文件中:

    InputStream is = request.getInputStream();

    String currentTime = new Long(System.currentTimeMillis()).toString();
    String fileName = PATH + currentTime + "." + fileType;
    File file = new File(fileName);

    // write the image to a temporary location
    FileOutputStream os = new FileOutputStream(file);
    byte[] buffer = new byte[BUFFER_SIZE];            
    while(true) {
        int numRead = is.read(buffer);
        if(numRead == -1) {
            break;
        }
        os.write(buffer, 0, numRead);
        os.flush();
    }
    is.close();
    os.close();
文件将与以下前缀一起保存:

虽然这不会发生在tomcat8上(使用相同的客户端)。。 在接收到的输入流中,有些东西不是微不足道的。(注意,它是一个仅通过@MultipartConfig设置的多部分servlet)

希望这篇文章能帮助别人


伙计们,谢谢你们的帮助

这将在自由中起作用。我能够在servlet中测试以下代码,它很好地打印了我当前目录的路径:

String line;
Process p = Runtime.getRuntime().exec("cmd /c cd");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
    System.out.println(line);
}
input.close();

从这样一个简单的命令开始,当您升级到更复杂的命令或脚本时,请确保您没有隐藏可能返回的异常。始终至少打印堆栈跟踪

这将在自由中起作用。我能够在servlet中测试以下代码,它很好地打印了我当前目录的路径:

String line;
Process p = Runtime.getRuntime().exec("cmd /c cd");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
    System.out.println(line);
}
input.close();

从这样一个简单的命令开始,当您升级到更复杂的命令或脚本时,请确保您没有隐藏可能返回的异常。始终至少打印堆栈跟踪

getRuntime().exec并不是一个API Liberty,因为Liberty参与其中,所以它不起作用似乎很奇怪。您正在使用什么代码,它是如何失败的?我正在运行一个命令行应用程序,它应该为我创建一个文本文件作为输出。我用两个参数运行这个命令。由于根本没有运行它而失败,因此没有新文件等待我。。(注1:我尝试了许多不同的方法来转义字符串,但都没有成功)(注2:它必须工作,因为我将命令绘制到日志流,如果我在shell中运行它,它会做它应该做的事情)-如前所述,它在tomcat8上运行-我知道它的超级wierd..@Li3ro你能发布堆栈跟踪和/或异常消息吗?@aguibert,没有引发异常。。我需要试着对一个只回显某个内容的批处理文件运行这个。。为了确保这一基本情况发生,..Runtime.getRuntime().exec不是一个API Liberty无论如何都会参与其中,所以它不起作用似乎很奇怪。您正在使用什么代码,它是如何失败的?我正在运行一个命令行应用程序,它应该为我创建一个文本文件作为输出。我用两个参数运行这个命令。由于根本没有运行它而失败,因此没有新文件等待我。。(注1:我尝试了许多不同的方法来转义字符串,但都没有成功)(注2:它必须工作,因为我将命令绘制到日志流,如果我在shell中运行它,它会做它应该做的事情)-如前所述,它在tomcat8上运行-我知道它的超级wierd..@Li3ro你能发布堆栈跟踪和/或异常消息吗?@aguibert,没有引发异常。。我需要试着对一个只回显某个内容的批处理文件运行这个。。为了确保基本的事情发生。。