仅在 Java 代码中构建 HTML
Posted
技术标签:
【中文标题】仅在 Java 代码中构建 HTML【英文标题】:Building HTML in Java code only 【发布时间】:2011-10-14 22:17:00 【问题描述】:创建包含 html(具有正确编码)的 String 对象(我想)的最简单、最快的方法是什么,我可以在 @ResponseBody
(Spring MVC) 中返回它?
【问题讨论】:
取决于您创建该 HTML 的内容,但是,根据您在问题中提到的内容,我会说 StringBuilder! 这个SO answer 一定很有帮助。 【参考方案1】:可以有多种方法。
首先您可以使用 String 或 StringBuilder。这对于像 <html>Hello, <b>world</b></html>
这样的极短的 HTML 很有用。
如果 HTML 更复杂,使用一些 API 会更容易。看看这些链接:
http://xerces.apache.org/xerces-j/apiDocs/org/apache/html/dom/HTMLBuilder.html
Java HTML Builder (anti-template) library?
或在谷歌中搜索html builder java
。
其他可能性是模板。如果您确实有一个模板希望替换几个单词,您可以将您的 HTML 编写为 *.html
文件,并使用 0
、 标记参数。然后只需使用
java.text.MessageFormat
创建实际的 HTML 文本。
下一个方法是使用像 Velocity 这样的“真实”模板引擎。
【讨论】:
【参考方案2】:这对你有用吗?
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.append("<html>");
htmlBuilder.append("<head><title>Hello World</title></head>");
htmlBuilder.append("<body><p>Look at my body!</p></body>");
htmlBuilder.append("</html>");
String html = htmlBuilder.toString();
【讨论】:
当您说编码时,您是指 UTF-8 等吗?或“>”东西? 是的,UTF-8。我说类似htmlBuilder.append("<head><title>Hello Łódź</title></head>");
Java 在内部使用 UTF-8 编码,因此您在 Java 中输入的任何内容都已采用 UTF-8 编码。这能回答你的问题吗?
如果你知道字符串会超过十六个字符,最好分配一个大的初始缓冲区:new StringBuilder(1000)
为了补全,可以使用String.format合并属性值,即:htmlBuilder.append(String.format("", 值, 标签));【参考方案3】:
从 Java 13 开始,添加了一个名为 Text Blocks 的新功能。要使用文本块,您必须使用 三个 双引号 AKA """
,以打开和关闭 String
。
此功能允许我们构建诸如 html
之类的东西,而无需连接字符串、处理新行或使用库并非常清晰、轻松地构建 String
。
下面是一个使用html
的新功能的简短示例:
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
这相当于下面的代码,不使用文本块:
String html = "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
来源: JEP 355: Text Blocks
【讨论】:
【参考方案4】:好方法是将 style=""s 提取到头部?
sb.append("<style>" +
"td padding: 6px; border: 1px solid #ccc; text-align: left; " +
"th background: #333; color: white; font-weight: bold; padding: 6px; border: 1px solid #ccc; text-align: left;" +
"</style>");
辅助方法:
void appendTag(StringBuilder sb, String tag, String contents)
sb.append('<').append(tag).append('>');
sb.append(contents);
sb.append("</").append(tag).append('>');
void appendDataCell(StringBuilder sb, String contents)
appendTag(sb, "td", contents);
void appendHeaderCell(StringBuilder sb, String contents)
appendTag(sb, "th", contents);
【讨论】:
【参考方案5】:使用jsoup 或wffweb 将是从Java 代码构建HTML 的最简单方法。您可以使用它动态生成 HTML。
例如 jsoup:
Document doc = Jsoup.parse("<html></html>");
doc.body().addClass("body-styles-cls");
doc.body().appendElement("div");
System.out.println(doc.toString());
将打印
<html>
<head></head>
<body class=" body-styles-cls">
<div></div>
</body>
</html>
例如 wffweb:
Html rootTag = new Html(null).give(html ->
new Head(html);
new Body(html).give(body ->
new NoTag(body, "Hello World");
);
);
rootTag.setPrependDocType(true);
System.out.println(rootTag.toHtmlString());
将打印
<!DOCTYPE html>
<html>
<head></head>
<body>
Hello World
</body>
</html>
您还可以使用toOutputStream(OutputStream os, String charset)
方法以指定的字符集编码写入OutputStream
。
【讨论】:
以上是关于仅在 Java 代码中构建 HTML的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NoClassDefFoundError:无法解决:Landroid/support/v4/content/LocalBroadcastManager 仅在构建 APK 上
仅在 html 代码中使用 javascript 重新加载特定页面一次