Dans le code suivant, j'ai vérifié que la connexion à une URL depuis une applet préserve la session du navigateur si la classe URLConnection du JDK est utilisée. Cependant, ce n'est pas le cas si la bibliothèque HttpClient d'Apache est utilisée. Quelqu'un sait-il pourquoi? Sinon, existe-t-il un moyen pour moi de définir l'instance de connexion à utiliser par une instance HttpClient?Connexion à une URL à partir d'une applet utilisant HttpClient d'Apache vs utilisation URLConnection du JDK
import java.applet.Applet;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URISyntaxException;
import java.net.URL;
import javax.net.ssl.SSLException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
public class HttpClientTesterApplet extends Applet {
private static final long serialVersionUID = -1599714556710568947L;
public void testHttpClient() throws ClientProtocolException, IOException,
URISyntaxException {
URL url = new URL(String.format("%s://localhost:%s/%s/testHttpClient",
getParameter("protocol"), getParameter("port"),
getParameter("context")));
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url.toURI());
System.out.println("Executing request " + post.getURI());
try {
System.out
.println(client.execute(post, new BasicResponseHandler()));
} catch (SSLException e) {
System.out.println(e.getMessage());
}
System.out.println("Executed request " + post.getURI());
System.out.println("Opening connection " + url);
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
System.out.println("Opened connection " + url);
urlConnection.setRequestMethod("POST");
System.out.println("Connecting");
urlConnection.connect();
System.out.println("Connected");
InputStream inputStream = urlConnection.getInputStream();
try {
while (inputStream.read() != -1) {
System.out.println("Reading");
}
} finally {
inputStream.close();
}
}
}
Je l'ai essayé, et mon applet ne partage pas implicitement la session du navigateur. Est-ce que cela fonctionne en 2012? J'ai préféré passer l'ID de session en tant que ' 'à la place, et définir explicitement un cookie avec cette valeur. –