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-демонстрацию:

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

Другие расширения