有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

谢谢

卢卡


共 (3) 个答案

  1. # 1 楼答案

    我不知道如何理解你的问题,但你可以使用include标签包含一个模板

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

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

  2. # 2 楼答案

    如果您希望从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、从文档中获取信息……诸如此类)
  3. # 3 楼答案

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

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