繁体   English   中英

将 HTML 页面的内容作为字符串包含在 JSP 中

[英]Including the content of HTML page as String in JSP

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

谢谢,

卢卡

如果您想从 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,从文档中获取信息......类似的东西)

我不确定如何理解您的问题,但您可以使用 include 标签包含模板

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

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

如果您尝试读取的文件是本地文件,那么我建议您尝试使用Google Guava 库中的Files.toString()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM