Руководство по Servlets. Ответ сервера.

В данной статье мы рассмотрим ответ сервера при работе с сервлетами.

После того как сервер получил запрос от клиента он обязан дать ответ. Данный ответ состоит из:

  • Строка статуса
  • Заголовки ответа
  • 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

В результате мы получим следующую страницу:

servletResponseDemo

На этом мы заканчиваем изучение ответа сервера при работе с сервлетами.

В следующей статье мы рассмотрим заполнение форм.