2013-02-22 3 views
0

вопрос на этой странице, спрашивает, как запустить программу Java со страницы PHP: Run Java class file from PHP script on a websiteЗапуск приложения Java из JSP страницы

Я хочу сделать то же самое со страницы JSP. Я не хочу импортировать классы и функции вызова или что-то сложное. Все, что я хочу сделать, это запустить команду вроде: java Test со страницы JSP, а затем получить все, что распечатано в System.out, с помощью теста, сохраненного в переменной на странице JSP.

Как это сделать?

Большое спасибо!

+0

why've Я был downvoted? –

+1

Потому что люди на переполнении стека претенциозны и думают, что все это плохой вопрос. Я проголосовал за ваш вопрос до 0, и мне любопытно увидеть ответ сам. – 2013-02-22 03:59:22

+0

haha ​​спасибо за поддержку @Decave –

ответ

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(); 
0

Поскольку у вас уже есть JVM работают, вы должны быть в состоянии сделать это инстанцирование загрузчика классов с баночками и рефлекторно найти основной метод и вызывать его.

Это некоторые шаблонные, которые могут быть полезны:

// 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 }); 
Смежные вопросы