0

JTextPaneを使用して、自分のものではないWebページのデータを表示しているため、そのコンテンツを制御できません。ユーザーがログインする必要があるため、URLConnectionsを使用してそのWebページに接続し、URLConnectionのCookieを使用してデータを取得します。それはうまくいきます。ただし、このデータをコンテンツタイプがtext / htmlに設定されたJTextPaneに配置すると、アップロードされた画像を取得するためにセッションIDなどのCookieを送信する必要があるため、画像は表示されません。

JTextPane(htmlを表示するjdkで他のものを使用することはできますが)にCookieを使用させる方法はありますか?

ありがとう。

リンクリストに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);
        }
    }

また、不要な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);
4

2 に答える 2

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 の代わりにブラウザの swing コンポーネントを試すことができます。

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

于 2010-12-06T17:53:53.953 に答える
0

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

しかし、JTextPane はフル機能の HTML ブラウザではありません。これを使用して基本的な HTML (実際には、HTML のはるかに古いバージョンである HTML 2.0) をレンダリングできますが、Cookie、CSS、およびその他の現在標準の Web 機能では機能しません。

Flying Saucer などのフル機能の Web ブラウザを確認することをお勧めします - http://weblogs.java.net/blog/2007/07/14/flying-saucer-r7-outを参照

ただし、これを行っても、フライングソーサーは、他のブラウザーで取得した Cookie を認識しません。

于 2010-12-06T17:56:04.857 に答える