Java 无法从JSP启动.bat文件

Java 无法从JSP启动.bat文件,java,jsp,batch-file,Java,Jsp,Batch File,我有一个批处理文件runthis.bat dir>dir.txt 如果我双击它,就会创建一个名为dir.txt的文本文件 现在我必须使用JSP运行这个批处理文件 <% Runtime run =Runtime.getRuntime(); run.exec("C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/try/runthis.bat"); out.println("SUCCESS"); %> 我在网

我有一个批处理文件runthis.bat

dir>dir.txt

如果我双击它,就会创建一个名为dir.txt的文本文件

现在我必须使用JSP运行这个批处理文件

<%
Runtime run =Runtime.getRuntime();
run.exec("C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/try/runthis.bat");
out.println("SUCCESS");
%>

我在网页上获得输出成功,但此批处理文件未运行


可能有什么问题?

我想您应该在路径中使用退格:

run.exec("C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\try\\runthis.bat");

我想您应该在路径中使用退格:

run.exec("C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\try\\runthis.bat");
尝试执行:

cmd /c your.bat
即:

run.exec("cmd /c C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/try/runthis.bat");
编辑:

我建议你小心道路内的空间。如果您对它们进行转义,或者用引号(“”)包装整个路径,那就太好了。

尝试执行:

cmd /c your.bat
即:

run.exec("cmd /c C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/try/runthis.bat");
编辑:


我建议你小心道路内的空间。如果您将它们转义,或者用引号(“”)将整个路径包装起来,那就太好了。

首先,JSP是错误的。在真正的Java类中执行此操作。从一开始。有一个表单,其中有一个提交到servlet的按钮。将此代码放入
doPost()
方法中。让servlet将结果放入请求范围,并将请求转发给JSP。让JSP显示结果

其次,了解中的
Runtime#exec()
的陷阱。您的问题是,您没有检查结果或错误流(因此永远不知道程序是否成功执行),并且您希望它以某种方式与您的编码同步运行(而它实际上在单独的线程/进程中运行)。你基本上是在做一个“发射并忘记”,代码基本上没有以任何方式跟踪程序的执行/终止


顺便说一下,这个问题与JSP无关。在普通Java类中执行此操作时,您将面临完全相同的问题。

首先,JSP是错误的。在真正的Java类中执行此操作。从一开始。有一个表单,其中有一个提交到servlet的按钮。将此代码放入
doPost()
方法中。让servlet将结果放入请求范围,并将请求转发给JSP。让JSP显示结果

其次,了解中的
Runtime#exec()
的陷阱。您的问题是,您没有检查结果或错误流(因此永远不知道程序是否成功执行),并且您希望它以某种方式与您的编码同步运行(而它实际上在单独的线程/进程中运行)。你基本上是在做一个“发射并忘记”,代码基本上没有以任何方式跟踪程序的执行/终止


顺便说一下,这个问题与JSP无关。在普通Java类中执行此操作时,您将面临完全相同的问题。

如果您担心路径中的空格,则使用Runtime.exec(字符串[])而不是Runtime.exec(字符串)可能更安全。如果您担心路径中的空格,则使用Runtime.exec(字符串[])而不是Runtime.exec(字符串)可能更安全。