我试图通过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");
我使用the article中给出的streamgobbler东西,但仍然有同样的问题(挂起)。有人可以帮忙吗?
答案 0 :(得分:3)
永远不会奏效。否则就会出现安全漏洞。想象一下,您可以从Web浏览器运行任何可执行文件......您应该将您的类放在服务器上,让它们可以访问您的jsp,然后从jsp运行一些方法。
答案 1 :(得分:1)
虽然最好将jar添加到WEB-INF/lib
并使用方法调用执行所需的功能,或者至少将scriptlet代码移动到servlet,但使用Java提供的任何功能完全合法在JSP scriptlet中。
<强> 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
,这意味着没有发生错误。
当您在本地开发webapp时,您的计算机同时是服务器和客户端。这件事可能让你感到困惑,所以你必须理解你试图运行的jar文件中的代码将在_server上执行。
在您的情况下,问题是由jar文件本身中的代码引起的。尝试创建一个简单的类,看看它是否有效。