Я пытаюсь отслеживать файлы cookie, добавленные в каждый сервлет, кумулятивным способом, используя метод getCookies () объекта запроса, но, к моему удивлению, при самом первом сервлете объект запроса знает обо всех файлах cookie, которые присутствуют в остальныхиз сервлетов.Разве это не должно быть показано в совокупности?Как объект запроса может получить остальные файлы cookie в других сервлетах, когда он находится только на первом сервлете?
Я пытался проверить его на различных серверах, таких как Weblogic и Tomcat, но все показываюттот же результат.Я получаю тот же вывод, хотя я пытаюсь использовать любой из методов include () или forward () для диспетчера запросов.
код для сервлета1
@WebServlet("/serv1")
public class Servlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Cookie c1 = new Cookie("ck1", "Servlet 1 cookie 1");
Cookie c2 = new Cookie("ck2", "Servlet 1 cookie 2");
response.addCookie(c1);
response.addCookie(c2);
System.out.println("--------Cookies at Servlet 1 are------------");
Cookie[] cookies = request.getCookies();
for(Cookie i: cookies) {
System.out.println(i.getName() + " " + i.getValue());
out.println(i.getName() + " " + i.getValue());
}
RequestDispatcher requestDispatcher = request.getRequestDispatcher("./serv2");
requestDispatcher.include(request, response);
}
}
код для сервлета2
@WebServlet("/serv2")
public class Servlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Cookie c3 = new Cookie("ck3", "Servlet 2 cookie 3");
Cookie c4 = new Cookie("ck4", "Servlet 2 cookie 4");
response.addCookie(c3);
response.addCookie(c4);
System.out.println("--------Cookies at Servlet 2 are------------");
Cookie[] cookies = request.getCookies();
for(Cookie i: cookies) {
System.out.println(i.getName() + " " + i.getValue());
out.println(i.getName() + " " + i.getValue());
}
RequestDispatcher requestDispatcher = request.getRequestDispatcher("./serv3");
requestDispatcher.include(request, response);
}
}
код для сервлета3
@WebServlet("/serv3")
public class Servlet3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie c5 = new Cookie("ck5", "Servlet 3 cookie 5");
Cookie c6 = new Cookie("ck6", "Servlet 3 cookie 6");
response.addCookie(c5);
response.addCookie(c6);
System.out.println("--------Cookies at Servlet 3 are------------");
Cookie[] cookies = request.getCookies();
for(Cookie i: cookies) {
System.out.println(i.getName() + " " + i.getValue());
}
}
}
удаление файлов cookie
System.out.println("Deleting the cookies...");
for(Cookie i: cookies) {
i.setValue("");
i.setMaxAge(0);
}
ожидаемый результат в консоли должен быть следующим:
--------Cookies at Servlet 1 are------------
ck1 Servlet 1 cookie 1
ck2 Servlet 1 cookie 2
--------Cookies at Servlet 2 are------------
ck1 Servlet 1 cookie 1
ck2 Servlet 1 cookie 2
ck3 Servlet 2 cookie 3
ck4 Servlet 2 cookie 4
--------Cookies at Servlet 3 are------------
ck1 Servlet 1 cookie 1
ck2 Servlet 1 cookie 2
ck3 Servlet 2 cookie 3
ck4 Servlet 2 cookie 4
ck5 Servlet 3 cookie 5
ck6 Servlet 3 cookie 6
Deleting the cookies...
Фактические результаты в консоли следующие
--------Cookies at Servlet 1 are------------
ck1 Servlet 1 cookie 1
ck2 Servlet 1 cookie 2
ck3 Servlet 2 cookie 3
ck4 Servlet 2 cookie 4
ck5 Servlet 3 cookie 5
ck6 Servlet 3 cookie 6
--------Cookies at Servlet 2 are------------
ck1 Servlet 1 cookie 1
ck2 Servlet 1 cookie 2
ck3 Servlet 2 cookie 3
ck4 Servlet 2 cookie 4
ck5 Servlet 3 cookie 5
ck6 Servlet 3 cookie 6
--------Cookies at Servlet 3 are------------
ck1 Servlet 1 cookie 1
ck2 Servlet 1 cookie 2
ck3 Servlet 2 cookie 3
ck4 Servlet 2 cookie 4
ck5 Servlet 3 cookie 5
ck6 Servlet 3 cookie 6
Deleting the cookies...
Я предоставил эту информацию, насколько мне известно.Расскажите, если что-то нужно отредактировать или отформатировать.Пожалуйста, укажите причины, основанные на потоках управления и более практически выполнимых результатах с меньшим сродством к теории.