В данной статье мы рассмотрим работу с cookie файлами при работе с сервлетами.
Cookie – это текстовый файлы, которые хранятся на локальной машине клиента, содержащий различную информацию. Она используется для отслеживания различных данных.
Для того, чтобы определить конкретного пользователя нам необходимо:
- Отправить набор данных cookie в браузер клиента.
- Браузер сохраняет эту информацию на локальной машине.
- При отправке запроса на сервер, клиент, также, отправляет данные из cookie файла, которые относятся к этому серверу.
Обычно, cookie передаются в заголовке HTTP сообщения.
Например:
HTTP/1.1 200 OK
Date: Fri, 27 March 2000 11:08:57 GMT
Server: nginx
Set-Cookie: user_id=100500; path=/; domain=proselyte.net
Connection: close
Content-Type: text/html
Мы имеем возможность определять, какие именно данные мы хотим сохранить в cookie файле.
Для этого мы можем использовать класс Cookie.
Данный класс содержит следующие методы:
№ | Метод и его описание |
---|---|
1 | public void setDomain(String pattern)
Устанавливает домен запроса, например, proselyte.net/ |
2 | public String getDomain()
Возвращает домен запроса, например, proselyte.net |
3 | public void setValue(String newValue)
Устанавливает значение cookie. |
4 | public String getValue()
Возвращает значение cookie. |
5 | public String getName()
Возвращает имя cookie. |
6 | public void setMaxAge(int expiry)
Устанавливает максимальное время в секундах, после которого cookie перестанут быть валидными. |
7 | public int getMaxAge()
Возвращает максимальное время в секундах, после которого cookie перестанут быть валидными. |
8 | public void setPath(String uri)
Устанавливает путь cookie. |
9 | public String getPath()
Возвращает путь cookie. |
10 | public void setSecure(boolean flag)
Указывает, должны ли cookie передаваться только по защищённому соединению. |
11 | public void setComment(String purpose)
Устанавливает комментарий, который описывает cookie. |
12 | public String getComment()
Возвращает комментарий, который описывает cookie. |
Для понимания того, как это работает на практике, рассмотрим простой пример.
За основу возьмём пример из данной статьи.
Класс CookieDemo
package net.proselyte.servletstutorial;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
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.Date;
/**
* Simple Servlet that demonstrates work with {@link Cookie} class.
*
* @author Eugene Suleimanov
*/
public class CookieDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie sessionId = new Cookie("session_id", request.getRemoteAddr() + new Date().toString());
Cookie language = new Cookie("language", request.getLocale().toString());
response.addCookie(sessionId);
response.addCookie(language);
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
String title = "Cookies Demo";
String docType = "<!DOCTYPE html>";
Cookie[] cookies = request.getCookies();
writer.println(docType + "<html><head><title>" + title + "</title></head><body>");
if (cookies != null) {
writer.println("Cookies");
for (int i = 0; i < cookies.length; i++) {
writer.println("<hr/>");
writer.println("Name: " + cookies[i].getName());
writer.println("<br/>");
writer.println("Value: " + cookies[i].getValue());
writer.println("<hr/>");
}
} else {
writer.println("No cookies");
}
writer.println("</body></html>");
}
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>CookieDemo</servlet-name>
<servlet-class>net.proselyte.servletstutorial.CookieDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CookieDemo</servlet-name>
<url-pattern>/CookieDemo</url-pattern>
</servlet-mapping>
</web-app>
Выполним в консоли следующую команду:
mvn tomcat7:run
И перейдём по ссылке:
http://localhost:8088/CookieDemo
Сначала мы получим такую страницу:
Но, после обновления, мы увидим следующее:
На этом мы заканчиваем изучение cookie при работе с сервлетами.
В следующей статье мы рассмотрим доступ к БД с помощью сервлетов.