2011-06-29 46 views
-1

這裏是我的問題。我需要在jsp文件的某個字符串中包含一些HTML頁面(模板)的內容,所以我可以迭代拋出它,解析它,然後使用我需要的東西。怎麼能做到這一點,我試圖在網上找到解決方案,但我不能。有誰知道解決方案可能是什麼?在JSP中包含HTML頁面的內容爲String

感謝,

盧卡

回答

0

如果您想從網絡讀取HTML網頁並解析它來抓取數據的某些部分,然後將下面的代碼可能會對你有所幫助(快捷骯髒的代碼我在以前的項目中使用)

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.ArrayList; 
import java.util.List; 

import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpression; 
import javax.xml.xpath.XPathExpressionException; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.NodeList; 
import org.w3c.tidy.Tidy; 

public List<String> getTopics() { 
    try { 
     URL url = new URL(TOPIC_URL); 
     URLConnection urlc = url.openConnection(); 
     java.io.InputStream is = urlc.getInputStream(); 
     Tidy tidy = new Tidy(); 
     tidy.setDocType("HTML 4.01 Transitional"); 
     tidy.setQuiet(true); 
     org.w3c.dom.Document doc = tidy.parseDOM(is, null); 

     XPathFactory factory=XPathFactory.newInstance(); 
     XPath xPath=factory.newXPath(); 
     XPathExpression xPathExpression= xPath.compile("//td[@class='topics']//table[@class='topic']/tr/td/a/text()"); 
     NodeList nodes = (NodeList) xPathExpression.evaluate(doc, XPathConstants.NODESET); 
     logger.debug("Found " + nodes.getLength() + " nodes"); 

     List<String> result = new ArrayList<String>(); 
     for (int i=0; i<nodes.getLength();i++){ 
      result.add(nodes.item(i).getNodeValue()); 
     } 
     logger.debug("Topics: " + result); 
     return result; 
    } catch(MalformedURLException ex) { 
     logger.info(ex.getClass() + ":" + ex.getMessage()); 
     throw new RuntimeException(ex); 
    } catch(XPathExpressionException ex) { 
     logger.info(ex.getClass() + ":" + ex.getMessage()); 
     throw new RuntimeException(ex); 
    } catch(IOException ex) { 
     logger.info(ex.getClass() + ":" + ex.getMessage()); 
     throw new RuntimeException(ex); 
    } 
} 

顯然,這是值得注意的:

  • 它的壞的一切轉換成一個RuntimeException
  • XPath表達式會比我的不同
  • 整潔用來清理HTML,如果你想從文件讀取文件解析它像XML
  • 系統,那麼你會這樣做,而不是URL的東西
  • 這段代碼應該可以分解成多個方法(獲取HTML,解析HTML,從文檔中獲取信息......類似的東西)
+0

謝謝,但我需要從本地文件 – Luka

0

我不知道如何理解你的問題,但你可以包括一個模板我們包含標記

<jsp:include page="template.html"> 

當JSP頁面被編譯並使其成爲頁面的一部分時,這將讀取html文件。

+0

是的,我知道,但止跌」噸做到這一點,因爲要提取每個標籤... – Luka

+0

你的問題是非常不清楚的。你的目標是什麼? –

+0

我知道他打算做什麼:他可能希望以字符串形式讀取html文件,然後進行一些字符串操作,然後out.print操縱結果。 –

0

如果文件,您嘗試讀取是本地文件,那麼我建議嘗試Files.toString()Google Guava library

Charset charset = Charset.forName("UTF-8"); 
File file = new File("test.txt"); 
String res = Files.toString(file, charset); 
+0

謝謝,也許這樣做,我會嘗試,我只是專注於JSP和包括指令,同時忘記基本知識:) – Luka

+0

我做了這個工作: – Luka

+0

我做了這個工作: <% String file = application.getRealPath(「/」)+「test.txt」; File fileObject = new File(file); char data [] = new char [(int)fileObject.length()]; FileReader filereader = new FileReader(file); int charsread = filereader.read(data); (new String(data,0,charsread)); filereader.close(); %> 它工作得很好,不過謝謝你們;) – Luka