0

此页面上的问题询问如何从 php 页面运行 java 程序: Run Java class file from PHP script on a website

我想从 JSP 页面做同样的事情。我不想导入类和调用函数或任何复杂的东西。我想要做的就是运行一个命令,例如:从 JSP 页面中进行 java Test,然后通过 Test 将打印到 System.out 的任何内容保存在 JSP 页面中的变量中。

我该怎么做呢?

非常感谢!!

4

2 回答 2

1

您可以通过以下方式执行此操作Runtime.exec()

Process p = Runtime.getRuntime().exec("java Test");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = input.readLine();
while (line != null) {
  // process output of the command
  // ...
}
input.close();
// wait for the command complete
p.waitFor();
int ret = p.exitValue();
于 2013-02-22T05:27:36.913 回答
0

由于您已经运行了一个 JVM,您应该能够通过使用 jar 实例化一个类加载器并反射性地找到 main 方法并调用它来做到这一点。

这是一些可能有用的样板:

    // add the classes dir and each file in lib to a List of URLs.
    List urls = new ArrayList();
    urls.add(new File(CLASSES).toURL());
    for (File f : new File(LIB).listFiles()) {
        urls.add(f.toURL());
    }

    // feed your URLs to a URLClassLoader
    ClassLoader classloader =
            new URLClassLoader(
                    urls.toArray(new URL[0]),
                    ClassLoader.getSystemClassLoader().getParent());

    // relative to that classloader, find the main class and main method
    Class mainClass = classloader.loadClass("Test");
    Method main = mainClass.getMethod("main",
            new Class[]{args.getClass()});

    // well-behaved Java packages work relative to the
    // context classloader.  Others don't (like commons-logging)
    Thread.currentThread().setContextClassLoader(classloader);

    // Invoke with arguments
    String[] nextArgs = new String[]{ "hello", "world" }
    main.invoke(null, new Object[] { nextArgs });
于 2013-02-22T13:41:00.037 回答