JSP Ответ сервера
Объект Response в основном отправляет результаты, обработанные контейнером JSP, обратно клиенту. Вы можете использовать переменную response для установки статуса HTTP и отправки данных клиенту, таких как Cookies, информация заголовка 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 означает, что документ не кэшируется. |
| Соединение | Сообщает браузеру, использовать ли постоянное 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заголовок запроса. |
| Расположение | В течение 300 секунд содержит адрес ответа для кода состояния; браузер автоматически переподключится и получит новый документ. |
| Обновить | Указывает, как часто браузер должен запрашивать обновлённую страницу. |
| Retry-After | Используется с кодом 503 (Service Unavailable), чтобы сообщить пользователю, сколько времени осталось до ответа на запрос. |
| Set-Cookie | Указывает на cookie, соответствующий текущей странице. |
Класс HttpServletResponse
Объект response является экземпляром класса javax.servlet.http.HttpServletResponse. Подобно тому как сервер создаёт объект запроса, он также создаёт ответ клиенту.
Объект response определяет интерфейс для обработки и создания HTTP-заголовков. Используя этот объект, разработчики могут добавлять новые cookie или отметки времени, а также коды состояния HTTP и т. д.
В следующей таблице перечислены методы, используемые для установки HTTP-заголовков ответа, которые предоставляются классом HttpServletResponse:
| S.N. | Метод & Описание |
|---|---|
| 1 | String encodeRedirectURL(String url)Кодирует URL, используемый методом sendRedirect(). |
| 2 | String encodeURL(String url)Кодирует URL и возвращает URL, содержащий 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-сервлетах. Этот метод используется для установки HTTP-заголовка Content-Length. |
| 18 | void setContentType(String type)Устанавливает тип содержимого ответа, если ответ ещё не зафиксирован. |
| 19 | void setDateHeader(String name, long date)Устанавливает имя и дату заголовка ответа, используя указанные name и date. |
| 20 | void setHeader(String name, String value)Устанавливает имя и содержимое заголовка ответа, используя указанные name и value. |
| 21 | void setIntHeader(String name, int value)Устанавливает значение int для заголовка с именем name. |
| 22 | void setLocale(Locale loc)Устанавливает локаль ответа, если ответ ещё не зафиксирован. |
| 23 | void 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>Example(example.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 секунд.
Мы можем посмотреть следующую GIF-демонстрацию:

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