2012-10-01 35 views
2

我以前寫過一個從bash文件執行的java類,現在我需要允許它使用Javascript/HTML按鈕從JSP頁面執行,我想知道我該怎麼做?如何使用JSP頁面的參數運行java類?

首先,我的課是這樣的:

public class Sync 
{ 
    public static void main(String[] args) 
    { 
    //my content here 
    } 
} 

此同步類已經從一個bash腳本運行如下:

cd /root/tomcat/webapps/project/WEB-INF/classes/ 
echo "Executing first part..." 
/usr/local/java/bin/java classes/CLRSyncCLI 120.0.0.1 up false Y ${IPS[@]} 
echo "Executing second part..." 
/usr/local/java/bin/java classes/CLRSyncCLI 127.0.0.1 down false Y ${IPS[@]} 

需要注意的是:類是所有編譯的java目錄類位於TomCat Web服務器中。

現在的JSP頁面中我需要這樣的東西:

<input type="button" value="Execute" name="to" action="run" onClick="path here"> 

如何與它的參數從一個單一的按一下按鈕運行此同步班兩次,顯示該類已經有消息執行。

+0

你用什麼服務器端技術?當按鈕被點擊時,你應該將用戶重定向到服務器捕獲的另一個url,並且在控制器中運行你的JAVA事物,而不是僅僅使用JSP來做這件事。 – sp00m

+0

取決於使用的框架。一個簡單的方法:將一個bean關聯到JSP(根據需要可以是一個會話或請求bean)。 – Alfabravo

+0

Apache TomCat5中的jsp。 – user1712095

回答

0

首先,我想說你所建議的是一個壞主意。你應該真正重構Sync如前面的答案所述。

但是,如果你是死心塌地使用Sync原樣,這裏是一些代碼,這可能有助於:

<% if(request.getParameter("to") == null) { %> 
    <p> 
     Click 'Execute' to begin processing. 
    </p> 
    <form> 

     <input type="submit" value="Execute" name="to" /> 
    </form> 
<% } else { %> 
    <p> 
     Processing... 
    </p> 
    <pre> 
     <% 
      PrintStream sysout = System.out; 
      try { 
       File syncFile = File.createTempFile("Sync", ".tmp"); 

       PrintStream syncOs= new PrintStream(syncFile); 
       System.setOut(syncOs); 
       String[] myArgs = ...; // set up your args 
       Sync.main(myArgs); 
       // ... do whatever else you need to do 
       syncOs.close(); 
       syncFile.close(); 

       FileReader syncRdr = new FileReader(syncFile); 
       String line = null; 
       while((line = syncRdr.readLine()) { 
        out.println(line); 
       } 
       syncRdr.close(); 
       syncFile.delete(); 
      } catch(Exception ex) { 
       out.print(ex); 
      } finally { 
       System.setOut(sysout); 
      } 
     %> 
    </pre> 
<% } %> 

有一些潛在的陷阱在這裏,尤其是多線程。但也許你可以用它作爲一個起點?另外,我還沒有調試它,所以你可能需要做更多的工作。

祝你好運,

DC

+0

感謝DC,最初我在考慮將此Sync類擴展到HttpServelet,並且發佈是一個jsp表單。我會盡量仔細看看你的代碼。 – user1712095

+0

@ suser1712095,我認爲一個JSP文件已經擴展了HttpServlet。 JSP是創建servlet的更友好的方式。 –

+0

是的,的確如此。 –

1

你的類必須擴展javax.servlet.http.HttpServlet和至少覆蓋一個方法,如果你正在做一個形式,那麼這將是一個方法doPost()

然後,你需要添加一個<servlet/><servlet-mapping/>到WEB-INF/web.xml指向你的類(現在是一個Servlet)。

從路徑判斷,您已經安裝了Tomcat。 javax.servlet。*可以在名爲servlet-api.jar的tomcat/lib中找到。你只需要它們進行編譯。 Tomcat在運行時提供它們。

只有這樣,才能在JSP創建表單是這樣的: <form method="POST" action="MyServlet">...<input.../>...</form> 假設MyServlet是您添加到web.xml中的Servlet的名稱(如果需要換成你自己的)。

下面是一個例子:http://met.guc.edu.eg/OnlineTutorials/JSP%20-%20Servlets/A%20servlet%20example.aspx

它總是有意義的閱讀至少第4章的JavaEE指南:http://docs.oracle.com/javaee/5/tutorial/doc/bnafd.html

+0

測試 測試 測試 /測試 user1712095

0

簡短的回答:onClick="path here"應該鏈接到運行類第二JSP,不是班級本身。

龍答:

  1. 複製你的類在Tomcat的lib文件夾

  2. 創建第二個JSP文件

  3. onClick="path here"在第一JSP應該鏈接到新的JSP即會運行班級,而不是班級本身。

  4. 添加類路徑到JSP頭import="com.mypackage.*"

  5. 你必須創建接收參數和運行邏輯的方法,你將無法運行在你的命令的方式做的主要方法線。

調用的代碼添加到JSP

<% 
    CLRSyncCLI o = new CLRSyncCLI(); 
    o.method(); 
%> 
+0

謝謝您的answer..Initially,我有這樣的文件中的兩個JSP文件,一個是syncPortal.jsp,我有:if(request.getParameter(「submitted」)== null){//這裏有一些內容%><%@ include file =「Sync.jsp」%><%。 ...在Sync.jsp文件中,我試圖調用我們討論過的Sync類。 – user1712095