2011-12-08 17 views
1

jspとランタイムを初めて使用しています。 Webアプリケーションページのボタンでスクリプトを実行できるようにする必要があります。スクリプトの場所はランタイムエラー

cd ejbca_4/bin 
./ejbca.sh batch 

誰か/ホーム/ユーザー/ binに.SHファイルにこれらのコマンドを置くことをお勧めします、/ホーム/ユーザー/ ejbca_4/binにし、それを実行することです。私は、次の内容で/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

コードのどの部分がサーバー上で実行されており、どの部分がクライアント(ブラウザー)上で実行されているのかを理解する必要があります。そして、サーバー上で実行されるべきコードを決してクライアント側に置くべきではありません。なぜなら、それは(明らかに)機能しないからです。あなたのケースでは

、サーバー上で実行されなければならないコードは次のとおりです。

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

それは、<% %>

とクライアント側のコードに囲まれるべきである。

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

生成()関数はスクリプト内にあります。ですから、.jspには両方があるはずですか? Runtime.getRuntime()。exec( "test.sh"、null、null);とスクリプトですか? – Scar

+0

この回答は技術的に正しいです。あなたが実行する必要があるサーバー側のJavaコードを持っている場合は、 "スクリプトレット"と呼ばれ、それは<% %>の中に入り、infgeoaxのように言います。しかし、シェルスクリプトを実行するためにJavaを実行するのは恐ろしいことです。 Java Web開発の10年間で私は誰もこれをやっていないことを見てきました。 –

0

あなたのfunction generate()は何が予期していますか?どんな種類のタグでもわかりませんが、Javaコードを呼び出そうとしているときはJavaScriptのように見えます。

現在、onClickはクライアント側で処理されるため、サーバ側でランタイムコールを呼び出す方法が必要です。今のところ、クライアントはこれを実現するためのパスを持っていません。あなたは、サーバがあなたのランタイムコールを実行する結果になるコールバック(おそらくAJAXを使用して)のいくつかの並べ替えを行う必要があります。 JSPに残っている場合は、<% ... %>に囲んでJavaコードとして評価する必要があります。

JSPを初めてお使いの方でも、オラクルのWeb層チュートリアル(http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html)をお勧めします。