我有一个servlet,我试图在其中运行一个批处理文件 - run.bat
。
批处理文件用于打开文件文件,例如sample.txt
放置在C:/Test/run.bat
如果我在Eclipse中运行该程序,该程序正常工作,即文本文件正在打开。当我在位置C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps
的tomcat wepapps文件夹中部署此应用程序时,文本文件也会打开,使用Tomcat作为服务,即安装Tomcat,我通过URL localhost:8080/testbatfile/StartTest
访问应用程序。 / p>
testbatfile
是项目名称,StartTest
是servlet。
但是如果我试图通过浏览器运行应用程序,它就无法正常工作。该程序无法运行批处理文件。
但是如果我们在Tomcat中部署应用程序并运行Tomcat的startup.bat
,那么一切也正常。
如果有人愿意接受这项挑战,请告诉我。
servlet的内容如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Runtime runtime = Runtime.getRuntime();
Process p1 = runtime.exec("C:/CGT_TO_SAS/run.bat");
InputStream is = p1.getInputStream();
int i = 0;
while( (i = is.read() ) != -1)
{
System.out.print((char)i);
}
}
run.bat
的内容只是:
"C:\Test\sample.txt"
答案 0 :(得分:0)
您的批处理文件内容看起来已损坏,这不是有效的命令。为什么你需要一个bat文件来使用sample.txt做什么?
无论如何,您应该使用exec(String[] cmdarray, String[] envp, File dir)或ProcessBuilder而不是基于普通字符串的exec。这允许您指定起始目录,一个理智的环境,尤其是您的操作系统无法解释的命令名称和参数。
runtime.exec(new String[]{"C:/CGT_TO_SAS/run.bat"}, null, new File("C:/CGT_TO_SAS"));
我怀疑你的案例中的问题是Tomcat安装路径中的空白。