无法使用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");

我使用了文章中给出的stream狼吞虎咽的东西,但仍然有同样的问题(挂起)。有人能帮忙吗?

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

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

test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Test</title>
  </head>
  <body>
  <%
    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
  </body>
</html>

test.jar包含以下类:

Main.java

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

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

当你在本地开发web应用程序时,你的机器同时是服务器和客户端。这件事可能会让您感到困惑,因此您必须理解您试图运行的jar文件中的代码将在_server上执行。

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

最新更新