【问题标题】:Setting cookie in JSP and retrieving from non servlet class在 JSP 中设置 cookie 并从非 servlet 类中检索
【发布时间】:2014-07-14 16:16:57
【问题描述】:

我有一种情况,我需要在 JSP 中设置 cookie,我需要在普通的 java 类中获取这些 cookie。

JSP:

CookieManager manager = new CookieManager();
CookieHandler.setDefault(manager);
CookieStore cookieJar =  manager.getCookieStore();

// create cookie
HttpCookie cookie = new HttpCookie("UserName", "John Doe");

// add cookie to CookieStore for a
// particular URL
URL url = new URL("http://localhost:8080");
url.openConnection().connect();
cookieJar.add(url.toURI(), cookie);
System.out.println("Added cookie using cookie handler");


%>

下面是 Java 类 [不是 servlet 类],该类在服务器中运行,它不是在 JSP 调用之后调用,而是仅在发生任何事件时才在应用程序的某个位置调用。下面是我编写的用于捕获 cookie 的代码。

URL url = new URL("http://localhost:8080");
URLConnection conn = url.openConnection();
conn.getContent();

CookieManager cm = new CookieManager();
CookieHandler.setDefault(cm);
cm.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieStore cs = cm.getCookieStore();
List <HttpCookie> cookies = cs.getCookies();
for (HttpCookie cookie: cookies) {
          System.out.println("CookieHandler retrieved cookie: " + cookie);
}

如果我想检索非 servlet 类中的 cookie,这种情况是否可行? 上述代码的输出将返回空列表。 但是,如果我用 request.getCookie("UserName") 编写一个服务类,我会看到 cookie 值。 在这里,我需要了解如何在不使用请求对象的情况下获取 cookie 值。 因为请求对象并不总是在java类的多次调用中传递。而且我没有使用会话。 如果您有更好的方法,请告诉我。

谢谢-

【问题讨论】:

  • 是否有任何理由否决这个问题。 ?请解释

标签: java jsp jakarta-ee servlets


【解决方案1】:

改为使用连接对象中的getHeaderFields() 方法来获取表示特定连接的标头字段的名称-值对的完整列表

Cookie 信息(如果存在)应位于“Set-Cookie”标头字段下。

Map<String, List<String>> headerFields = conn.getHeaderFields();
Set<String> headerFieldsSet = headerFields.keySet();
Iterator<String> hearerFieldsIter = headerFieldsSet.iterator();

然后遍历Set 并检查cookie 是否存在。如果存在,请打印出来。

while (hearerFieldsIter.hasNext()) {
       String headerFieldKey = hearerFieldsIter.next();
       if ("Set-Cookie".equalsIgnoreCase(headerFieldKey)) {
       List<String> headerFieldValue = headerFields.get(headerFieldKey);
       for (String headerValue : headerFieldValue) {
       System.out.println("Cookie Found...");
       String[] fields = headerValue.split(";\s*");
       String cookieValue = fields[0];
       System.out.println("cookieValue:" + cookieValue);
            }
       }
   }

你可以参考这个examle

【讨论】:

  • 从我的问题中我发现我正在打开一个 URL 连接,最终一个新的连接对象将不知道我在 JSP 中设置的 cookie。在这种情况下,我在 JSP 中设置 cookie 后,cookie 应该从浏览器发送到服务器。
猜你喜欢
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
相关资源
最近更新 更多