运行时出错

时间:2011-12-08 02:44:44

标签: jsp shell web-applications button command

我是jsp和运行时的新手。我需要能够在Web应用程序页面上使用按钮运行脚本。脚本的位置在/ home / user / ejbca_4 / bin中并运行它,

cd ejbca_4/bin
./ejbca.sh batch

有人建议将这些命令放在/ home / user / bin中的.sh文件中。我创建了/home/user/bin/test.sh,其中包含以下内容:

#!/bin/bash
cd ejbca_4/bin
./ejbca.sh batch

我将此添加到jsp页面

<input type="submit" name="Generate test" value='<c:out value="Generate Test"/>' tabindex="<%=tabindex++%>"
            onClick='generate()'>

function generate() {
  Process proc = Runtime.getRuntime().exec("test.sh",null,null);
}

但不知何故,这给了一个NumberFormatException。我删除了Process proc:

function generate() {
  Runtime.getRuntime().exec("test.sh",null,null);
}

并且没有NumberFormatException。但是,脚本没有运行。任何人都可以解释如何做到这一点?

2 个答案:

答案 0 :(得分:2)

您需要了解代码的哪一部分在服务器上运行,哪部分在客户端(浏览器)上运行。并且你永远不应该把应该在服务器上运行的代码放到客户端,因为那样做(显然)不行。

在您的情况下,应该在服务器上运行的代码是:

Runtime.getRuntime().exec("test.sh", null, null);

它应该被<% %>

包围

客户端代码是:

<input ... onclick='generate()'>
<script>
    function generate() {
        // tells the server to do 'Runtime.getRuntime().exec(...)'
    }
</script>

答案 1 :(得分:0)

你的function generate()应该是什么?我没有看到它在任何类型的标签中,但它看起来像JavaScript - 当你试图调用Java代码时。

现在,您的onClick将在客户端处理,它需要一种方法来在服务器端调用您的运行时调用。现在,客户端没有实现这一目标的途径。您需要进行某种回调(可能使用AJAX),这将导致服务器执行您的Runtime调用。如果它仍然存在于JSP中,则需要将其包含在<% ... %>中,以将其评估为Java代码。

由于您刚接触JSP,我强烈建议您在http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html处阅读Oracle的Web层教程。

相关问题