通过Java Web应用使用Runtime.exec运行脚本
我创建了一个Java的网页应用,实际上就是用HTTPServlets来根据用户输入的信息运行一些Java代码。我可以顺利地获取用户的信息,把它传递给我的Java程序,然后再把结果返回到界面上。现在让我感到困难(而且有点烦人)的就是,如何使用用户输入的信息去调用一个外部脚本(这个脚本是用来处理用户请求的)。我在一个普通的独立Java应用中测试过这部分代码,运行得很好,但每当我试图通过我的网页应用来运行它时,要么就一直卡着(我不知道它到底有没有在运行这个脚本),要么根本不运行脚本,直接跳到结果页面。
这是我的代码:
public void runScript() throws InterruptedException{
try{
chkPy = new BufferedWriter(new FileWriter("Log.txt"));
chkPy.write("Running Python Script");
chkPy.newLine();
runtime = Runtime.getRuntime();
p = runtime.exec("cmd /c run.bat > python_results.log");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = "";
while ((line = stdInput.readLine()) != null) {
chkPy.write(line);
chkPy.newLine();
}
while ((line = stdError.readLine()) != null) {
chkPy.write(line);
chkPy.newLine();
}
int exitVal = p.waitFor();
chkPy.write("Exit Value" +exitVal);
chkPy.flush();
chkPy.close();
}catch(IOException ex){
}
}
更新
Netbeans自带了GlassFish服务器的实现,听起来可能有点傻,但这并不是我最先查看的地方(我现在才看),不过脚本是可以编译的。但似乎我又遇到了另一个问题,现在网页应用死锁了,即使脚本已经完成了文件的写入……我该怎么解决这个问题呢??