Как я могу сохранить последнее значение cookie в flex с jsp? - PullRequest
0 голосов
/ 31 мая 2010

моя форма входа в систему flex Когда я регистрируюсь, я создал файл cookie в jsp с таким именем setValueCookie.jsp

<%@ page language="java" import="java.util.* , javax.net.*" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
    String username = request.getParameter("value");
    System.out.println("Email got in cookieSet = " + username);

    if(username==null) username="";

    Date now = new Date();
    String timestamp = now.toString();
    Cookie cookie = new Cookie("username",username);
    cookie.setMaxAge(365 * 24 * 60 * 60);
    response.addCookie(cookie);

%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>DashBoard-Cookie</title>
</head>
<body>

</body>
</html>

теперь с помощью параметра запроса службы Http я передаю имя пользователя 'Значение для этого JSP.и я читаю значение cookie из getValueCookie.jsp вот так

<%
 String cookieName = "username";
 Cookie cookies [] = request.getCookies ();
 Cookie myCookie = null;
 String result; 
 if (cookies != null)
 {
 for (int i = 0; i < cookies.length; i++) 
 {
    if (cookies [i].getName().equals (cookieName))
    {
    myCookie = cookies[i];
    break;
    }
 }
}

%>
<data>
  <status><%=myCookie.getValue().toString()%></status>
</data>

через значение httpservice, которое я получаю, но если я открываю новое окно или какая-либо новая вкладка, значение cookie не получаетсякак я могу решить это?Заранее спасибо.

1 Ответ

1 голос
/ 31 мая 2010

Несмотря на то, что опубликованный код довольно громоздкий и неприятный (2-й пример можно сделать просто с помощью ${cookie.username.value} в EL и скриптлетов - нет-нет, это следует сделать (в) непосредственно HttpServlet или Filter), код выглядит законным.

На ум приходят 2 возможные причины:

  1. Файлы cookie привязаны к текущему протоколу запроса, домену и (по умолчанию) контекстному пути. Поэтому, если вы переключитесь на один из них, файл cookie будет недоступен в другом запросе.

  2. Изменение заголовков ответов (файлы cookie должны быть установлены в заголовках ответов) на полпути, JSP-файл запрашивает IllegalStateException: Response already committed исключений. Проверьте логи сервера. Если они есть, просто переместите скриптлет в начало страницы JSP или, предпочтительно, просто осторожно используйте HttpServlet или Filter. JSP - неподходящее место для такой логики.

Тем не менее, вы рассматривали возможность использования HttpSession? Он обеспечивает ту же функциональность, но в то же время намного проще и менее проблематичен, поскольку вам не нужно ломать голову над свободными файлами cookie. Захватите сеанс с помощью request.getSession() и используйте session.setAttribute(key, value) для хранения объектов в сеансе и используйте session.getAttribute(key) для извлечения объектов из сеанса. Там сеанс для него, в свою очередь также поддерживается cookie, но вам не нужно управлять им самостоятельно. Сервер сделает это за вас прозрачно.

...