Учебники

Сервлеты — HTTP-ответ сервера

Как обсуждалось в предыдущей главе, когда веб-сервер отвечает на запрос HTTP, ответ обычно состоит из строки состояния, некоторых заголовков ответа, пустой строки и документа. Типичный ответ выглядит так —

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>
<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>

Строка состояния состоит из версии HTTP (HTTP / 1.1 в примере), кода состояния (в примере 200) и очень короткого сообщения, соответствующего коду состояния (в примере OK).

Ниже приводится краткое изложение наиболее полезных заголовков ответов HTTP 1.1, которые возвращаются в браузер со стороны веб-сервера, и вы бы очень часто использовали их в веб-программировании.

Sr.No. Заголовок и описание
1

Разрешать

Этот заголовок указывает методы запроса (GET, POST и т. Д.), Которые поддерживает сервер.

2

Cache-Control

Этот заголовок указывает обстоятельства, при которых ответный документ можно безопасно кэшировать. Он может иметь значения public , private или no-cache и т. Д. Public означает, что документ кэшируется, Private означает, что документ предназначен для одного пользователя и может храниться только в приватных (не общих) кэшах, а nocache означает, что документ никогда не должен кэшироваться.

3

соединение

Этот заголовок указывает браузеру, следует ли использовать постоянный в соединениях HTTP или нет. Значение close указывает браузеру не использовать постоянные HTTP-соединения, а keepalive означает использование постоянных соединений.

4

Content-Disposition

Этот заголовок позволяет вам запросить, чтобы браузер попросил пользователя сохранить ответ на диске в файле с заданным именем.

5

Content-Encoding

Этот заголовок определяет способ кодирования страницы во время передачи.

6

Content-Language

Этот заголовок обозначает язык, на котором написан документ. Например, en, en-us, ru и т. Д.

7

Content-Length

Этот заголовок указывает количество байтов в ответе. Эта информация необходима, только если браузер использует постоянное (keep-alive) соединение HTTP.

8

Тип содержимого

Этот заголовок содержит тип MIME (многоцелевого расширения почты Интернета) для документа ответа.

9

Истекает

Этот заголовок указывает время, в которое контент должен считаться устаревшим и, следовательно, больше не кэшироваться.

10

Последнее изменение

Этот заголовок указывает, когда документ был последний раз изменен. Затем клиент может кэшировать документ и указать дату в заголовке запроса If-Modified-Since в последующих запросах.

11

Место нахождения

Этот заголовок должен быть включен во все ответы, которые имеют код состояния в 300-х годах. Это уведомляет браузер об адресе документа. Браузер автоматически подключается к этому местоположению и получает новый документ.

12

обновление

Этот заголовок указывает, как скоро браузер должен запросить обновленную страницу. Вы можете указать время в секундах, после которых страница будет обновляться.

13

Retry-After

Этот заголовок можно использовать вместе с ответом 503 (служба недоступна), чтобы сообщить клиенту, как скоро он сможет повторить свой запрос.

14

Set-Cookie

Этот заголовок указывает файл cookie, связанный со страницей.

Разрешать

Этот заголовок указывает методы запроса (GET, POST и т. Д.), Которые поддерживает сервер.

Cache-Control

Этот заголовок указывает обстоятельства, при которых ответный документ можно безопасно кэшировать. Он может иметь значения public , private или no-cache и т. Д. Public означает, что документ кэшируется, Private означает, что документ предназначен для одного пользователя и может храниться только в приватных (не общих) кэшах, а nocache означает, что документ никогда не должен кэшироваться.

соединение

Этот заголовок указывает браузеру, следует ли использовать постоянный в соединениях HTTP или нет. Значение close указывает браузеру не использовать постоянные HTTP-соединения, а keepalive означает использование постоянных соединений.

Content-Disposition

Этот заголовок позволяет вам запросить, чтобы браузер попросил пользователя сохранить ответ на диске в файле с заданным именем.

Content-Encoding

Этот заголовок определяет способ кодирования страницы во время передачи.

Content-Language

Этот заголовок обозначает язык, на котором написан документ. Например, en, en-us, ru и т. Д.

Content-Length

Этот заголовок указывает количество байтов в ответе. Эта информация необходима, только если браузер использует постоянное (keep-alive) соединение HTTP.

Тип содержимого

Этот заголовок содержит тип MIME (многоцелевого расширения почты Интернета) для документа ответа.

Истекает

Этот заголовок указывает время, в которое контент должен считаться устаревшим и, следовательно, больше не кэшироваться.

Последнее изменение

Этот заголовок указывает, когда документ был последний раз изменен. Затем клиент может кэшировать документ и указать дату в заголовке запроса If-Modified-Since в последующих запросах.

Место нахождения

Этот заголовок должен быть включен во все ответы, которые имеют код состояния в 300-х годах. Это уведомляет браузер об адресе документа. Браузер автоматически подключается к этому местоположению и получает новый документ.

обновление

Этот заголовок указывает, как скоро браузер должен запросить обновленную страницу. Вы можете указать время в секундах, после которых страница будет обновляться.

Retry-After

Этот заголовок можно использовать вместе с ответом 503 (служба недоступна), чтобы сообщить клиенту, как скоро он сможет повторить свой запрос.

Set-Cookie

Этот заголовок указывает файл cookie, связанный со страницей.

Методы для установки заголовка ответа HTTP

Существуют следующие методы, которые можно использовать для установки заголовка ответа HTTP в вашей программе сервлета. Эти методы доступны с объектом HttpServletResponse .

Sr.No. Метод и описание
1

String encodeRedirectURL (String url)

Кодирует указанный URL-адрес для использования в методе sendRedirect или, если кодирование не требуется, возвращает URL-адрес без изменений.

2

String encodeURL (String url)

Кодирует указанный URL-адрес путем включения в него идентификатора сеанса или, если кодирование не требуется, возвращает URL-адрес без изменений.

3

логическое содержит заголовок (строковое имя)

Возвращает логическое значение, указывающее, был ли уже задан указанный заголовок ответа.

4

логическое isCommitted ()

Возвращает логическое значение, указывающее, был ли принят ответ.

5

void addCookie (Cookie cookie)

Добавляет указанный файл cookie в ответ.

6

void addDateHeader (имя строки, длинная дата)

Добавляет заголовок ответа с указанным именем и датой-значением.

7

void addHeader (String name, String value)

Добавляет заголовок ответа с указанным именем и значением.

8

void addIntHeader (String name, int value)

Добавляет заголовок ответа с указанным именем и целочисленным значением.

9

void flushBuffer ()

Принудительно записывает любой контент в буфере для клиента.

10

сброс void ()

Очищает любые данные, которые существуют в буфере, а также код состояния и заголовки.

11

void resetBuffer ()

Очищает содержимое базового буфера в ответе без очистки заголовков или кода состояния.

12

void sendError (int sc)

Отправляет клиенту сообщение об ошибке, используя указанный код состояния, и очищает буфер.

13

void sendError (int sc, String msg)

Отправляет ответ об ошибке клиенту, используя указанный статус.

14

void sendRedirect (расположение строки)

Отправляет клиенту ответ временного перенаправления, используя указанный URL-адрес местоположения перенаправления.

15

void setBufferSize (int size)

Устанавливает предпочтительный размер буфера для тела ответа.

16

void setCharacterEncoding (String charset)

Устанавливает кодировку символов (кодировка MIME) ответа, отправляемого клиенту, например, в UTF-8.

17

void setContentLength (int len)

Устанавливает длину тела содержимого в ответе. В сервлетах HTTP этот метод устанавливает заголовок HTTP Content-Length.

18

void setContentType (тип String)

Устанавливает тип содержимого ответа, отправляемого клиенту, если ответ еще не зафиксирован.

19

void setDateHeader (имя строки, длинная дата)

Устанавливает заголовок ответа с указанным именем и датой-значением.

20

void setHeader (String name, String value)

Устанавливает заголовок ответа с указанным именем и значением.

21

void setIntHeader (имя строки, значение типа int)

Устанавливает заголовок ответа с заданным именем и целочисленным значением

22

void setLocale (Locale loc)

Устанавливает локаль ответа, если ответ еще не зафиксирован.

23

void setStatus (int sc)

Устанавливает код состояния для этого ответа

String encodeRedirectURL (String url)

Кодирует указанный URL-адрес для использования в методе sendRedirect или, если кодирование не требуется, возвращает URL-адрес без изменений.

String encodeURL (String url)

Кодирует указанный URL-адрес путем включения в него идентификатора сеанса или, если кодирование не требуется, возвращает URL-адрес без изменений.

логическое содержит заголовок (строковое имя)

Возвращает логическое значение, указывающее, был ли уже задан указанный заголовок ответа.

логическое isCommitted ()

Возвращает логическое значение, указывающее, был ли принят ответ.

void addCookie (Cookie cookie)

Добавляет указанный файл cookie в ответ.

void addDateHeader (имя строки, длинная дата)

Добавляет заголовок ответа с указанным именем и датой-значением.

void addHeader (String name, String value)

Добавляет заголовок ответа с указанным именем и значением.

void addIntHeader (String name, int value)

Добавляет заголовок ответа с указанным именем и целочисленным значением.

void flushBuffer ()

Принудительно записывает любой контент в буфере для клиента.

сброс void ()

Очищает любые данные, которые существуют в буфере, а также код состояния и заголовки.

void resetBuffer ()

Очищает содержимое базового буфера в ответе без очистки заголовков или кода состояния.

void sendError (int sc)

Отправляет клиенту сообщение об ошибке, используя указанный код состояния, и очищает буфер.

void sendError (int sc, String msg)

Отправляет ответ об ошибке клиенту, используя указанный статус.

void sendRedirect (расположение строки)

Отправляет клиенту ответ временного перенаправления, используя указанный URL-адрес местоположения перенаправления.

void setBufferSize (int size)

Устанавливает предпочтительный размер буфера для тела ответа.

void setCharacterEncoding (String charset)

Устанавливает кодировку символов (кодировка MIME) ответа, отправляемого клиенту, например, в UTF-8.

void setContentLength (int len)

Устанавливает длину тела содержимого в ответе. В сервлетах HTTP этот метод устанавливает заголовок HTTP Content-Length.

void setContentType (тип String)

Устанавливает тип содержимого ответа, отправляемого клиенту, если ответ еще не зафиксирован.

void setDateHeader (имя строки, длинная дата)

Устанавливает заголовок ответа с указанным именем и датой-значением.

void setHeader (String name, String value)

Устанавливает заголовок ответа с указанным именем и значением.

void setIntHeader (имя строки, значение типа int)

Устанавливает заголовок ответа с заданным именем и целочисленным значением

void setLocale (Locale loc)

Устанавливает локаль ответа, если ответ еще не зафиксирован.

void setStatus (int sc)

Устанавливает код состояния для этого ответа

Пример ответа HTTP-заголовка

Вы уже видели, как метод setContentType () работал в предыдущих примерах, и в следующем примере также будет использоваться тот же метод, дополнительно мы будем использовать метод setIntHeader () для установки заголовка Refresh .

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class Refresh extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
      // Set refresh, autoload time as 5 seconds
      response.setIntHeader("Refresh", 5);
 
      // Set response content type
      response.setContentType("text/html");
 
      // Get current time
      Calendar calendar = new GregorianCalendar();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
         
      if(calendar.get(Calendar.AM_PM) == 0)
         am_pm = "AM";
      else
         am_pm = "PM";
 
      String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
    
      PrintWriter out = response.getWriter();
      String title = "Auto Refresh Header Setting";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<p>Current Time is: " + CT + "</p>\n"
      );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Теперь вызов вышеуказанного сервлета будет отображать текущее системное время через каждые 5 секунд следующим образом. Просто запустите сервлет и подождите, чтобы увидеть результат —

Current Time is: 9:44:50 PM