English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Как обсуждалось в предыдущих главах, при ответе веб-сервера на 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 означает, что документ является документом для единственного пользователя и может храниться только в частном (не.shared) кэше, no-cache означает, что документ не должен быть кэширован. |
Connection | Эта заголовочная информация указывает, использует ли браузер постоянное HTTP-соединение. Значение close Это указывает браузеру не использовать постоянное HTTP-соединение, значение keep-alive Это означает использование постоянного подключения. |
Content-Disposition | Эта заголовочная информация позволяет вамrequest браузер, чтобы пользователь сохранял ответ на диск с заданным именем файла. |
Content-Encoding | В процессе передачи эта заголовочная информация определяет способ кодирования страницы. |
Content-Language | Эта заголовочная информация показывает, на каком языке написан документ. Например, en, en-us, ru и т.д. |
Content-Length | Эта заголовочная информация указывает на количество байтов в ответе. Эти данные необходимы только при использовании постоянного (keep-alive) HTTP-соединения. |
Content-Type | Эта заголовочная информация предоставляет тип MIME (Multipurpose Internet Mail Extension) ответного документа. |
Expires | Эта заголовочная информация определяет время истечения срока действия содержимого, после чего контент больше не кэшируется. |
Last-Modified | Эта заголовочная информация указывает на последнее время изменения документа. Затем клиент может кэшировать файл и в последующих запросах через If-Modified-Since Запрос заголовка предоставляет дату. |
Location | Эта заголовочная информация должна быть включена во все ответы с кодом состояния. В течение 300 секунд это будет информировать браузер о URL документа. Браузер автоматически перенастроится на это место и получит новый документ. |
Refresh | Эта заголовочная информация определяет, как браузер должен尽快 запросить обновленную страницу. Вы можете указать количество секунд для обновления страницы. |
Retry-After | Эта заголовочная информация может использоваться вместе с ответом 503 (Service Unavailable - сервис недоступен), что будет информировать клиента о том, через сколько времени он может повторить свой запрос. |
Set-Cookie | Эта заголовочная информация определяет cookie, связанный с страницей. |
Следующие методы могут быть использованы для установки заголовков HTTP ответа в Servlet программе.Эти методы через HttpServletResponse Доступен объект.
Номер | Метод & Описание |
---|---|
1 | String encodeRedirectURL(String url) Кодировать указанный URL для использования в методе sendRedirect или, если кодирование не необходимо, вернуть URL без изменений. |
2 | String encodeURL(String url) Кодировать указанный URL с ID сеанса или, если кодирование не необходимо, вернуть URL без изменений. |
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) Добавить заголовок ответа с указанным именем и целочисленным значением. |
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 кодировка), например, UTF-8. |
17 | void setContentLength(int len) Установить длину контента HTTP Servlet ответа, этот метод устанавливает заголовок 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) Установить заголовок ответа с заданным именем и целочисленным значением. |
22 | void setLocale(Locale loc) Если ответ еще не отправлен, установите область ответа. |
23 | void setStatus(int sc) установить статус кода для этого ответа. |
Вы уже видели метод setContentType() в предыдущем примере, в следующем примере также используется этот метод, а также мы будем использовать setIntHeader() Метод для установки Refresh 头。
//导入必需的 java 库 import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Refresh") //Расширение класса HttpServlet public class Refresh extends HttpServlet { //Метод обработки запросов метода GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Установка времени автоматической перезагрузки 5 секунд response.setIntHeader("Refresh", 5); //Установка типа содержимого ответа response.setContentType("text/html;charset=UTF-8"); //Получение календаря по умолчанию с использованием стандартного часового пояса и языковой среды Calendar cale = Calendar.getInstance(); //Преобразование типа Calendar в тип Date Date tasktime = cale.getTime(); //Установка формата вывода даты SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //Форматирование вывода String nowTime = df.format(tasktime); PrintWriter out = response.getWriter(); String title = "Автоматическое обновление Заголовка настройка - Пример сайта основного учебника"; String docType = "<!DOCTYPE html>\n" out.println(docType + "<html>\n" "<head><title>" + title + "</title></head>\n" "<body bgcolor=\"#f0f0f0\">\n" "<h1 align=\"center\">" + title + "</h1>\n" "<p>Текущее время: " + nowTime + "</p>\n" } // Метод обработки запроса POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Данный тестовый пример находится в проекте TomcatTest, соответствующие настройки web.xml будут такими:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <!-- Имя класса --> <servlet-name>Refresh</servlet-name> <!-- Найденый пакет --> <servlet-class>com.w3codebox.test.Refresh</servlet-class> </servlet> <servlet-mapping> <servlet-name>Refresh</servlet-name> <!-- Адрес посещаемого сайта --> <url-pattern>/TomcatTest/Refresh</url-pattern> </servlet-mapping> </web-app>
Теперь, вызовите上面的 Servlet, и каждый 5 секунд будет отображаться текущее системное время. Достаточно запустить Servlet и подождать несколько секунд, чтобы увидеть следующий результат: