仅在Java代码中构建HTML

仅在Java代码中构建HTML,java,html,spring-mvc,Java,Html,Spring Mvc,创建包含HTML(编码正确)的字符串对象(我想)最简单、最快的方法是什么?例如,我可以在@ResponseBody(Spring MVC)中返回该字符串对象。这对您有用吗 StringBuilder htmlBuilder = new StringBuilder(); htmlBuilder.append("<html>"); htmlBuilder.append("<head><title>Hello World</title></head

创建包含HTML(编码正确)的字符串对象(我想)最简单、最快的方法是什么?例如,我可以在
@ResponseBody
(Spring MVC)中返回该字符串对象。

这对您有用吗

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();
StringBuilder htmlBuilder=新StringBuilder();
htmlBuilder.append(“”);
附加(“Hello World”);
附加(“看看我的身体!

”; htmlBuilder.append(“”); 字符串html=htmlBuilder.toString();
有几种方法

首先,您可以使用字符串或StringBuilder。这适用于非常短的HTML,如
Hello,world

如果HTML更复杂,那么使用一些API就更容易了。请查看以下链接:

或者在谷歌搜索
HTMLBuilderJava

另一种可能是模板化。如果您确实有一个模板,希望在其中替换几个单词,那么您可以将HTML编写为带有参数标记的
{0}
{}
文件。然后只需使用
java.text.MessageFormat
创建实际的HTML文本


下一种方法是使用“真实”模板引擎,如Velocity

好方法是将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>");
sb.append(“)+
“td{padding:6px;border:1px solid#ccc;text align:left;}”+
“th{背景:#333;颜色:白色;字体大小:粗体;填充:6px;边框:1px实心#ccc;文本对齐:左;}”+
"");
助手方法:

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);
}
void appendTag(StringBuilder sb、字符串标记、字符串内容){
某人附加(“”);
某人附加(内容);

sb.append(“从Java 13开始,添加了一个名为文本块的新功能。要使用文本块,必须使用三个双引号,即
,以打开和关闭
字符串

此功能允许我们构建诸如
html
之类的内容,而无需连接字符串、处理新行或使用库来构建
String

下面是将此新功能用于
html
的一个简短示例:

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;
String html=”“”
你好,世界

""";
这相当于不使用文本块的以下代码:

String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, world</p>\n" +
              "    </body>\n" +
              "</html>\n";
String html=“\n”+
“\n”+
你好,世界

\n+ “\n”+ “\n”;
来源:

使用或将是从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 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>

你好,世界

您也可以使用方法以指定的字符集编码写入
OutputStream

取决于您创建HTML的内容,但是,根据您在问题中提到的内容,我会说StringBuilder!这一定很有用。当您说编码时,是指UTF-8等还是“”事情?是的,UTF-8。我说的是类似于
htmlBuilder.append(“HelloŁódź”);
Java在内部使用UTF-8编码,因此无论您在Java中键入什么,都已经使用UTF-8编码。这是否回答了您的问题?如果您知道字符串将超过16个字符,最好分配一个较大的初始缓冲区:
new StringBuilder(1000)
为了完成,可以使用String.format合并属性值,即:htmlBuilder.append(String.format(“%s”,value,label));
<!DOCTYPE html>
<html>
   <head></head>
   <body>
      Hello World
   </body>
</html>