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