GET /xyzpresource HTTP/1.1
Host: localhost:8080
Accept: text/html
Upgrade: XYZP
Connection: Upgrade
OtherHeaderA: Value| Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE | 
| Назад | Вперёд | Содержание | 
В HTTP/1.1 клиенты могут запросить переключение на другой протокол в текущем соединении, используя поле заголовка Upgrade. Если сервер принимает запрос переключения на протокол, указанный клиентом, он генерирует HTTP-ответ со статусом 101 (переключение протоколов). После этого обмена клиент и сервер обмениваются данными по новому протоколу.
Например, клиент может сделать HTTP-запрос для переключения на протокол XYZP следующим образом:
GET /xyzpresource HTTP/1.1
Host: localhost:8080
Accept: text/html
Upgrade: XYZP
Connection: Upgrade
OtherHeaderA: ValueКлиент может указать параметры для нового протокола, используя заголовки HTTP. Сервер может принять запрос и сгенерировать ответ следующим образом:
HTTP/1.1 101 Switching Protocols
Upgrade: XYZP
Connection: Upgrade
OtherHeaderB: Value
(XYZP data)Java EE поддерживает функцию обновления протокола HTTP в сервлетах, как описано в табл. 18-7.
Таблица 18-7. Поддержка обновления протокола
| Класс или интерфейс | Метод | 
| 
 | 
 Метод обновления запускает обработку обновления протокола. Этот метод создаёт объект класса, который реализует интерфейс  Вызывайте метод  | 
| 
 | 
 Метод  | 
| 
 | 
 Метод  | 
| 
 | 
 Метод  | 
| 
 | 
 Метод  | 
Следующий код демонстрирует, как принять запрос на обновление протокола HTTP от клиента:
@WebServlet(urlPatterns={"/xyzpresource"})
public class XYZPUpgradeServlet extends HttpServlet {
   @Override
   public void doGet(HttpServletRequest request,
                     HttpServletResponse response) {
      if ("XYZP".equals(request.getHeader("Upgrade"))) {
         /* Принятие запроса upgrade */
         response.setStatus(101);
         response.setHeader("Upgrade", "XYZP");
         response.setHeader("Connection", "Upgrade");
         response.setHeader("OtherHeaderB", "Value");
         /* Делегирование соединения обработчику */
         XYZPUpgradeHandler = request.upgrade(XYZPUpgradeHandler.class);
         /* (немедленный возврат из сервисного метода) */
      } else {
         /* ... запись ошибки в ответ... */
      }
   }
}Класс XYZPUpgrityHandler обрабатывает подключение:
public class XYZPUpgradeHandler implements HttpUpgradeHandler {
   @Override
   public void init(WebConnection wc) {
      ServletInputStream input = wc.getInputStream();
      ServletOutputStream output = wc.getOutputStream();
      /* ... реализация XYZP используя потоки (специфично для протокола) ... */
   }
   @Override
   public void destroy() { ... }
}Класс, который реализует HttpUpgradeHandler, использует потоки из текущего соединения для связи с клиентом, используя новый протокол. См. Спецификацию Servlet 4.0 на http://jcp.org/en/jsr/detail?id=369 для получения подробной информации о поддержке обновления протокола HTTP.
| Назад | Вперёд | Содержание | 
 Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
	
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)
 			
		Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
	
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)