2010-12-06 5 views
0

J'utilise un JTextPane pour afficher les données d'une page Web qui n'est pas la mienne, donc je n'ai aucun contrôle sur son contenu. Il faut qu'un utilisateur soit connecté, donc j'utilise URLConnections pour me connecter à cette page et utiliser des cookies dans URLConnection pour récupérer des données. Cela fonctionne bien. Toutefois, lorsque je place ces données dans un JTextPane avec le type de contenu défini sur text/html, les images ne s'affichent pas car elles nécessitent ces cookies avec l'ID de session et des éléments à envoyer afin de récupérer les images téléchargées.Java JTextPane HTML image cookies

Y at-il un moyen de faire du JTextPane (bien que je puisse utiliser n'importe quoi d'autre dans le jdk qui affiche html) utiliser mes cookies?

Merci.

je stocke les cookies dans une liste chaînée:

loadText = "Logging in..."; 
    url = new URL("http://www.example.com/login.php"); 
    connection = url.openConnection(); 

    connection.setDoOutput(true); 

    OutputStreamWriter out = new OutputStreamWriter(
      connection.getOutputStream()); 
    out.write("username=" + URLEncoder.encode(username, "UTF-8") 
      + "&password=" + URLEncoder.encode(password, "UTF-8") 
      + "&testcookies=1"); 
    out.flush(); 
    out.close(); 
      List<String> cookies = new LinkedList<String>(); 
    for (int i = 1; (headerName = connection.getHeaderFieldKey(i)) != null; i++) { 
     if (headerName.equals("Set-Cookie")) { 
      String cookie = connection.getHeaderField(i); 
      cookie = cookie.substring(0, cookie.indexOf(";")); 
      cookies.add(cookie); 
     } 
    } 

Et je dois aussi dépouiller HTML unneccesary, ce qui me donne une chaîne I fiche dans la textPane:

String p1 = rawPage.split("<div id=\"contentstart\">")[1] 
         .split("</div><!--id='contentstart'-->")[0]; 
       p1 = p1.replaceAll("<p><strong></strong></p>", ""); 
       p1 = p1.replaceAll("<p></p>", ""); 
       parsed = true; 
       JTextPane tp = new JTextPane(); 
       tp.setEditable(false); 
       JScrollPane js = new JScrollPane(); 
       js.getViewport().add(tp); 
       js.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
       getContentPane().add(js); 
       js.setSize(640, 480); 
       tp.setContentType("text/html"); 
       tp.setText(p1); 

Répondre

0

Êtes-vous ne pas lire le contenu de URLConnection? Quelque chose comme ça peut aider. Postez votre code afin que nous puissions avoir plus d'informations.

JTextPane pane; 
.. 
HTMLDocument htmlDocument = (HTMLDocument) pane.getDocument(); 
htmlDocument.putProperty("IgnoreCharsetDirective", Boolean.TRUE); 
htmlDocument.putProperty(Document.StreamDescriptionProperty, pageUrl); 
pane.read(connection.getInputStream, htmlDocument); 

- ou -

Vous pouvez essayer le composant swing du navigateur au lieu de JTextPane.

http://djproject.sourceforge.net/ns/index.html

+0

J'ai posté les snipets pertinents de mon code - j'ai besoin de supprimer un peu de HTML pour ne laisser que le bit dont j'ai besoin. –

0

Les cookies sont stockés en relation avec votre navigateur. Par exemple, si vous avez des cookies dans Firefox, Microsoft IE ne peut pas voir ces cookies. De même, les cookies que vous avez obtenus à partir de la page Web que vous recherchez ne sont pas disponibles pour votre application Java.

Mais aussi, JTextPane n'est pas un navigateur HTML complet. Vous pouvez l'utiliser pour rendre le HTML de base (en fait HTML 2.0, une version beaucoup plus ancienne de HTML), mais cela ne fonctionnera pas avec les cookies, les CSS et d'autres fonctionnalités web standard.

Vous pouvez regarder les navigateurs Web complet, comme une soucoupe volante - voir http://weblogs.java.net/blog/2007/07/14/flying-saucer-r7-out

Mais même si vous faites cela, soucoupe volante ne voit pas les cookies que vous avez obtenus par d'autres navigateurs .

+0

Oui, je le sais; Je crée donc un tableau de chaînes de tous les cookies définis par le serveur dans l'en-tête Set-Cookie et je le renvoie lorsque je fais d'autres demandes pour tromper le serveur en pensant que nous le stockons aussi longtemps qu'il le souhaite. –

Questions connexes