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

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

3 ответа

Решение

Несколько путей:

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

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

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

  2. использование 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>
    

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

  3. использование XMLHttpRequest#send() запустить асинхронный запрос в фоновом режиме (также известный как Ajax). Ниже приведен пример вызова сервлета doGet(),

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

    Ниже приведен пример вызова сервлета doPost(),

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://example.com/servlet");
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("key=" + encodeURIComponent(key));
    
  4. Используйте jQuery для отправки кросс-браузерного Ajax-запроса (выше xhr код работает только в реальных браузерах, для совместимости с MSIE вам потребуется добавить немного беспорядка;)).

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

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

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

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

Смотрите также:

При отправке 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"));
}

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

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

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

Другие вопросы по тегам