Ответ сервера
После того, как сервер получил запрос от клиента, он обязан дать ответ. Данный ответ состоит из:
- Строка статуса
- Заголовки ответа
- HTML документ
Строка статуса состоит из версии протокола HTTP, кода ответа (200, 502 и т.д.) и небольшого сообщения, которое описывает код ответа.
Ниже приведен список часто используемых заголовков ответа от сервера:
Заголовок | Описание |
---|---|
Allow | Определяет методы поддерживаемые сервером (POST, GET и т.д.) |
Cache-Control | Определяет условия, при которых документ ответа может быть кеширован (public, no-cache и т.д.) |
Connection | Дает команду браузеру: использовать HTTP-соединение или нет. |
Content-Encoding | Определяет способ кодировки страницы во время передачи. |
Content-Language | Указывает язык документа. |
Content-Length | Указывает количество байтов в ответе. |
Content-Type | Указывает MIME тип документа. |
Expires | Указывает время, после которого данные должны считаться не актуальными. |
Last-Modified | Указывает, когда в документ были внесены крайние изменения. |
Refresh | Определяет, через какое время браузер должен запрашивать обновление страницы. |
Retry-After | Указывает, через какое время клиент должен повторить запрос, если произошла ошибка на стороне сервера. |
Set-Cookie | Указывает cookie-файл, который относится к текущей странице. |
Для получения доступа к данным параметрам, при работе с сервлетами, мы можем использовать методы класса HttpServletResponse.
Ниже приведен список часто используемых методов данного класса:
№ | Метод и его описание |
---|---|
1 | String encodeRedirectURL(String url)Кодирует указанный URL для его использования в методе sendRedirect. |
2 | String encodeURL(String url)Кодирует указанный 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) Устанавливает набор кодировок ответа. |
17 | void setContentLength(int len) Устанавливает длину тела ответа. |
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 setStatus(int sc) Устанавливает код статуса ответа. |
Рассмотрим простой пример.
В качестве основы возьмем проект из данной статьи:
Класс ServletResponseDemo
package net.proselyte.servletstutorial;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Simple servlet that demonstrates servlet response in action.
*
* @author Eugene Suleimanov
*/
public class ServletResponseDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
String title = "HTTP Servlet Response Demo";
String docType = "
<
!DOCTYPE html
>
";
writer.println(docType +
"
<
html
>
\n" + "
<
head
>
<
title
>
" + title + "
<
/title
>
<
/head
>
\n" +
"
<
body
>
" + response.getContentType() + "
<
/body
>
");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Файл web.xml
<
!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"
>
<
web-app
>
<
display-name
>
Servlets Tutorial
<
/display-name
>
<
servlet
>
<
servlet-name
>
SimpleServlet
<
/servlet-name
>
<
servlet-class
>
net.proselyte.servletstutorial.SimpleServlet
<
/servlet-class
>
<
/servlet
>
<
servlet
>
<
servlet-name
>
StatusCodeDemo
<
/servlet-name
>
<
servlet-class
>
net.proselyte.servletstutorial.StatusCodeDemo
<
/servlet-class
>
<
/servlet
>
<
servlet
>
<
servlet-name
>
ServletRequestDemo
<
/servlet-name
>
<
servlet-class
>
net.proselyte.servletstutorial.ServletRequestDemo
<
/servlet-class
>
<
/servlet
>
<
servlet
>
<
servlet-name
>
ServletResponseDemo
<
/servlet-name
>
<
servlet-class
>
net.proselyte.servletstutorial.ServletResponseDemo
<
/servlet-class
>
<
/servlet
>
<
servlet-mapping
>
<
servlet-name
>
SimpleServlet
<
/servlet-name
>
<
url-pattern
>
/SimpleServlet
<
/url-pattern
>
<
/servlet-mapping
>
<
servlet-mapping
>
<
servlet-name
>
StatusCodeDemo
<
/servlet-name
>
<
url-pattern
>
/StatusCodeDemo
<
/url-pattern
>
<
/servlet-mapping
>
<
servlet-mapping
>
<
servlet-name
>
ServletRequestDemo
<
/servlet-name
>
<
url-pattern
>
/ServletRequestDemo
<
/url-pattern
>
<
/servlet-mapping
>
<
servlet-mapping
>
<
servlet-name
>
ServletResponseDemo
<
/servlet-name
>
<
url-pattern
>
/ServletResponseDemo
<
/url-pattern
>
<
/servlet-mapping
>
<
/web-app
>
Выполним следующую команду:
mvn tomcat7:run
Открываем браузер и переходим по ссылке:
http://localhost:8088/ServletResponseDemo
В результате получим следующую страницу: