无法使用Runtime.getRuntime()。exec从jsp执行java程序

我试图通过jsp运行一个jar文件。 我使用命令Runtime.getRuntime().exec("java -jar file.jar"); 我得到错误当我打印错误流时Unable to access jarfile file.jar

我尝试使用设置为当前目录的类路径运行Runtime.getRuntime().exec("java -cp . -jar file.jar"); 但仍然得到相同的错误。 我也试过给jar文件的整个路径。 当我这样做时,jsp文件在执行exec语句后挂起。

这是我在windows中使用的行:

 process = Runtime.getRuntime().exec("java -jar C:\\Users\\Jeff\\Documents\\NetBeansProjects\\WebApplication1\\file.jar"); 

我使用文章中给出的streamgobbler的东西,但仍然有相同的问题(挂起)。 有人可以帮忙吗?

它永远不会奏效。 否则就会出现安全漏洞。 想象一下,您可以从Web浏览器运行任何可执行文件…您应该将您的类放在服务器上,让它们可以访问您的jsp,然后从jsp运行一些方法。

虽然最好将jar添加到WEB-INF/lib并使用方法调用执行所需的function,或者至少将scriptlet代码移动到servlet,但在JSP scriptlet中使用Java提供的任何function都是完全合法的

test.jsp的

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>   Test   <% try { Runtime runtime = Runtime.getRuntime(); Process exec = runtime.exec(new String[]{"java", "-cp", "/home/test/test.jar", "Main"}); int i = exec.waitFor(); System.out.println(i); } catch (InterruptedException e) { throw new RuntimeException(e); } %> hi   

test.jar包含以下类:

Main.java

 public class Main { public static void main(String[] args) { System.out.println('hello'); } } 

这个例子运行正常。 JSP在服务器输出流中打印0 ,这意味着没有发生错误。

当您在本地开发webapp时,您的计算机同时是服务器和客户端。 这件事可能会让您感到困惑,因此您必须了解您尝试运行的jar文件中的代码将在_server上执行。

在您的情况下,问题是由jar文件本身中的代码引起的。 尝试创建一个简单的类,看看它是否有效。