2011-12-08 216 views
1

我是jsp和運行時的新手。我需要能夠在Web應用程序頁面上使用按鈕運行腳本。腳本的位置是在/ home /用戶/ ejbca_4/bin並運行它,運行時錯誤

cd ejbca_4/bin 
./ejbca.sh batch 

有人建議把這些命令在/ home /用戶/箱一個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異常。我刪除處理過程:

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代碼需要運行,那就是所謂的「scriptlet」,它像<% %>一樣,像infgeoax所說的。然而,使用Java運行shell腳本是令人恐懼的。在10年的Java Web開發中,我沒有看到任何人這樣做。 –

0

你的function generate()應該是什麼?我沒有看到它有任何標籤,但它看起來像JavaScript--當你試圖調用Java代碼時。

現在,您的onClick將被處理客戶端,它需要一種方法來調用服務器端的運行時調用。現在,客戶沒有辦法做到這一點。你需要做一些回調(可能使用AJAX),這將導致服務器執行你的運行時調用。如果它保留在JSP中,則需要將它包含在<% ... %>中,以便將它評估爲Java代碼。

由於您不熟悉JSP,我強烈建議您閱讀Oracle的Web層教程http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html