在JSP中包含HTML页面的内容为String

时间:2011-06-29 14:05:22

标签: java jsp

这是我的问题。我需要在jsp文件中的某些字符串中包含一些HTML页面(模板)的内容,所以我可以迭代扔掉它,解析它,并使用我需要的东西。怎么可能做到这一点,我试图在网上找到解决方案,但我不能。有谁知道解决方案可能是什么?

谢谢,

卢卡

3 个答案:

答案 0 :(得分:0)

如果您正在寻找从Web上读取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表达式将与我的不同
  • Tidy用于清理HTML并将其解析为XML
  • 如果你想从文件系统上的文件中读取,那么你就是这样做而不是URL的东西
  • 这段代码应该分解成多种方法(获取html,解析html,从Document获取信息......类似的东西)

答案 1 :(得分:0)

我不确定如何理解您的问题,但您可以使用include标记

添加模板
<jsp:include page="template.html">

这将在编译JSP页面时读取html文件并使其成为页面的一部分。

答案 2 :(得分:0)

如果您尝试阅读的文件是本地文件,那么我建议您从Files.toString()尝试Google Guava library

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