在JSP中设置cookie并从非servlet类中检索

时间:2014-07-14 16:16:57

标签: java jsp java-ee servlets

我有一种情况需要在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(&#34; UserName&#34;)编写一个servet类,我将看到cookie值。 在这里,我需要了解如何在不使用请求对象的情况下获取cookie值。 因为请求对象并不总是在java类的多次调用中传递。我不是在使用会话。 如果你有更好的方法,请告诉我。

谢谢 -

1 个答案:

答案 0 :(得分:0)

而是使用连接对象中的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);
            }
       }
   }

Y0u可以参考此examle