В данной статье мы рассмотрим ответ сервера при работе с сервлетами.
После того как сервер получил запрос от клиента он обязан дать ответ. Данный ответ состоит из:
- Строка статуса
- Заголовки ответа
- 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
В результате мы получим следующую страницу:
На этом мы заканчиваем изучение ответа сервера при работе с сервлетами.
В следующей статье мы рассмотрим заполнение форм.