我有一种情况需要在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类的多次调用中传递。我不是在使用会话。 如果你有更好的方法,请告诉我。
谢谢 -
答案 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