В данной статье мы рассмотрим HTTP коды при работе с сервлетами.
Более подробно с HTTP можно ознакомиться в данном цикле статей. Сейчас мы просто пройдёмся по основным моментам.
HTTP запрос и HTTP ответ имеют следующий формат:
- Строка статуса
- Строка заголовка
- Пустая линия
- Тело сообщения (опционально)
Коды статусов делятся на несколько групп:
| № | Код и описание |
|---|---|
| 1 | 1xx: Информационное Означает, что запрос был успешно получен и идёт его обработка. |
| 2 | 2xx: Успешное выполнение Запрос был успешно получен, понят и принят. |
| 3 | 3xx: Перенаправление Последующие действия должны быть предприняты для выполнения запроса. |
| 4 | 4xx: Ошибка на стороне клиент Запрос содержит синтаксическую ошибку, либо не корректен. |
| 5 | 5xx: Ошибка на стороне сервера Сервер не может выполнить обработать корректный запрос. |
Ниже приведен список некоторых кодов и их значения:
1ХХ: Информационные
| Сообщение | Описание |
|---|---|
| 100 Continue | Только часть запроса была получена сервером, но на данный момент запрос не был отклонён. Клиент должен продолжать запрос. |
| 101 Switching Protocols | Сервер выбирает протокол. |
2ХХ: Успешное выполнение
| Сообщение | Описание |
|---|---|
| 200 OK | Запрос успешен |
| 201 Created | Запрос выполнен, новый ресурс создан. |
| 202 Accepted | Запрос принят, но обработка не завершена. |
| 203 Non-authoritative Information | Информация в заголовке получена из локальной или сторонней копии, а не от оригинального сервера. |
| 204 No Content | Код статуса и заголовок переданы в ответе, но данные отсутствуют. |
| 205 Reset Content | Браузер должен очистить форму для этой транзакции для дополнительного ввода. |
| 206 Partial Content | Сервер возвращает часть данных. Используется для ответа на запрос, содержащий заголовок Content-Range. |
3ХХ: Перенаправление
| Сообщение | Описание |
|---|---|
| 300 Multiple Choices | Список ссылок. Пользователь может выбрать ссылку и перейти к локации. Максимальное количество ссылок – 5. |
| 301 Moved Permanently | Запрашиваемая страница была перенесена на новую URL. |
| 302 Found | Запрашиваемая страница была временно перенесена на новую URL. |
| 303 See Other | Запрашиваемая страница может быть найдена по другой URL. |
| 304 Not Modified | Код ответа для заголовка If-Modifier-Since или If-None-Match, где URL не была изменена с крайней даты обновления. |
| 305 Use Proxy | Доступ к запрашиваемой странице должен быть запрошен через прокси, который указан в заголовке Location. |
| 306 Unused | Данный код использовался в предыдущей версии, но на данный момент он не используется, а сам код был зарезервирован. |
| 307 Temporary Redirect | Запрашиваемая страница была временно перенесена на новую URL. |
4ХХ: Ошибка на стороне клиента
| Сообщение | Описание |
|---|---|
| 400 Bad Request | Сервер не понял запрос. |
| 401 Unauthorized | Запрашиваемая страница требует имя пользователя и пароль. |
| 402 Payment Required | На данный момент клиент не может использовать данный код. |
| 403 Forbidden | Доступ к запрашиваемой странице запрещён. |
| 404 Not Found | Сервер не может найти запрашиваемую страницу. |
| 405 Method Not Allowed | Метод, указанный в запросе, является недопустимым. |
| 406 Not Acceptable | Сервер генерирует ответ, который не может быть принят клиентом. |
| 407 Proxy Authentication Required | Клиент должен авторизоваться с помощью прокси-сервера прежде чем запрос сможет быть обработан. |
| 408 Request Timeout | Запрос длился дольше, чем сервер был готов ждать. |
| 409 Conflict | Запрос не может быть завершён из-за конфликта. |
| 410 Gone | Запрашиваемая страница больше недоступна. |
| 411 Length Required | Элемент “Content-Length” не определён. Сервер не может принять запрос без данного элемента. |
| 412 Precondition Failed | Сервер признал предусловия запроса ошибочными. |
| 413 Request Entity Too Large | Сервер не примет данный запрос, так как тело запроса слишком большое. |
| 414 Request-url Too Long | Сервер не примет данный запроса, так как URL слишком большая (длинная). |
| 415 Unsupported Media Type | Сервер не примет данный запрос, так как данный тип медиа файла не поддерживается. |
| 416 Requested Range Not Satisfiable | Запрашиваемый диапазон байтов недоступен и находится за пределами диапазона. |
| 417 Expectation Failed | Ожидания, переданные в заголовке запроса не могут быть удовлетворены данным сервером. |
5ХХ: Ошибка на стороне сервера
| Сообщение | Описание |
|---|---|
| 500 Internal Server Error | Запрос не выполнен. Сервер попал в непредвиденные условия. |
| 501 Not Implemented | Запрос не выполнен. Сервер не поддерживает запрашиваемый функционал. |
| 502 Bad Gateway | Запрос не выполнен. Сервер получил недоступный запрос от следующего сервера. |
| 503 Service Unavailable | Запрос не выполнен. На данный момент сервер перегружается, или не работает. |
| 504 Gateway Timeout | Соединение закрыто по времени. |
| 505 HTTP Version Not Supported | Сервер не поддерживает данную версию протокола HTTP. |
Для того чтобы установить HTTP коды в нашем сервлете у нас есть несколько методов:
| № | Метод и его описание |
|---|---|
| 1 | public void setStatus (int statusCode)
Данный метод позволяет нам установить любой код. Принимает целочисленное значение кода статуса в качестве аргумента. |
| 2 | public void sendRedirect(String url)
Генерирует ответ 302 с заголовком Location и ссылкой на новый документ. |
| 3 | public void sendError(int code, String message)
Отправляет ошибку с коротким сообщением, которое автоматически форматируется внутри HTML документа и отправляется клиенту. |
Рассмотрим простой пример.
В качестве основы возьмём проект из данной статьи
Класс StatusCodeDemo
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;
/**
* Simple Servlet that demonstrates sending errors using sendError method.
*
* @author Eugene Suleimanov
*/
public class StatusCodeDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendError(403, "Access denied!!!");
}
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-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>
</web-app>
После этого выполним в консоли команду:
mvn tomcat7:run
После запуска сервера откроем браузер и перейдём по ссылке:
http://localhost:8088/StatusCodeDemo
В результате мы получим следующую страницу:
На этом мы заканчиваем изучение HTTP кодов при работе с сервлетами.
В следующей статье мы рассмотрим запрос клиента.
![]()

You must be logged in to post a comment.