【问题标题】:Error with runtime运行时出错
【发布时间】:2011-12-08 02:44:44
【问题描述】:

我是 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。但是,该脚本未运行。谁能解释这应该怎么做?

【问题讨论】:

    标签: jsp shell web-applications button command


    【解决方案1】:

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

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

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

    应该用&lt;% %&gt;包围

    而客户端代码是:

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

    【讨论】:

    • generate() 函数在脚本中。那么在.jsp 中,它应该两者兼有吗? Runtime.getRuntime().exec("test.sh", null, null);和脚本?
    • 这个答案在技术上是正确的。如果您有需要运行的服务器端 java 代码,称为“scriptlet”,它会像 infgeoax 所说的那样进入 内部。然而,从 Java 中执行一个 shell 脚本是很可怕的。在 10 年的 Java Web 开发中,我从未见过有人这样做。
    【解决方案2】:

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

    现在,您的onClick 将在客户端处理,它需要一种方法来在服务器端调用您的运行时调用。目前,客户没有实现这一目标的途径。您需要执行某种回调(可能使用 AJAX),这将导致服务器执行您的运行时调用。如果它保留在 JSP 中,则需要将其包围在 &lt;% ... %&gt; 中,以便将其评估为 Java 代码。

    由于您是 JSP 新手,我强烈建议您阅读 Oracle 的 Web 层教程http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html

    【讨论】:

      猜你喜欢
      • 2021-02-01
      • 2012-10-17
      • 2016-09-17
      • 2018-02-07
      • 2014-08-29
      • 2011-06-02
      • 2015-05-01
      • 1970-01-01
      • 2017-03-16
      相关资源
      最近更新 更多