Объект Response в основном передает результаты, обработанные контейнером JSP, обратно клиенту. Вы можете установить статус HTTP и отправить данные клиенту через переменную ответа, например файлы cookie, информацию заголовка файла HTTP и т. д.
Типичный ответ выглядит так:
HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ...HeaderN: ... (пустая строка)<!doctype ...><html><head>...</head><body> ... </body></html>
Строка состояния содержит информацию о версии HTTP, например HTTP/1.1, код состояния, например 200, и очень короткое сообщение, соответствующее коду состояния, например ОК.
В следующей таблице приведены наиболее полезные части заголовков ответов HTTP 1.1, которые вы часто встретите в сетевом программировании:
заголовок ответа | описывать |
---|---|
Позволять | Укажите методы запроса, поддерживаемые сервером (GET, POST и т. д.) |
Кэш-Контроль | Указывает обстоятельства, при которых документы ответов могут быть безопасно кэшированы. Обычно это значение public , Private или no-cache и т. д. Открытый означает, что документ можно кэшировать, а частный означает, что документ предоставляется только одному пользователю и может использовать только частный кэш. No-cache означает, что документ не кэшируется. |
Связь | Указывает браузеру, следует ли использовать постоянные HTTP-соединения. Значение close указывает браузеру не использовать постоянные соединения HTTP, а значение keep-alive означает использование постоянных соединений. |
Содержание-Расположение | Пусть браузер попросит пользователя сохранить ответ на диске под заданным именем. |
Кодирование контента | Укажите правила кодирования страницы при передаче |
Язык контента | Язык, используемый для описания документа, например en, en-us, ru и т. д. |
Длина контента | Указывает количество байтов в ответе. Полезно только в том случае, если браузер использует поддерживающие HTTP-соединения. |
Тип контента | Указывает тип MIME, используемый документом. |
Срок действия истекает | Укажите срок действия и удалите из кеша |
Последнее изменение | Указывает, когда документ был последний раз изменен. Клиент может кэшировать документ и предоставлять заголовок запроса If-Modified-Since в последующих запросах. |
Расположение | В течение 300 секунд, включая все адреса ответа с кодом состояния, браузер автоматически повторно подключится и получит новые документы. |
Обновить | Указывает, как часто браузер запрашивает обновления страницы. |
Повторить попытку после | Используется с кодом 503 (Служба недоступна), чтобы сообщить пользователю, сколько времени пройдет, прежде чем на запрос будет получен ответ. |
Set-Cookie | Укажите файл cookie, соответствующий текущей странице. |
Объект ответа является экземпляром класса javax.servlet.http.HttpServletResponse. Точно так же, как сервер создает объект запроса, он также создает ответ клиента.
Объект ответа определяет интерфейс для обработки создания заголовков HTTP. Используя этот объект, разработчики могут добавлять новые файлы cookie или временные метки, коды состояния HTTP и многое другое.
В следующей таблице перечислены методы, используемые для установки заголовков ответа HTTP. Эти методы предоставляются классом HttpServletResponse.
СН | Метод и описание |
---|---|
1 | String encodeRedirectURL(String url) кодирует URL-адрес, используемый методом sendRedirect(). |
2 | String encodeURL(String url) кодирует URL-адрес и возвращает URL-адрес, содержащий идентификатор сеанса. |
3 | логическое значение containsHeader(имя строки) возвращает, существует ли указанный заголовок ответа. |
4 | boolean isCommited() возвращает, был ли ответ отправлен клиенту. |
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 | voidlushBuffer() записывает содержимое любого кеша клиенту |
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) устанавливает тип содержимого ответа, если ответ еще не был отправлен. |
19 | void setDateHeader(String name, long date) устанавливает имя и содержимое заголовка ответа, используя указанное имя и значение. |
20 | void setHeader(String name, String value) устанавливает имя и содержимое заголовка ответа, используя указанное имя и значение. |
двадцать один | void setIntHeader(String name, int value) устанавливает имя и содержимое заголовка ответа, используя указанное имя и значение. |
двадцать два | void setLocale(Locale loc) устанавливает локаль ответа, если ответ еще не был отправлен |
двадцать три | void setStatus(int sc) устанавливает код состояния ответа |
В следующем примере используются методы setIntHeader() и метод setRefreshHeader() для имитации цифровых часов:
<%@ page import="java.io.*,java.util.*" %><html><head><title>Пример автоматического обновления заголовка</title></head><body><center><h2 >Пример автоматического обновления заголовка</h2><% //Устанавливаем автоматическое обновление каждые 5 секунд response.setIntHeader("Refresh", 5 //Получаем текущее время Calendar Calendar = new GregorianCalendar(); am_pm; int час = Calendar.get(Calendar.HOUR); int минута = Calendar.get(Calendar.MINUTE); int секунда = Calendar.get(Calendar.SECOND); if(calendar.get(Calendar.AM_PM) == 0) am_pm = "AM"; else am_pm = "PM"; String CT = час+":"+ минута +":"+ секунда +" "+ am_pm; out.println("Текущее время: " + CT + "n"); %></center></body></html>
Сохраните приведенный выше код как main.jsp и получите к нему доступ через браузер. Он будет отображать текущее системное время каждые 5 секунд.
Результаты бега следующие:
Пример автоматического обновления заголовка. Текущее время: 21:44:50.
Вы также можете изменить приведенный выше код самостоятельно и попробовать другие методы, чтобы глубже понять его.