Сервлеты - коды статуса HTTP
Формат сообщений HTTP-запроса и HTTP-ответа аналогичен и будет иметь следующую структуру:
Начальная строка состояния + CRLF (возврат каретки + перевод строки, т.е. новая строка)
Ноль или более строк заголовка + CRLF
Пустая строка, то есть CRLF
Необязательное тело сообщения, такое как файл, данные запроса или результат запроса.
Например, заголовок ответа сервера выглядит следующим образом -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
Строка состояния состоит из версии HTTP (HTTP / 1.1 в примере), кода состояния (200 в примере) и очень короткого сообщения, соответствующего коду состояния (OK в примере).
Ниже приведен список кодов состояния HTTP и связанных сообщений, которые могут быть возвращены веб-сервером.
Код | Сообщение | Описание |
---|---|---|
100 | Продолжить | Сервер получил только часть запроса, но пока он не был отклонен, клиент должен продолжить выполнение запроса. |
101 | Переключение протоколов | Сервер переключает протокол. |
200 | Хорошо | Запрос в порядке |
201 | Создано | Запрос выполнен, и новый ресурс создан |
202 | Принятый | Запрос принят в обработку, но обработка не завершена. |
203 | Неавторизованная информация | |
204 | Без содержания | |
205 | Сбросить содержимое | |
206 | Частичное содержание | |
300 | Множественный выбор | Список ссылок. Пользователь может выбрать ссылку и перейти в это место. Максимум пять адресов |
301 | переехал навсегда | Запрошенная страница перемещена на новый URL |
302 | Найденный | Запрошенная страница временно перемещена на новый URL |
303 | См. Другое | Запрошенная страница может быть найдена по другому URL-адресу |
304 | Не изменено | |
305 | Используй прокси | |
306 | Неиспользованный | Этот код использовался в предыдущей версии. Он больше не используется, но код зарезервирован |
307 | Временное перенаправление | Запрошенная страница временно перемещена на новый URL. |
400 | Плохой запрос | Сервер не понял запрос |
401 | Неавторизованный | Запрошенная страница требует имя пользователя и пароль |
402 | Требуется оплата | Вы пока не можете использовать этот код |
403 | Запрещено | Доступ к запрошенной странице запрещен |
404 | не обнаружена | Сервер не может найти запрошенную страницу. |
405 | метод не разрешен | Метод, указанный в запросе, не разрешен. |
406 | Неприемлимо | Сервер может только генерировать ответ, который не принимается клиентом. |
407 | Требуется проверка подлинности прокси | Вы должны пройти аутентификацию на прокси-сервере, прежде чем этот запрос будет обработан. |
408 | Тайм-аут запроса | Запрос занял больше времени, чем сервер был готов ждать. |
409 | Конфликт | Запрос не может быть выполнен из-за конфликта. |
410 | Прошло | Запрошенная страница больше не доступна. |
411 | Требуемая длина | "Content-Length" не определено. Без него сервер не примет запрос. |
412 | Предварительное условие не выполнено | Предварительное условие, указанное в запросе, оценивается сервером как ложное. |
413 | Слишком большой объект запроса | Сервер не примет запрос, поскольку объект запроса слишком велик. |
414 | Запрос-url слишком длинный | Сервер не примет запрос, потому что URL-адрес слишком длинный. Происходит при преобразовании запроса «post» в запрос «get» с длинной информацией запроса. |
415 | Неподдерживаемый тип носителя | Сервер не примет запрос, потому что этот тип носителя не поддерживается. |
417 | Ожидание не удалось | |
500 | Внутренняя ошибка сервера | Запрос не был выполнен. Сервер обнаружил непредвиденное состояние. |
501 | Не реализованы | Запрос не был выполнен. Сервер не поддерживает требуемые функции. |
502 | Плохой шлюз | Запрос не был выполнен. Сервер получил недопустимый ответ от вышестоящего сервера. |
503 | Сервис недоступен | Запрос не был выполнен. Сервер временно перегружен или не работает. |
504 | Тайм-аут шлюза | Истекло время ожидания шлюза. |
505 | Версия HTTP не поддерживается | Сервер не поддерживает версию «http-протокол». |
Способы установки кода состояния HTTP
Следующие методы можно использовать для установки кода состояния HTTP в вашей программе сервлета. Эти методы доступны с объектом HttpServletResponse .
Sr.No. | Метод и описание |
---|---|
1 | public void setStatus ( int statusCode ) Этот метод устанавливает произвольный код состояния. Метод setStatus принимает в качестве аргумента int (код состояния). Если ваш ответ включает специальный код состояния и документ, обязательно вызовите setStatus перед фактическим возвратом любого содержимого с помощью PrintWriter . |
2 | public void sendRedirect(String url) Этот метод генерирует ответ 302 вместе с заголовком Location, содержащим URL-адрес нового документа. |
3 | public void sendError(int code, String message) Этот метод отправляет код состояния (обычно 404) вместе с коротким сообщением, которое автоматически форматируется внутри HTML-документа и отправляется клиенту. |
Пример кода состояния HTTP
Ниже приведен пример, в котором клиентскому браузеру будет отправлен код ошибки 407, а браузер покажет вам «Требуется аутентификация !!!» сообщение.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Теперь вызов вышеуказанного сервлета отобразит следующий результат:
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29