我是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。但是,脚本没有运行。任何人都可以解释如何做到这一点?
答案 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层教程。