Tom*_*cak 11 html java construction
有没有人知道如何在Java中以编程方式生成HTMLDocument对象而不需要外部生成String然后使用HTMLEditorKit #read来解析它?我问的两个原因:
首先,我的HTML生成例程需要非常快,我认为将字符串解析为内部模型比直接构建此模型更昂贵.
其次,面向对象的方法可能会导致更清晰的代码.
我还应该提一下,出于许可的原因,我不能使用除JVM附带的库之外的任何库.
谢谢,汤姆
一种面向对象的方法是使用名为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,你可以习惯这个; 至少我做了,出乎意料地快.
我将研究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)