2010-12-06 2 views
0

Я использую JTextPane для отображения данных с веб-страницы, которая не является моей, поэтому я не могу контролировать ее содержимое. Для этого требуется, чтобы пользователь вошел в систему, поэтому я использую URLConnections для подключения к этой веб-странице и использования файлов cookie в URLConnection для извлечения данных. Это прекрасно работает. Однако, когда я помещаю эти данные в JTextPane с типом контента, установленным в text/html, изображения не отображаются, так как они требуют, чтобы эти куки с идентификатором сеанса и вещами, которые нужно отправить, чтобы получить загруженные изображения.Java JTextPane HTML-файлы cookie

Есть ли способ сделать JTextPane (хотя я могу использовать что-либо еще в jdk, который отображает html), используя мои файлы 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, который дает мне строку я заткнуть в 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); 

ответ

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-код, чтобы оставить только тот бит, который мне нужен. – 2010-12-06 18:06:30

0

Куки хранятся в отношении вашего браузера. Например, если у вас есть файлы cookie в Firefox, Microsoft IE не может видеть эти файлы cookie. Аналогичным образом, файлы cookie, которые вы получили с веб-страницы, которую вы ищете, недоступны для вашего Java-приложения.

Но также JTextPane не является полнофункциональным HTML-браузером. Вы можете использовать его для визуализации базового HTML (на самом деле HTML 2.0, гораздо более старая версия HTML), но он не будет работать с файлами cookie, CSS и другими стандартными веб-функциями.

Вы можете посмотреть на полнофункциональных веб-браузеров, таких как летающее блюдце - см http://weblogs.java.net/blog/2007/07/14/flying-saucer-r7-out

Но даже если вы сделаете это, летающая тарелка не будет видеть куки, которые вы получили с помощью других браузеров ,

+0

Да, я знаю это; поэтому я делаю строковый массив всех файлов cookie, установленных сервером в заголовке Set-Cookie, и отправляю их обратно, когда делаю дальнейшие запросы, чтобы обмануть сервер, думая, что мы фактически храним их столько, сколько захочет. – 2010-12-06 18:05:07