2011-06-29 45 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