English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Объект ответа 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, соответствующее текущей странице |
Объект response является примером класса javax.servlet.http.HttpServletResponse. Как сервер создает объект request, так и он создает клиентский ответ.
Объект response определяет интерфейс обработки создания HTTP-заголовков. Используя этот объект, разработчики могут добавлять новые cookie, метки времени и другие HTTP-статусы.
В таблице ниже перечислены методы для настройки заголовков HTTP-ответа, предоставляемые классом HttpServletResponse:
N.S. | Метод & Описание |
---|---|
1 | String encodeRedirectURL(String url) Кодировать URL, используемый в методе sendRedirect() |
2 | String encodeURL(String url) Кодировать URL, вернув URL с Session ID |
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) Добавить заголовок ответа с указанным именем и значением int |
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-charset), например UTF-8 |
17 | void setContentLength(int len) Указать длину содержимого ответа в HTTP servlets, этот метод используется для установки 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) Указать значение типа int в заголовок name |
22 | void setLocale(Locale loc) Установить языковую среду ответа, если ответ еще не был отправлен |
23 | void setStatus(int sc) Установить код состояния ответа |
Следующий пример использует методы 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 секунд отображать текущее время системы.
Вы также можете самостоятельно изменить приведенный выше код, попробовать использовать другие методы, и вы получите более глубокое понимание.