Лабораторная работа: Создание приложений на AJAX
req. setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
// Посылаем закодированные данные, говорящие о том, что я хочу добавить
// определенный продукт в корзину.
req. send("action=add&item="+itemCode);
}
После всего этого вы поняли первую часть в механизме Ajax - собственно создание и передача HTTP-запроса от клиента. Следующим шагом будет код сервлета на языке Java для обработки запроса.
В начало. Обработка запроса сервлета
Обработка XMLHttpRequest с помощью сервлета такая же, как и обработка обычного HTTP-запроса из браузера. Закодированные данные, отсылаемые в содержимом запроса POST, могут быть получены с помощью вызовов HttpServletRequest. getParameter(). Ajax запрашивает участие в HttpSession, такой же, как и в регулярных Web запросах из приложения. Это полезно для примера сценария корзины покупателя, поскольку позволяет мне заключить состояние пользовательской корзины покупателя в JavaBeans и удерживать это состояние во время сессии между двумя запросами.
Листинг 4 - часть простого сервлета, который обрабатывает Ajax запросы, чтобы обновить корзину покупателя. Cart получается из сессии пользователя и его состояние обновляется в соответствии с параметрами запроса. Cart затем сериализуется в XML-формате, а XML образуется в ServletResponse. Важно установить тип содержимого запроса в application/xml, в противном случае XMLHttpRequest не будет анализировать содержимое ответа.
Листинг 4. Код сервлета для обработки Ajax-запросов
public void doPost(HttpServletRequest req,
HttpServletResponse res)
throws java. io. IOException {
Cart cart = getCartFromSession(req);
String action = req. getParameter("action");
String item = req. getParameter("item");
if ((action! = null) &&(item! = null)) {
// Добавить или удалить продукт из Cart
if ("add". equals(action)) {
cart. addItem(item);
} else if ("remove". equals(action)) {
cart. removeItems(item);
}
}
// Сериализуем состояние Cart в XML-формате
String cartXml = cart. toXml();
// Записываем полученный XML в запрос.
res. setContentType("application/xml");
res. getWriter(). write(cartXml);