2

以前に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は、コンパイルされたすべてのJavaクラスがTomCatWebサーバー内にあるディレクトリです。

今jspページ内で私は次のようなものが必要です:

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

ボタンを1回クリックするだけで、引数を使用してこの同期クラスを2回実行し、クラスが実行されたことをメッセージとともに表示するにはどうすればよいですか。

4

3 に答える 3

1

クラスはjavax.servlet.http.HttpServlet、少なくとも 1 つのメソッドを拡張およびオーバーライドする必要があります。フォームを実行している場合、それはメソッドになります。doPost()

<servlet/>次に、 aと aを WEB-INF/web.xmlに追加し<servlet-mapping/>て、クラス (現在はサーブレット) を指す必要があります。

パスから判断すると、Tomcat は既にインストールされています。javax.servlet.* は、tomcat/lib で servlet-api.jar という名前で見つけることができます。コンパイルにのみ必要です。Tomcat は実行時にそれらを提供します。

そうして初めて、次のように JSP でフォームを作成できます <form method="POST" action="MyServlet">...<input.../>...</form> 。MyServlet は、web.xml に追加したサーブレットの名前であると仮定します (必要に応じて独自のものに置き換えてください)。

以下に例を示します: 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

于 2012-10-01T16:28:51.393 に答える
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

于 2012-10-01T19:01:59.720 に答える
0

簡単な答え: onClick="path here"クラス自体ではなく、クラスを実行する 2 番目の JSP にリンクする必要があります。

長い答え:

  1. クラスを tomcat lib フォルダーにコピーします。

  2. 2 つ目の JSP ファイルを作成する

  3. onClick="path here"最初の JSP は、クラス自体ではなく、クラスを実行する新しい JSP にリンクする必要があります。

  4. クラスパスを JSP ヘッダーに追加するimport="com.mypackage.*"

  5. パラメータを受け取ってロジックを実行するメソッドを作成する必要があります。コマンド ラインで実行する方法でメイン メソッドを実行することはできません。

呼び出しコードを JSP に追加する

<% 
   CLRSyncCLI o = new CLRSyncCLI();
   o.method();
%>
于 2012-10-01T17:32:17.610 に答える