8

リンクを使用してサーブレットを呼び出すことはできますか? 例えば

<a href="/servletName">link text</a>

また、パラメーターをクエリ文字列に追加して、要求オブジェクトにパラメーターを渡すこともできます。

そうでない場合、私はこの種のものを見てきました:

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(/MyServlet); 
dispatcher.include(request,response); 

しかし、どうすればこれをトリガーできますか? たとえば、JavaScript コードの場合は jQuery クリック関数内に配置でき、サーブレットの場合はメソッドに配置できます。

しかし、JSP 内からこのコードを呼び出すにはどうすればよいでしょうか。私の知る限り、JavaScript イベントで Java コードを呼び出すことはできません。

4

3 に答える 3

13
<a href="servletUrl?param=value">click</a>

完全に合法であり、機能します。

これdoGet(..)により、サーブレットのメソッドが呼び出され、次を使用してパラメーターを取得できますrequest.getParameter("param")

于 2010-02-15T15:57:11.443 に答える
10

誤解を解くために:

私の知る限り、Javascript イベントで Java コードを呼び出すことはできません。

JavaScript コード (およびイベント) を使用して Java コードを完全に呼び出すことができます。要するに、JavaScript が完全な HTTP 要求をサーバー側に送信するようにする必要があるだけです。これには基本的に3つの方法があります。

  1. 最初の方法は、既存のリンク/ボタン/フォームの呼び出しをシミュレートすることです。例えば

    <a id="linkId" href="http://www.google.com/search?q=balusc">Link</a>
    
    <script type="text/javascript">
        document.getElementById('linkId').click();
    </script>
    

    <form id="formId" action="http://www.google.com/search">
        <input type="text" id="inputId" name="q">
    </form>
    
    <script type="text/javascript">
        document.getElementById('inputId').value = 'balusc';
        document.getElementById('formId').submit();
    </script>
    
  2. 2 番目の方法は、window.location を使用してプレーンな GET 要求を起動することです。例えば:

    <script type="text/javascript">
        var search = 'balusc';
        window.location = 'http://www.google.com/search?q=' + search;
    </script>
    
  3. 3 番目の方法は、XMLHttpRequest オブジェクトを使用して非同期リクエストを起動し、結果を処理することです。この手法が「Ajax」の基本的な考え方です。Firefox と互換性のある例を次に示します。

    <script type="text/javascript">
        function getUrl(search) {
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4) {
                    var responseJson = eval('(' + xhr.responseText + ')');
                    var url = responseJson.responseData.results[0].unescapedUrl;
                    var link = document.getElementById('linkId');
                    link.href = link.firstChild.nodeValue = url;
                    link.onclick = null;
                }
            }
            var google = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q='
            xhr.open('GET', google + search, true);
            xhr.send(null);
        }
    </script>
    
    <p>My homepage is located at: <a id="linkId" href="#" onclick="getUrl('balusc')">click me!</a></p>
    

    これは、 jQueryを使用して、より短くクロスブラウザー互換の方法で書き直すことができます。

http://www.google.com/search上記の例を自分の環境で動作させるには、独自のサーブレットに置き換えるだけです。

詳細な背景情報については、この記事も役立つ場合があります。

于 2010-02-15T16:13:09.483 に答える