WAS Liberty Profile不会运行外部进程(使用Runtime.getRuntime()。exec(cmd))

时间:2015-11-10 08:28:03

标签: servlets websphere-liberty

正如标题所示,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();

并将文件与以下前缀一起保存: enter image description here

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

希望这篇文章能够帮助别人..

伙计们,谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这适用于Liberty。我能够在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();

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