使用Java生成程序化HTMLDocument

Tom*_*cak 11 html java construction

有没有人知道如何在Java中以编程方式生成HTMLDocument对象而不需要外部生成String然后使用HTMLEditorKit #read来解析它?我问的两个原因:

首先,我的HTML生成例程需要非常快,我认为将字符串解析为内部模型比直接构建此模型更昂贵.

其次,面向对象的方法可能会导致更清晰的代码.

我还应该提一下,出于许可的原因,我不能使用除JVM附带的库之外的任何库.

谢谢,汤姆

Jon*_*nik 9

一种面向对象的方法是使用名为ECS的库.

这是一个非常简单的图书馆,并没有多年的变化.然后,HTML 4.01规范也没有改变;)我已经使用了ECS,并且认为它比仅使用Strings或StringBuffers/StringBuilders生成大型HTML片段要好得多.

小例子:

Option optionElement = new Option();
optionElement.setTagText("bar");
optionElement.setValue("foo");
optionElement.setSelected(false);   
Run Code Online (Sandbox Code Playgroud)

optionElement.toString() 现在会产生:

<option value='foo'>bar</option>
Run Code Online (Sandbox Code Playgroud)

该库支持HTML 4.0和XHTML.最初困扰我的唯一的事情很多是涉及到的XHTML版本的类名称开始以小写字母:option,input,a,tr,等等,这违背了最基本的Java约定.但是如果你想使用XHTML,你可以习惯这个; 至少我做了,出乎意料地快.


Jee*_*Bee 7

我将研究JSP是如何工作的 - 也就是说,它们编译成一个基本上是一个庞大的StringBuffer追加组的servlet.标签还可以编译成Java代码片段.这很麻烦,但速度非常快,除非你深入研究Tomcat的工作目录,否则你永远不会看到这段代码.也许你想要的是从一个像HTML一样的HTML中心视图实际编写HTML代码,添加循环标签等,并在项目内部使用类似的代码生成引擎和编译器.

或者,只需在一个实用程序类中处理StringBuilder,该实用程序类具有"openTag","closeTag","openTagWithAttributes","startTable"等方法......它可以使用Builder模式,您的代码看起来如此喜欢:

public static void main(String[] args) {
    TableBuilder t = new TableBuilder();
    t.start().border(3).cellpadding(4).cellspacing(0).width("70%")
      .startHead().style("font-weight: bold;")
        .newRow().style("border: 2px 0px solid grey;")
          .newHeaderCell().content("Header 1")
          .newHeaderCell().colspan(2).content("Header 2")
      .end()
      .startBody()
        .newRow()
          .newCell().content("One/One")
          .newCell().rowspan(2).content("One/Two")
          .newCell().content("One/Three")
        .newRow()
          .newCell().content("Two/One")
          .newCell().content("Two/Three")
      .end()
    .end();
    System.out.println(t.toHTML());
}
Run Code Online (Sandbox Code Playgroud)