Сервлеты - 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