Запрос клиента
Когда мы пытаемся получить доступ к любой веб-странице, мы оправляем запрос на сервер, который содержит определенную информацию, которая не может быть обработана, так как является частью заголовка HTTP-запроса.
Ниже приведен список часто используемых атрибутов заголовка:
Заголовок | Описание |
---|---|
Accept | Определяет MIME типы. которые могут быть обработаны браузером. |
Accept-Charset | Определяет, кодировки, который могут быть отображены в браузере. |
Accept-Encoding | Указывает тип кодировки, которые могут быть обработаны. |
Accept-Language | Указывает предпочитаемый клиентом язык. |
Authorization | Используется для самоидентификации при доступе к страницам, которые защищены паролем. |
Connection | Указывает, может ли клиент работать с HTTP-соедине- ниями. |
Content-Length | Применяется только для POST заголовков и определяет размер передаваемых данных в байтах. |
Cookie | Возвращает cookie серверу, которые были предварительно отправлены в браузер. |
Host | Определяет хост и порт, которые указаны в URL. |
If-Modified-Since | Указывает, что клиент хочет получить данные о странице только, если она была изменена с момента крайнего посещения. Если она не была изменена, от сервера приходит код ответа 304. |
If-Unmodified-Since | Указывает, что операция должна быть выполнена только, если документ старше, чем указано. |
Referer | Указывает URL страницы, с которой мы обращаемся к следующей странице. |
User-Agent | Определяет браузер или клиента, который выполняет запрос (Firefox, Chrome и т.д.) |
Работая с сервлетами, мы можем получить доступ к заголовкам HTTP-документа.
Для этого мы можем использовать методы класса HttpServletRequest.
Базовые методы указаны ниже:
№ | Метод и его описание |
---|---|
1 | Cookie[] getCookies() Возвращает массив Cookie, который хранится в заголовке. |
2 | Enumeration getAttributeNames() Возвращает перечисление, которое содержит имена всех доступных атрибутов данного запроса. |
3 | Enumeration getHeaderNames() Возвращает перечисление имен всех заголовков в данном запросе. |
4 | HttpSession getSession() Возвращает сессию, связан- ную с данным запросом. Если сессия не создана – соз-дает новую сессию. |
5 | Object getAttribute(String name) Возвращает значение указанного аттрибута заголовка. |
6 | String getProtocol() Возвращает имя и версию протокола запроса. |
7 | boolean isSecure() Возвращает, является ли запрос безопасным или нет (HTTPS). |
8 | int getServerPort() Возвращает номер порта, который получил текущий запрос. |
Рассмотрим простой пример создания клиентского запроса.
В качестве основы возьмем приложение из данной статьи.
Класс ServletRequestDemo
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;
import java.util.Enumeration;
/**
* Simple servlet that demonstrates {@link HttpServletRequest} in action.
*
* @author Eugene Suleimanov
*/
public class ServletRequestDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
String title = "HTTP Request Example";
String contentType = "
<
!DOCTYPE html
>
\n";
writer.println(contentType + "
<
html
>
\n" +
"
<
head
>
<
title
>
" + title + "
<
/title
>
<
/head
>
" +
"
<
body
>
" +
"
<
h1
>
HTTP Servlet Request Example
<
/h1
>
"
);
Enumeration headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
String parameterName = (String) headers.nextElement();
String parameterValue = request.getHeader(parameterName);
writer.println("
<
h3
>
" + parameterName + ": " + parameterValue + "
<
/h3
>
" + "\n");
}
writer.println("
<
/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-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
>
<
/web-app
>
Выполним в консоли следующую команду:
mvn tomcat7:run
И перейдем по ссылке:
http://localhost:8088/ServletRequestDemo
В результате получим следующую страницу: