Вызовите Servlet и вызовите Java-код из JavaScript вместе с параметрами

У меня есть ключ сеанса, который является переменной JavaScript, которую я получил от вызова REST API. Мне нужно вызвать код Java в сервлет и передать этот ключ в качестве параметра. Какую функцию JavaScript я могу использовать для этого?

Ответ 1

Несколько способов:

  • Используйте window.location для запуска запроса GET. Предостережение заключается в том, что он синхронный (поэтому клиент увидит, что текущая страница будет изменена).

    window.location = "http://example.com/servlet?key=" + encodeURIComponent(key);
    

    Обратите внимание на важность встроенной функции encodeURIComponent() для кодирования параметров запроса перед ее передачей.

  • Используйте form.submit() для запуска запроса GET или POST. Оговорка также заключается в том, что она синхронна.

    document.formname.key.value = key;
    document.formname.submit();
    

    С

    <form name="formname" action="servlet" method="post">
        <input type="hidden" name="key">
    </form>
    

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

  • Используйте XMLHttpRequest#send() для запуска асинхронного запроса в фоновом режиме (также известного как Ajax). Ниже приведен пример сервлета s doGet().

    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://example.com/servlet?key=" + encodeURIComponent(key));
    xhr.send(null);
    

    Ниже приведен пример сервлета s doPost().

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://example.com/servlet");
    xhr.send("key=" + encodeURIComponent(key));
    
  • Используйте jQuery для отправки совместимого с Crossbrowser запроса Ajax (выше xhr код работает только в реальных браузерах, для Совместимость MSIE, вам нужно добавить некоторый беспорядок;)).

    $.get("http://example.com/servlet", { "key": key });
    

    Обратите внимание, что jQuery уже прозрачно кодирует параметры запроса сам по себе, поэтому вам здесь не нужно encodeURIComponent().

В любом случае, key будет доступен только request.getParameter("key") в сервлете.

См. также:

Ответ 2

Нет функции JavaScript как таковой, но браузеры обычно * предоставляют объект XMLHttpRequest, и вы можете пройти через.

Libraries, например YUI и jQuery предоставляют вспомогательные функции для упрощения его использования.

* для значения "обычно", которое включает почти любой браузер, который поддерживает JavaScript, и был выпущен с тех пор, как Netscape 4 умерла

Ответ 3

При отправке заголовка POST xhttp.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );

Код выглядит так: Клиент:

    function executeRequest(req) {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
               // Typical action to be performed when the document is ready:
               document.getElementById("response").value = xhttp.responseText;
            }
        };
        xhttp.open("POST", "execute/cardbrowser", true);
        xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhttp.send("lorem=ipsum&name=binny");
    }

Сервер:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println(req.getParameter("lorem"));
}