Devrait HttpURLConnection avec CookieManager gérer automatiquement les cookies de session?

J'ai une application Java (JDK 1.7.0_13) et je suis à l'aide de java.net.HttpURLConnection de se connecter à certains servlet de base de services de gestion de session. Je suis à essayer de comprendre comment utiliser java.net.CookieManager pour suivre les cookies de session. La lecture de la documentation, j'ai l'impression que l'installation de CookieManager avec CookieHandler.setDefault(nouveau CookieManager()) devrait provoquer la gestion des cookies à se faire automatiquement. Cependant, plusieurs demandes pour la même URL ne semble pas conserver les cookies. Dois-je extraire manuellement les cookies de réponses et de leur renvoyer dans les demandes sur mon propre ou est CookieManager va le faire automatiquement pour moi? Si CookieManager n'est pas le cas, quelle est la valeur d'-t-il?

De tester des choses, j'ai une servlet qui ont réussi à incrémente un compteur à chaque fois que mon navigateur visite d'une URL. Cela fonctionne bien à partir de Safari, FireFox et Chrome... Cependant, je ne peux pas le faire fonctionner à partir d'une application Java autonome.

Voici un programme de test simple pour illustrer ce que j'espérais, serait simple travail. Il installe le CookieManager au début, puis appelle un fetch(Chaîne urlString) méthode à plusieurs reprises que les Url tapées à la console.

package com.brilliant.experimental;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpFetcher {  
public static void fetch(String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
int status = conn.getResponseCode();
System.out.println("Status = " + status);
String key;
System.out.println("Headers-------start-----");
for (int i = 1; (key = conn.getHeaderFieldKey(i)) != null; i++) {
System.out.println(key + ":" + conn.getHeaderField(i));
}
System.out.println("Headers-------end-----");
System.out.println("Content-------start-----");
String inputLine;
while ((inputLine = reader.readLine()) != null) {
System.out.println(inputLine);
}
System.out.println("Content-------end-----");
in.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
CookieHandler.setDefault(new CookieManager());
for (int i = 0; i < args.length; i++) {
fetch(args[i]);
}
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(isr);
String prompt = "> ";
String urlString;
try {
for (System.out.print(prompt);
(urlString = reader.readLine()) != null; 
System.out.print(prompt)) 
{
fetch(urlString);
}
} catch (IOException ioe) {
System.out.println(ioe);
}
}
}

Invoquant mon servlet à partir de cette application clairement obtient un cookie de session depuis le serveur. Toutefois, en invoquant à nouveau obtient un nouveau cookie de session.

> http://localhost:8080/brilliant/TestServlet
Status = 200
Headers-------start-----
Server:Resin/4.0.34
Cache-Control:private
Set-Cookie:JSESSIONID=aaaMp0uKke4gp9_-nUuZt; path=/
Content-Length:19
Date:Wed, 13 Feb 2013 18:02:31 GMT
Headers-------end-----
Content-------start-----
Session count is 0
Content-------end-----
> http://localhost:8080/brilliant/TestServlet
Status = 200
Headers-------start-----
Server:Resin/4.0.34
Cache-Control:private
Set-Cookie:JSESSIONID=aaaZ-oPaC1I9WdEDoUuZt; path=/
Content-Length:19
Date:Wed, 13 Feb 2013 18:02:33 GMT
Headers-------end-----
Content-------start-----
Session count is 0
Content-------end-----

Donc, pour résumer, ce que je dois faire quelque chose d'autre à faire CookieManager travail automatiquement pour moi, ou dois-je avoir recours à extraire manuellement les cookies de réponses et de le renvoyer avec les demandes?

InformationsquelleAutor Chuck | 2013-02-13