2010-12-06 10 views
0

私はJTextPaneを使用して私のウェブページではないデータを表示しています。そのため、私はその内容を制御できません。ユーザーにはログインする必要があるので、URLConnectionsを使用してそのWebページに接続し、URLConnectionでクッキーを使用してデータを取得します。それはうまく動作します。ただし、このデータをコンテンツタイプがtext/htmlに設定されたJTextPaneに配置すると、アップロードされた画像を取得するためにセッションIDとアイテムを持つCookieが必要になるため、画像は表示されません。Java JTextPane HTMLイメージクッキー

JTextPaneを作成する方法はありますか(HTMLを表示するjdk内の他のものを使用することはできますが)私のクッキーを使用しますか?

ありがとうございました。

私はリンクリストでCookieを格納します。

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); 
     } 
    } 

そして私はまた私がtextpaneにプラグイン文字列を与える、unneccesary HTMLを剥ぎ取る必要があります。

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); 

答えて

0

はあなたがURLConnectionからコンテンツを読み取っていないのですか?このようなものが助けになるかもしれません。 より多くの洞察を得るためにコードを投稿してください。

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

- または -

あなたは代わりにJTextPaneのブラウザのスイングコンポーネントをしようとします。

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

+0

私のコードから関連するスニペットを投稿しました。必要なビットだけを残すために余分なHTMLを取り除く必要があります。 –

0

クッキーは、お使いのブラウザに関連して保存されます。たとえば、FirefoxにいくつかのCookieがある場合、Microsoft IEはそれらのCookieを見ることができません。同様に、探しているWebページから取得したCookieは、Javaアプリケーションでは利用できません。

また、JTextPaneはフル機能のHTMLブラウザではありません。基本的なHTML(実際にはHTMLの古いバージョンであるHTML 2.0)をレンダリングするのに使うことができますが、クッキーやCSSなどの標準的なWeb機能では機能しません。

あなたはこのようなフライングソーサーなどフル機能を備えたWebブラウザ、を見てみたいことがあり - しかし、あなたはこれを行う場合でも、フライングソーサーは、あなたが他のブラウザを介して取得しましたクッキーは表示されませんhttp://weblogs.java.net/blog/2007/07/14/flying-saucer-r7-out

を見ます。

+0

ねえ、私はそれを知っています。私は、Set-Cookieヘッダーにあるサーバーによって設定されたすべてのCookieの文字列配列を作成し、それを送信して、サーバーを騙して、実際に私が望んでいる限り、それらを実際に保管していると考えさせます。 –

関連する問題