Вызовите сервлет и вызовите код Java из JavaScript вместе с параметрами
У меня есть сеансовый ключ, который является переменной JavaScript, которую я получил из вызова REST API. Мне нужно вызвать свой Java-код в сервлете и передать этот ключ в качестве параметра. Какую функцию JavaScript я могу использовать для этого?
3 ответа
Несколько путей:
использование
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). Ниже приведен пример вызова сервлета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));
Используйте 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