Можете ли вы вызвать сервлет со ссылкой? - PullRequest
8 голосов
/ 15 февраля 2010

Можете ли вы вызвать сервлет со ссылкой? Например

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

И, возможно, передать параметры объекту запроса, добавив их в строку запроса.

Если нет, я видел такие вещи:

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

Но как мне это вызвать? Например, если бы это был код JavaScript, я мог бы поместить его в функцию щелчка jQuery, или, если это был сервлет, я бы поместил его в метод.

Но как мне вызвать этот код из JSP. Насколько я знаю, вы не можете вызывать код Java с событиями JavaScript.

Ответы [ 3 ]

12 голосов
/ 15 февраля 2010
<a href="servletUrl?param=value">click</a>

совершенно законно и будет работать.

Это вызовет метод сервлета doGet(..), и вы можете получить параметр, используя request.getParameter("param")

10 голосов
/ 15 февраля 2010

Просто чтобы очистить заблуждение:

Насколько я знаю, вы не можете вызывать код Java с событиями Javascript.

Вы можете прекрасно назвать код Java с помощью кода JavaScript (и событий). Кстати, вам просто нужно разрешить 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. Второй способ - использовать window.location для запуска простого запроса GET. Например:

    <script type="text/javascript">
        var search = 'balusc';
        window.location = 'http://www.google.com/search?q=' + search;
    </script>
    
  3. Третий способ - использовать объект XMLHttpRequest для запуска асинхронного запроса и обработки результатов. Эта техника является базовой идеей «Аякса». Вот пример, совместимый с 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 своим собственным сервлетом, чтобы приведенные выше примеры работали в вашей среде.

Для получения дополнительной справочной информации, вы можете найти эту статью также полезной.

2 голосов
/ 15 февраля 2010

Возможно, вам нужно следующее:

<jsp:include page="/MyServlet">
    <jsp:param name="param" value="value"/>
</jsp:include>
...