用Java编写Perl进程输入流

时间:2013-03-09 20:28:04

标签: java perl http unix web-applications

我正在尝试使用在UNIX上运行的java编写一个简单的webserver类。

WebServer类将调用perl脚本,该脚本将根据请求生成HTML。

考虑一下:

  1. 客户端将HTTP POST请求发送到WebServer
  2. 阅读HTTP POST正文:"description=asd&action=add"
  3. HTTP POST正文写入byte[] byteParams,见下文
  4. 需要将byteParams写入Perl Process对象,以便生成适当的HTML
  5. 代码:

    String postParams = "/usr/bin/env REQUEST_METHOD=POST QUERY_STRING= " +" CONTENT_LENGTH=" + contentLength + " CONTENT_TYPE=" + contentType + " /usr/bin/perl " + filename;
    Process perlProcess = Runtime.getRuntime().exec(postParams);
    
    DataOutputStream writeToPerl = new DataOutputStream(perlProcess.getOutputStream());             
    //write the http post request body to writeToPerl    
    writeToPerl.write(byteParams, 0, byteParams.length);            
    
    InputStreamReader readFromPerlInputStream = new InputStreamReader(perlProcess.getInputStream());
    BufferedReader readFromPerl = new BufferedReader(readFromPerlInputStream);    
    BufferedReader readFromPerlError = new BufferedReader(new InputStreamReader(perlProcess.getErrorStream()));
    

    现在我们有了perlProcess对象,它将读取UNIX中的Environment Variables以生成适当的HTML。

    在写入Perl Process对象的DataOutputStream之后,它会根据输入(HTTP Post主体)自动写入其标准输出吗?

    或者我是否需要告诉Process对象读取我刚写入DataOutputStream writeToPerl的内容?

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。

在写入Perl Process对象的DataOutputStream之后,它将根据BufferedReader readFromPerl中的输入自动写入其标准输出(DataOutputStream)。

我有一些文件权限问题导致我提出这个问题,因为在写入BufferedReader

之后我没有从Perl对象的DataOutputStream得到预期的结果