Сервлеты - коды статуса 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