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