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

Ответ сервера JSP

Объект ответа Response主要负责将JSP-контейнер обработанные результаты передавать обратно клиенту. Через переменную response можно устанавливать HTTP-статус и отправлять данные клиенту, такие как Cookie, 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 означает, что документ предназначен только для одного пользователя и может использоваться только с частным кэшем. No-cache означает, что документ не кэшируется
Connection Команда браузеру о том, использовать ли устойчивое HTTP-соединениеcloseЗначение Команда браузеру не использовать устойчивое HTTP-соединение, а keep-alive означает использование устойчивого соединения
Content-Disposition Позволяет браузеру запросить пользователя о сохранении ответа с заданным именем на диске
Content-Encoding Указывает правила кодирования страницы при передаче
Content-Language Указывает язык используемого документа, например en, en-us, ru и т.д.
Content-Length Указывает количество байт в ответе. Используется только при использовании持久ного (keep-alive) HTTP-соединения
Content-Type Указывает MIME-тип используемого документа
Expires Указывает время, когда документ истекает и удаляется из кэша
Last-Modified Указывает время последней модификации документа. Клиент может кэшировать документ и предоставлять его в последующих запросах If-Modified-SinceЗаголовок запроса
Location В течение 300 секунд, включая все адреса с кодом состояния, браузер автоматически повторяет попытку подключения и检索新文档
Refresh Указывает,多久浏览器请求更新一次页面.
Retry-After Использовать вместе с 503 (Service Unavailable) для уведомления пользователя о том, через сколько времени запрос будет обработан
Set-Cookie Указать cookie, соответствующее текущей странице

Класс HttpServletResponse

Объект response является примером класса javax.servlet.http.HttpServletResponse. Как сервер создает объект request, так и он создает клиентский ответ.

Объект response определяет интерфейс обработки создания HTTP-заголовков. Используя этот объект, разработчики могут добавлять новые cookie, метки времени и другие HTTP-статусы.

В таблице ниже перечислены методы для настройки заголовков HTTP-ответа, предоставляемые классом HttpServletResponse:

N.S.Метод & Описание
1String encodeRedirectURL(String url) Кодировать URL, используемый в методе sendRedirect()
2String encodeURL(String url) Кодировать URL, вернув URL с Session ID
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) Добавить заголовок ответа с указанным именем и значением int
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-charset), например UTF-8
17void setContentLength(int len) Указать длину содержимого ответа в HTTP servlets, этот метод используется для установки 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) Указать значение типа int в заголовок name
22void setLocale(Locale loc) Установить языковую среду ответа, если ответ еще не был отправлен
23void setStatus(int sc) Установить код состояния ответа

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

Следующий пример использует методы setIntHeader() и setRefreshHeader() для имитации цифрового часов:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Основной учебник сети (oldtoolbag.com)</title>
</head>
<body>
<h2>Пример автоматической обновляемости</h2>
<%
   // Установить автоматическую обновляемость каждые 5 секунд
   response.setIntHeader("Refresh", 5);
   // Получить текущее время
   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;
   out.println("Текущее время: " + CT + "\n");
%>
</body>
</html>

Сохраните код в файл main.jsp, затем откройте его через браузер. Он будет каждые 5 секунд отображать текущее время системы.

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