簡體   English   中英

如何使用JSP頁面中的參數運行Java類?

[英]How do I run a java class with arguments from a JSP page?

我以前編寫了一個從bash文件執行的Java類,現在我需要允許它使用Javascript / HTML按鈕從JSP頁面執行,我想知道該怎么做?

首先,我的課看起來像這樣:

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

此Sync類已從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[@]}

請注意:classes是TomCat Web服務器內所有已編譯Java類的目錄。

現在在jsp頁面中,我需要類似:

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

一次單擊一次,如何運行帶有其參數的同步類兩次,並顯示該類已執行並帶有消息。

您的類必須擴展javax.servlet.http.HttpServlet並重寫至少一個方法,如果您正在執行表單,則它將是doPost()方法

然后,您需要在WEB-INF / web.xml中添加<servlet/><servlet-mapping/>以指向您的類(現在是Servlet)。

從路徑來看,您已經安裝了Tomcat。 可以在您的tomcat / lib中以servlet-api.jar的名稱找到javax.servlet。*。 您只需要它們進行編譯。 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

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

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

長答案:

  1. 將您的課程復制到tomcat lib文件夾中

  2. 創建第二個JSP文件

  3. 第一個JSP上的onClick="path here"應該鏈接到將運行類的新JSP,而不是類本身。

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

  5. 您將不得不創建一個接收參數並運行邏輯的方法,而您將無法以在命令行中的方式運行main方法。

將調用代碼添加到JSP

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

首先,我想說你的建議是一個壞主意。 您實際上應該按照前面的答案中所述重構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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM