В данной статье мы рассмотрим клиентские запросы при работе с сервлетами.
Когда мы пытаемся получить доступ к любой веб-странице мы оправляем запрос на сервер, содержащий определённую информацию, которая не может быть обработана, так как является частью заголовка 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
В результате мы получим следующую страницу:
На этом мы заканчиваем изучение клиентского запроса.
В следующей статье мы рассмотрим ответ сервера при работе с сервлетами.