English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

HTTP-ответ сервера Servlet

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

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Пробел)
!doctype ...
<html>
<head>...</head>
<body>
...
</body>
</html>

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

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

ЗаголовкиОписание
AllowЭта заголовочная информация определяет методы запроса, поддерживаемые сервером (GET, POST и т.д.).
Cache-ControlЭта заголовочная информация определяет, в каких случаях ответный документ может быть безопасно кэширован. Возможные значения:public, private или no-cache и т.д. Public означает, что документ может быть кэширован, Private означает, что документ является документом для единственного пользователя и может храниться только в частном (не.shared) кэше, no-cache означает, что документ не должен быть кэширован.
ConnectionЭта заголовочная информация указывает, использует ли браузер постоянное HTTP-соединение. Значение close Это указывает браузеру не использовать постоянное HTTP-соединение, значение keep-alive Это означает использование постоянного подключения.
Content-DispositionЭта заголовочная информация позволяет вамrequest браузер, чтобы пользователь сохранял ответ на диск с заданным именем файла.
Content-EncodingВ процессе передачи эта заголовочная информация определяет способ кодирования страницы.
Content-LanguageЭта заголовочная информация показывает, на каком языке написан документ. Например, en, en-us, ru и т.д.
Content-LengthЭта заголовочная информация указывает на количество байтов в ответе. Эти данные необходимы только при использовании постоянного (keep-alive) HTTP-соединения.
Content-TypeЭта заголовочная информация предоставляет тип MIME (Multipurpose Internet Mail Extension) ответного документа.
ExpiresЭта заголовочная информация определяет время истечения срока действия содержимого, после чего контент больше не кэшируется.
Last-ModifiedЭта заголовочная информация указывает на последнее время изменения документа. Затем клиент может кэшировать файл и в последующих запросах через If-Modified-Since Запрос заголовка предоставляет дату.
LocationЭта заголовочная информация должна быть включена во все ответы с кодом состояния. В течение 300 секунд это будет информировать браузер о URL документа. Браузер автоматически перенастроится на это место и получит новый документ.
RefreshЭта заголовочная информация определяет, как браузер должен尽快 запросить обновленную страницу. Вы можете указать количество секунд для обновления страницы.
Retry-AfterЭта заголовочная информация может использоваться вместе с ответом 503 (Service Unavailable - сервис недоступен), что будет информировать клиента о том, через сколько времени он может повторить свой запрос.
Set-CookieЭта заголовочная информация определяет cookie, связанный с страницей.

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

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

НомерМетод & Описание
1String encodeRedirectURL(String url)
Кодировать указанный URL для использования в методе sendRedirect или, если кодирование не необходимо, вернуть URL без изменений.
2String encodeURL(String url)
Кодировать указанный URL с ID сеанса или, если кодирование не необходимо, вернуть URL без изменений.
3boolean containsHeader(String name)
Вернуть булево значение, указывающее, был ли уже установлен именованный заголовок ответа.
4boolean isCommitted()
Вернуть булево значение, указывающее, был ли ответ уже отправлен.
5void addCookie(Cookie cookie)
Добавить указанный cookie в ответ.
6void addDateHeader(String name, long date)
Добавить заголовок ответа с указанным именем и значением даты.
7void addHeader(String name, String value)
Добавить заголовок ответа с указанным именем и значением.
8void addIntHeader(String name, int value)
Добавить заголовок ответа с указанным именем и целочисленным значением.
9void flushBuffer()
Принудительно записать любое содержимое буфера в клиент.
10void reset()
Очистить любое существующее данные в буфере, включая код состояния и заголовки.
11void resetBuffer()
Очистить содержимое базового буфера ответа, не очищая код состояния и заголовки.
12void sendError(int sc)
Отправить ошибочный ответ клиенту с указанным кодом состояния и очистить буфер.
13void sendError(int sc, String msg)
Отправить ошибочный ответ клиенту с указанным состоянием.
14void sendRedirect(String location)
Отправить временный перенаправляющий ответ клиенту с указанным URL места перенаправления.
15void setBufferSize(int size)
Установить предпочтительный размер буфера для тела ответа.
16void setCharacterEncoding(String charset)
Установить кодировку символов ответа, отправляемого клиенту (MIME кодировка), например, UTF-8.
17void setContentLength(int len)
Установить длину контента HTTP Servlet ответа, этот метод устанавливает заголовок HTTP Content-Length.
18void setContentType(String type)
Если ответ еще не отправлен, установите тип контента, отправляемого клиенту.
19void setDateHeader(String name, long date)
Установить заголовок ответа с заданным именем и значением даты.
20void setHeader(String name, String value)
Установить заголовок ответа с заданным именем и значением.
21void setIntHeader(String name, int value)
Установить заголовок ответа с заданным именем и целочисленным значением.
22void setLocale(Locale loc)
Если ответ еще не отправлен, установите область ответа.
23void setStatus(int sc)
установить статус кода для этого ответа.

Пример HTTP Header ответа

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

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Refresh")
//Расширение класса HttpServlet
public class Refresh extends HttpServlet {
    //Метод обработки запросов метода GET
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          //Установка времени автоматической перезагрузки 5 секунд
          response.setIntHeader("Refresh", 5);
          //Установка типа содержимого ответа
          response.setContentType("text/html;charset=UTF-8");
         
          //Получение календаря по умолчанию с использованием стандартного часового пояса и языковой среды  
          Calendar cale = Calendar.getInstance();  
          //Преобразование типа Calendar в тип Date  
          Date tasktime = cale.getTime();  
          //Установка формата вывода даты  
          SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
          //Форматирование вывода  
          String nowTime = df.format(tasktime);
          PrintWriter out = response.getWriter();
          String title = "Автоматическое обновление Заголовка настройка - Пример сайта основного учебника";
          String docType =
          "<!DOCTYPE html>\n"
          out.println(docType +
            "<html>\n"
            "<head><title>" + title + "</title></head>\n"
            "<body bgcolor=\"#f0f0f0\">\n"
            "<h1 align=\"center\">" + title + "</h1>\n"
            "<p>Текущее время: " + nowTime + "</p>\n"
      }
      // Метод обработки запроса POST
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

Данный тестовый пример находится в проекте TomcatTest, соответствующие настройки web.xml будут такими:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet>  
     <!-- Имя класса -->  
    <servlet-name>Refresh</servlet-name>  
    <!-- Найденый пакет -->  
    <servlet-class>com.w3codebox.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Refresh</servlet-name>  
    <!-- Адрес посещаемого сайта -->  
    <url-pattern>/TomcatTest/Refresh</url-pattern>  
    </servlet-mapping>  
</web-app>

Теперь, вызовите上面的 Servlet, и каждый 5 секунд будет отображаться текущее системное время. Достаточно запустить Servlet и подождать несколько секунд, чтобы увидеть следующий результат: