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

Java 在JSP中设置cookie并从非servlet类中检索,java,jsp,jakarta-ee,servlets,Java,Jsp,Jakarta 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 Do

我需要在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调用之后调用的,而是只有在发生任何事件时才在应用程序中的某个位置调用的。下面是我用来捕获cookies的代码

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);
}
URL=新URL(“http://localhost:8080");
URLConnection conn=url.openConnection();
conn.getContent();
CookieManager cm=新CookieManager();
CookieHandler.setDefault(cm);
cm.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieStore cs=cm.getCookieStore();
List cookies=cs.getCookies();
用于(HttpCookie cookie:cookies){
System.out.println(“CookieHandler检索到的cookie:+cookie”);
}
如果我想在非servlet类中检索cookie,这个场景会起作用吗? 上述代码的输出将返回空列表。 但是,如果我用request.getCookie(“UserName”)编写一个servet类,我将看到cookie值。 在这里,我需要了解如何在不使用请求对象的情况下获得cookie值。 因为请求对象并不总是在java类的多次调用中传递。我没有使用会话。 如果你有更好的方法,请告诉我


谢谢-

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

Cookie信息(如果存在)应位于“设置Cookie”标题字段下

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

Y0u可以参考此

是否有任何理由否决该问题?plz解释从我的问题中我发现我正在打开一个URL连接,最终一个新的连接对象将不知道我在JSP中设置的cookie。在这种情况下,在我在JSP中设置cookie之后,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);
            }
       }
   }