Basil Bourqu..
9
对于简单的HTML,直接将其生成为文本.序列化,XML和转换的其他建议都是过度的.
有一些Java库可以帮助生成HTML,例如:
jwebutils
使用Java创建HTML 5标记的库.它还包含对创建JSON和CSS 3标记的支持.
Jakarta Element Construction Set(ECS)
用于为各种标记语言生成元素的Java API,它直接支持HTML 4.0和XML.现在退休了,但有些人真的喜欢它.
但是,如果您了解有效HTML的基础知识,您可以编写自己的例程.
至于速度,添加StringBuilder类是为了更快地进行字符串操作.权衡是不同步的.这意味着不是线程安全的.根据程序的结构,您可以在执行HTML呈现的代码外部使用同步.
这是我刚刚在Java 6中编写的一个示例类,以及一个运行它的小应用程序.这段代码只是一个概念证明,还没有为黄金时段制作做好准备.
package com.example;
/**
* @author Basil Bourque
* © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
*/
public class ListToHtmlTransformer {
/**
* @param collection
* of report titles.
* @return string containing source code for HTML5.
*/
public String render( java.util.Collection< String > reports ) {
// This source code is not yet tested or made bullet-proof. Only meant for demonstrating concepts.
// Warning: This code is not thread-safe. Changes must be made before serious use.
// Warning: This code should be modified to produce proper HTML, such as escaping certain characters.
// This code generates minimal HTML5 as suggested here: http://www.brucelawson.co.uk/2010/a-minimal-html5-document/
// Big tip: Note that HTML allows the use of apostrophe (single-quote) in place of double-quote. Mixes better with Java source code.
// The backslash + 'n' is an escape sequence in Java to generate a linefeed (Ascii/Unicode 10) for use here as a NewLine.
// In real life, you woud test your rendered HTML with an HTML validator such as:
// • http://html5.validator.nu/
// • http://validator.w3.org/
StringBuilder html = new StringBuilder();
html.append( "\n" );
html.append( "\n" );
html.append( "
\n" );html.append( "\n" );
html.append( "
Report of Reports\n" );html.append( "\n\n" );
html.append( "
\n" );html.append( "
List of Reports
\n" );// Make a list in HTML
html.append( "
- \n" );
// Loop the list of reports passed as argument.
for ( String report : reports ) {
html.append( "
" + report + "\n" );}
html.append( "
\n" );html.append( "\n\n" );
html.append( "" );
return html.toString();
}
}
还有一个运行它的应用程序.
package com.example;
import java.util.ArrayList;
/**
*
* @author Basil Bourque
* © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
*/
public class App {
/**
* @param args
*/
public static void main( String[] args ) {
ArrayList< String > listOfReports = new ArrayList< String >();
listOfReports.add( "Some report #1" );
listOfReports.add( "Some report #2" );
listOfReports.add( "Some report #3" );
listOfReports.add( "Some report #4" );
listOfReports.add( "Some report #5" );
listOfReports.add( "Some report #6" );
ListToHtmlTransformer renderer = new ListToHtmlTransformer();
String renderedHtml = renderer.render( listOfReports );
System.out.println( "The following HTML was rendered: " + new java.util.Date().toString() );
System.out.println( renderedHtml );
System.out.println( "*** End of HTML ***" );
}
}
我试图在这里发布渲染的HTML,但StackOverflow试图将其解释为HTML而不是显示它.
额外提示:您可以在HTML和CSS中使用单引号(APOSTROPHE Unicode 39)而不是双引号(QUOTATION MARK Unicode 34)来分隔属性值等.浏览器处理得很好.单引号使您的Java代码编码变得更加容易,无需转义双引号.请注意我在上面的代码中的用法,例如'en'和'utf-8'.