Сервлеты - 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 | Allow Этот заголовок определяет методы запроса (GET, POST и т. Д.), Которые поддерживает сервер.  |  
      
| 2 | Cache-Control Этот заголовок определяет обстоятельства, при которых ответный документ может быть безопасно кэширован. Может иметь значенияpublic, private или же no-cache и т. д. Public означает, что документ кэшируется, Private означает, что документ предназначен для одного пользователя и может храниться только в частных (не общих) кэшах, а nocache означает, что документ никогда не должен кэшироваться.  |  
      
| 3 | Connection Этот заголовок указывает браузеру, следует ли использовать постоянное соединение в HTTP-соединениях или нет. Ценностьclose указывает браузеру не использовать постоянные HTTP-соединения и keepalive означает использование постоянных соединений.  |  
      
| 4 | Content-Disposition Этот заголовок позволяет вам запросить, чтобы браузер попросил пользователя сохранить ответ на диск в файл с заданным именем.  |  
      
| 5 | Content-Encoding Этот заголовок определяет способ кодирования страницы во время передачи.  |  
      
| 6 | Content-Language Этот заголовок обозначает язык, на котором написан документ. Например en, en-us, ru и т. Д.  |  
      
| 7 | Content-Length Этот заголовок указывает количество байтов в ответе. Эта информация необходима только в том случае, если браузер использует постоянное (поддерживающее) HTTP-соединение.  |  
      
| 8 | Content-Type Этот заголовок указывает тип MIME (многоцелевое расширение почты Интернета) ответного документа.  |  
      
| 9 | Expires Этот заголовок указывает время, в которое контент следует считать устаревшим и, следовательно, больше не кэшировать.  |  
      
| 10 | Last-Modified Этот заголовок указывает, когда документ был в последний раз изменен. Затем клиент может кэшировать документ и указать датуIf-Modified-Since заголовок запроса в последующих запросах.  |  
      
| 11 | Location Этот заголовок должен быть включен во все ответы, которые имеют код состояния в 300. Это уведомляет браузер об адресе документа. Браузер автоматически повторно подключается к этому местоположению и получает новый документ.  |  
      
| 12 | Refresh Этот заголовок указывает, как скоро браузер должен запросить обновленную страницу. Вы можете указать время в секундах, по истечении которого страница будет обновлена.  |  
      
| 13 | Retry-After Этот заголовок можно использовать вместе с ответом 503 (служба недоступна), чтобы сообщить клиенту, как скоро он может повторить свой запрос.  |  
      
| 14 | Set-Cookie Этот заголовок определяет файл cookie, связанный со страницей.  |  
      
Способы установки заголовка HTTP-ответа
Существуют следующие методы, которые можно использовать для установки заголовка HTTP-ответа в вашей программе сервлета. Эти методы доступны с объектом HttpServletResponse .
| Sr. No. | Метод и описание | 
|---|---|
| 1 | String encodeRedirectURL(String url) Кодирует указанный URL-адрес для использования в методе sendRedirect или, если кодирование не требуется, возвращает URL-адрес без изменений.  |  
      
| 2 | String encodeURL(String url) Кодирует указанный URL-адрес, включая в него идентификатор сеанса, или, если кодирование не требуется, возвращает URL-адрес без изменений.  |  
      
| 3 | boolean containsHeader(String name) Возвращает логическое значение, указывающее, установлен ли уже названный заголовок ответа.  |  
      
| 4 | boolean isCommitted() Возвращает логическое значение, указывающее, был ли ответ зафиксирован.  |  
      
| 5 | void addCookie(Cookie cookie) Добавляет указанный файл cookie в ответ.  |  
      
| 6 | void addDateHeader(String name, long date) Добавляет заголовок ответа с заданным именем и датой.  |  
      
| 7 | void addHeader(String name, String value) Добавляет заголовок ответа с заданным именем и значением.  |  
      
| 8 | void addIntHeader(String name, int value) Добавляет заголовок ответа с заданным именем и целым числом.  |  
      
| 9 | void flushBuffer() Принудительно записывает любое содержимое в буфере клиенту.  |  
      
| 10 | void reset() Удаляет все данные, существующие в буфере, а также код состояния и заголовки.  |  
      
| 11 | void resetBuffer() Очищает содержимое нижележащего буфера в ответе без очистки заголовков или кода состояния.  |  
      
| 12 | void sendError(int sc) Отправляет клиенту ответ об ошибке, используя указанный код состояния и очищая буфер.  |  
      
| 13 | void sendError(int sc, String msg) Отправляет клиенту ответ об ошибке с указанным статусом.  |  
      
| 14 | void sendRedirect(String location) Отправляет клиенту ответ временного перенаправления с использованием указанного 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 type) Устанавливает тип содержимого ответа, отправляемого клиенту, если ответ еще не зафиксирован.  |  
      
| 19 | void setDateHeader(String name, long date) Устанавливает заголовок ответа с заданным именем и датой.  |  
      
| 20 | void setHeader(String name, String value) Устанавливает заголовок ответа с заданным именем и значением.  |  
      
| 21 год | void setIntHeader(String name, int value) Устанавливает заголовок ответа с заданным именем и целочисленным значением  |  
      
| 22 | void setLocale(Locale loc) Устанавливает языковой стандарт ответа, если ответ еще не зафиксирован.  |  
      
| 23 | 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 секунд следующим образом. Просто запустите сервлет и дождитесь результата -
Auto Refresh Header Setting
Current Time is: 9:44:50 PM