2017-04-30 2 views
0

이 Java 웹 응용 프로그램 프로젝트에서는 getUrlContentString() 메서드로 페이지의 내용을 읽으려고 시도하고 (두 번째로) 두 번째로만 내용을 표시합니다. 태그 proccessString()을 사용하십시오. 두 번째 방법은 예상대로 응답하지 않는 것으로 보이며 빈 페이지를 반환합니다. 문제의 원인은 무엇입니까?HTML 페이지 콘텐츠 읽기 및 JSP로 콘텐츠 파싱

index.jsp를

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <%= cookiePac.CookieJar.getUrlContentString("http://help.websiteos.com/" 
       + "websiteos/example_of_a_simple_html_page.htm")%> 
     <p> 
      <%= cookiePac.CookieJar.proccessString()%> 
     </p> 

    </body> 
</html> 

CookieJar.java

package cookiePac; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class CookieJar { 
    private final List<String> cookies; 
    private static String rawCookiesString = ""; 
    private static String rawCookiesString_1 = ""; 
    public CookieJar() { 
     this.cookies = new ArrayList<>(); 
    } 
    /* read the page, store into rawCookiesString */ 
    public static String getUrlContentString (String theUrl) { 
     StringBuilder content = new StringBuilder(); 
     try { 
      URL url = new URL(theUrl); 
      URLConnection urlConnection = url.openConnection(); 
      BufferedReader bufferedReader = new BufferedReader(
        new InputStreamReader(urlConnection.getInputStream())); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) { 
       content.append(line + "\n"); 
      } 
      bufferedReader.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     rawCookiesString = content.toString(); 
     return " "; 
    } 
    /* select the content between <a> */ 

    public static String proccessString() { 
     Pattern p = Pattern.compile("<a>(.*?)</a>"); 
     Matcher m = p.matcher(rawCookiesString); 
     if (m.find()) { 
      rawCookiesString_1 = m.group(1); 
     } 
     return rawCookiesString_1.toString(); 
    } 
} 

답변

0

난 당신의 코드 프로젝트를 만들었습니다. 거기에 몇 가지 문제가 생겼습니다. 여기 있습니다. 모든

  1. 첫째, 당신은 당신이 지정한 URL을 얻을 정적 HTML -하지 브라우저 콘솔 창에서 볼 수있는 한, 그러나 실행되는 스크립트없이 한 -하지 앵커를 포함하지 태그. 이 때문에 태그의 콘텐츠를 가져올 수 없습니다. 예를 들어, http://www.cssdesignawards.com/ - 대신 (http://help.websiteos.com/websiteos/example_of_a_simple_html_page.htm)을 가져옵니다.

  2. 두 번째로는 "<a>(.*?)</a>"과 같은 태그를 사용하려고합니다. 실제로 앵커 태그 콘텐츠를이 정규식과 일치시키는 것은 매우 어렵습니다. 따라서 CSS 클래스가 일반적으로 사용되므로 대신 을 사용하는 것이 좋습니다.

  3. 다음으로 getUrlContentString 메서드는 html을 문자열로 반환하기 위해 이라는 문자열을 반환하지만 항상 빈 문자열 만 반환합니다. 이 메서드의 이름을 변경하거나 을 rawCookiesString으로 반환하는 것이 좋습니다.
  4. 또한 정적 메서드가 많이 있습니다. Java는 객체 지향 언어 인 이며, 응용 프로그램의 기본 논리에 비 정적 메서드를 사용하는 것이 훨씬 좋습니다.
  5. 마지막으로 html을 구문 분석하려면 JSoup library을 사용하는 것이 좋습니다. 익숙해지기 란 매우 어렵지 않으며, 파싱을위한 정말 좋은 기회를 제공합니다. 예를 들어 here은 태그에서 정보를 추출하는 요리 책입니다.
관련 문제