Учебники

JSP — ответ сервера

В этой главе мы обсудим ответ сервера в JSP. Когда веб-сервер отвечает на запрос HTTP, ответ обычно состоит из строки состояния, некоторых заголовков ответа, пустой строки и документа. Типичный ответ выглядит так —

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 1.1, которые возвращаются в браузер с веб-сервера. Эти заголовки часто используются в веб-программировании —

S.No. Заголовок и описание
1

Разрешать

Этот заголовок указывает методы запроса ( GET, POST и т. Д.), Которые поддерживает сервер.

2

Cache-Control

Этот заголовок указывает обстоятельства, при которых ответный документ можно безопасно кэшировать. Он может иметь значения public, private или no-cache и т. Д. Public означает, что документ кэшируется, Private означает, что документ предназначен для одного пользователя и может храниться только в приватных (не общих) кэшах, а no-cache означает, что документ никогда не должен кэшироваться.

3

соединение

Этот заголовок инструктирует браузер использовать постоянные HTTP-соединения или нет. Значение close указывает браузеру не использовать постоянные HTTP-соединения, а keep-alive означает использование постоянных соединений.

4

Content-Disposition

Этот заголовок позволяет вам запросить, чтобы браузер попросил пользователя сохранить ответ на диске в файле с заданным именем.

5

Content-Encoding

Этот заголовок определяет способ кодирования страницы во время передачи.

6

Content-Language

Этот заголовок обозначает язык, на котором написан документ. Например, en, en-us, ru и т. Д.

7

Content-Length

Этот заголовок указывает количество байтов в ответе. Эта информация необходима, только если браузер использует постоянное (keep-alive) соединение HTTP.

8

Тип содержимого

Этот заголовок содержит тип MIME ( многоцелевого расширения почты Интернета ) для документа ответа.

9

Истекает

Этот заголовок указывает время, в которое контент должен считаться устаревшим и, следовательно, больше не кэшироваться.

10

Последнее изменение

Этот заголовок указывает, когда документ был последний раз изменен. Затем клиент может кэшировать документ и указать дату в заголовке запроса If-Modified-Since в последующих запросах.

11

Место нахождения

Этот заголовок должен быть включен во все ответы, которые имеют код состояния в 300-х годах. Это уведомляет браузер об адресе документа. Браузер автоматически подключается к этому местоположению и получает новый документ.

12

обновление

Этот заголовок указывает, как скоро браузер должен запросить обновленную страницу. Вы можете указать время в секундах, после которых страница будет обновляться.

13

Retry-After

Этот заголовок можно использовать вместе с ответом 503 (служба недоступна), чтобы сообщить клиенту, как скоро он сможет повторить свой запрос.

14

Set-Cookie

Этот заголовок указывает файл cookie, связанный со страницей.

Разрешать

Этот заголовок указывает методы запроса ( GET, POST и т. Д.), Которые поддерживает сервер.

Cache-Control

Этот заголовок указывает обстоятельства, при которых ответный документ можно безопасно кэшировать. Он может иметь значения public, private или no-cache и т. Д. Public означает, что документ кэшируется, Private означает, что документ предназначен для одного пользователя и может храниться только в приватных (не общих) кэшах, а no-cache означает, что документ никогда не должен кэшироваться.

соединение

Этот заголовок инструктирует браузер использовать постоянные HTTP-соединения или нет. Значение close указывает браузеру не использовать постоянные HTTP-соединения, а keep-alive означает использование постоянных соединений.

Content-Disposition

Этот заголовок позволяет вам запросить, чтобы браузер попросил пользователя сохранить ответ на диске в файле с заданным именем.

Content-Encoding

Этот заголовок определяет способ кодирования страницы во время передачи.

Content-Language

Этот заголовок обозначает язык, на котором написан документ. Например, en, en-us, ru и т. Д.

Content-Length

Этот заголовок указывает количество байтов в ответе. Эта информация необходима, только если браузер использует постоянное (keep-alive) соединение HTTP.

Тип содержимого

Этот заголовок содержит тип MIME ( многоцелевого расширения почты Интернета ) для документа ответа.

Истекает

Этот заголовок указывает время, в которое контент должен считаться устаревшим и, следовательно, больше не кэшироваться.

Последнее изменение

Этот заголовок указывает, когда документ был последний раз изменен. Затем клиент может кэшировать документ и указать дату в заголовке запроса If-Modified-Since в последующих запросах.

Место нахождения

Этот заголовок должен быть включен во все ответы, которые имеют код состояния в 300-х годах. Это уведомляет браузер об адресе документа. Браузер автоматически подключается к этому местоположению и получает новый документ.

обновление

Этот заголовок указывает, как скоро браузер должен запросить обновленную страницу. Вы можете указать время в секундах, после которых страница будет обновляться.

Retry-After

Этот заголовок можно использовать вместе с ответом 503 (служба недоступна), чтобы сообщить клиенту, как скоро он сможет повторить свой запрос.

Set-Cookie

Этот заголовок указывает файл cookie, связанный со страницей.

Объект HttpServletResponse

Объект ответа является экземпляром объекта javax.servlet.http.HttpServletResponse . Так же, как сервер создает объект запроса, он также создает объект для представления ответа клиенту.

Объект ответа также определяет интерфейсы, связанные с созданием новых заголовков HTTP. С помощью этого объекта программист JSP может добавлять новые файлы cookie или метки даты, коды состояния HTTP и т. Д.

Следующие методы могут быть использованы для установки заголовка ответа HTTP в вашей программе сервлета. Эти методы доступны с объектом HttpServletResponse . Этот объект представляет ответ сервера.

S.No. Метод и описание
1

String encodeRedirectURL (String url)

Кодирует указанный URL-адрес для использования в методе sendRedirect или, если кодирование не требуется, возвращает URL-адрес без изменений.

2

String encodeURL (String url)

Кодирует указанный URL-адрес путем включения в него идентификатора сеанса или, если кодирование не требуется, возвращает URL-адрес без изменений.

3

логическое содержит заголовок (строковое имя)

Возвращает логическое значение, указывающее, был ли заданный заголовок ответа уже установлен.

4

логическое isCommitted ()

Возвращает логическое значение, указывающее, был ли принят ответ.

5

void addCookie (Cookie cookie)

Добавляет указанный файл cookie в ответ.

6

void addDateHeader (имя строки, длинная дата)

Добавляет заголовок ответа с указанным именем и датой-значением.

7

void addHeader (String name, String value)

Добавляет заголовок ответа с указанным именем и значением.

8

void addIntHeader (String name, int value)

Добавляет заголовок ответа с указанным именем и целочисленным значением.

9

void flushBuffer ()

Принудительно записывает любой контент в буфере для клиента.

10

сброс void ()

Очищает любые данные, которые существуют в буфере, а также код состояния и заголовки.

11

void resetBuffer ()

Очищает содержимое базового буфера в ответе без очистки заголовков или кода состояния.

12

void sendError (int sc)

Отправляет клиенту сообщение об ошибке, используя указанный код состояния, и очищает буфер.

13

void sendError (int sc, String msg)

Отправляет ответ об ошибке клиенту, используя указанный статус.

14

void sendRedirect (расположение строки)

Отправляет клиенту ответ временного перенаправления, используя указанный URL-адрес местоположения перенаправления.

15

void setBufferSize (int size)

Устанавливает предпочтительный размер буфера для тела ответа.

16

void setCharacterEncoding (String charset)

Устанавливает кодировку символов (кодировка MIME) ответа, отправляемого клиенту, например, в UTF-8.

17

void setContentLength (int len)

Устанавливает длину тела содержимого в ответе в HTTP-сервлетах; этот метод также устанавливает заголовок HTTP Content-Length.

18

void setContentType (тип String)

Устанавливает тип содержимого ответа, отправляемого клиенту, если ответ еще не зафиксирован.

19

void setDateHeader (имя строки, длинная дата)

Устанавливает заголовок ответа с указанным именем и датой-значением.

20

void setHeader (String name, String value)

Устанавливает заголовок ответа с указанным именем и значением.

21

void setIntHeader (имя строки, значение типа int)

Устанавливает заголовок ответа с заданным именем и целочисленным значением.

22

void setLocale (Locale loc)

Устанавливает локаль ответа, если ответ еще не зафиксирован.

23

void setStatus (int sc)

Устанавливает код состояния для этого ответа.

String encodeRedirectURL (String url)

Кодирует указанный URL-адрес для использования в методе sendRedirect или, если кодирование не требуется, возвращает URL-адрес без изменений.

String encodeURL (String url)

Кодирует указанный URL-адрес путем включения в него идентификатора сеанса или, если кодирование не требуется, возвращает URL-адрес без изменений.

логическое содержит заголовок (строковое имя)

Возвращает логическое значение, указывающее, был ли заданный заголовок ответа уже установлен.

логическое isCommitted ()

Возвращает логическое значение, указывающее, был ли принят ответ.

void addCookie (Cookie cookie)

Добавляет указанный файл cookie в ответ.

void addDateHeader (имя строки, длинная дата)

Добавляет заголовок ответа с указанным именем и датой-значением.

void addHeader (String name, String value)

Добавляет заголовок ответа с указанным именем и значением.

void addIntHeader (String name, int value)

Добавляет заголовок ответа с указанным именем и целочисленным значением.

void flushBuffer ()

Принудительно записывает любой контент в буфере для клиента.

сброс void ()

Очищает любые данные, которые существуют в буфере, а также код состояния и заголовки.

void resetBuffer ()

Очищает содержимое базового буфера в ответе без очистки заголовков или кода состояния.

void sendError (int sc)

Отправляет клиенту сообщение об ошибке, используя указанный код состояния, и очищает буфер.

void sendError (int sc, String msg)

Отправляет ответ об ошибке клиенту, используя указанный статус.

void sendRedirect (расположение строки)

Отправляет клиенту ответ временного перенаправления, используя указанный URL-адрес местоположения перенаправления.

void setBufferSize (int size)

Устанавливает предпочтительный размер буфера для тела ответа.

void setCharacterEncoding (String charset)

Устанавливает кодировку символов (кодировка MIME) ответа, отправляемого клиенту, например, в UTF-8.

void setContentLength (int len)

Устанавливает длину тела содержимого в ответе в HTTP-сервлетах; этот метод также устанавливает заголовок HTTP Content-Length.

void setContentType (тип String)

Устанавливает тип содержимого ответа, отправляемого клиенту, если ответ еще не зафиксирован.

void setDateHeader (имя строки, длинная дата)

Устанавливает заголовок ответа с указанным именем и датой-значением.

void setHeader (String name, String value)

Устанавливает заголовок ответа с указанным именем и значением.

void setIntHeader (имя строки, значение типа int)

Устанавливает заголовок ответа с заданным именем и целочисленным значением.

void setLocale (Locale loc)

Устанавливает локаль ответа, если ответ еще не зафиксирован.

void setStatus (int sc)

Устанавливает код состояния для этого ответа.

Пример ответа HTTP-заголовка

В следующем примере будет использоваться метод setIntHeader () для установки заголовка Refresh для имитации цифровых часов —

<%@ page import = "java.io.*,java.util.*" %>

<html>
   
   <head>
      <title>Auto Refresh Header Example</title>
   </head>
   
   <body>
      <center>
         <h2>Auto Refresh Header Example</h2>
         <%
            // Set refresh, autoload time as 5 seconds
            response.setIntHeader("Refresh", 5);
            
            // Get current time
            Calendar calendar = new GregorianCalendar();
            
            String am_pm;
            int hour = calendar.get(Calendar.HOUR);
            int minute = calendar.get(Calendar.MINUTE);
            int second = calendar.get(Calendar.SECOND);
            
            if(calendar.get(Calendar.AM_PM) == 0) 
               am_pm = "AM";
            else
               am_pm = "PM";
               String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
               out.println("Current Time is: " + CT + "\n");
         %>
      </center>
   
   </body>
</html>

Теперь поместите приведенный выше код в main.jsp и попробуйте получить к нему доступ. Это будет отображать текущее системное время через каждые 5 секунд следующим образом. Запустите JSP. Вы получите следующий вывод: —

Auto Refresh Header Example

Current Time is: 9:44:50 PM

Вы можете попробовать работать с другими методами аналогичным образом.