Вызовите сервлет и вызовите код Java из JavaScript вместе с параметрами - PullRequest
6 голосов
/ 25 января 2010

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

Ответы [ 3 ]

12 голосов
/ 25 января 2010

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

  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). Ниже приведен пример вызова сервлета "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.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") в сервлете.

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

1 голос
/ 17 июля 2017

При отправке 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"));
}
1 голос
/ 25 января 2010

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

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

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

...