htmlgenerator.java
来自「很棒的web服务器源代码」· Java 代码 · 共 366 行
JAVA
366 行
// HtmlGenerator.java// $Id: HtmlGenerator.java,v 1.9 2003/02/26 12:38:24 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.html ;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.util.Vector;import org.w3c.www.mime.MimeType;class HtmlHead { String title = null; String base = null; Vector links = null; HtmlStyle style = null; HtmlScript script = null; StringBuffer meta = null ; // FIXME /** * @return the current HtmlStyle (if any) */ public HtmlStyle getStyle() { return style; } /** * Create and add/replace a new style in the head * @param type, the MimeType of the style * @param style, the full text of the style sheet */ public void addStyle(MimeType type, String style) { this.style = new HtmlStyle(type, style); } /** * Add or append style to the current Style * @param style, the full text of the style sheet to append */ public void addStyle(String style) { if(this.style == null) this.style = new HtmlStyle(style); else this.style.append(style); } /** * Create and add/replace a new script in the head * @param lang, the scripting language * @param style, the full text (or a part) of the script */ public void addScript(String lang, String script) { this.script = new HtmlScript(lang, script); } /** * Add or append script to the current Style * @param script, the full text (or a part) of the script. */ public void addScript(String script) { if (this.script == null) this.script = new HtmlScript(script); else this.script.append(script); } /** * set the HREF part of the BASE element */ public void addBase(String base) { this.base = base; } /** * Add a link to the head * @param link an HtmlLink */ public void addLink(HtmlLink link) { if(links == null) links = new Vector(4); links.addElement(link); } /** Add some meta-http-equiv information * @param name, the name of the meta-http * @param value, the name of the meta-http */ public void addMeta (String name, String value) { if ( meta == null ) { meta = new StringBuffer ("<meta http-equiv=\"" + name + "\" content=\"" + value +"\">") ; } else { meta.append ("<meta http-equiv=\"" + name + "\" content=\"" + value + "\">") ; } } /** * generate a String format of the HEAD element that can * be inserted in a HTML document */ public String toString() { StringBuffer strlink = new StringBuffer(""); if(links != null) { for(int i=0; i<links.size(); i++) strlink.append(links.elementAt(i).toString()); } return "<head>\n <title>" + title + "</title>\n" + ((meta != null) ? meta.toString() : "") + ((base != null) ? " <base href=\"" + base + "\">\n":"") + strlink.toString() + ((script != null) ? script.toString() : "") + ((style != null) ? style.toString() : "") + "</head>" ; } public HtmlHead(String title) { this.title = title; }} /** * A simple HTML generator. * This class implements an HTML generator that allows to output dynamic * HTML content out. */public class HtmlGenerator { private static MimeType defaultType = MimeType.TEXT_HTML; HtmlHead head = null ; StringBuffer body = null ; String content = null ; // content once closed. boolean bodytag = true ; // frameset hack String encoding = null ; // the encoding, default is ISO8859_1 private MimeType type = null ; /** * Get this stream MIME type. * This defaults to <strong>text/html</strong>. */ public MimeType getMimeType () { return (type == null) ? defaultType : type; } /** * Don't emit body tag. This is usefull in conjunction with the FRAMESET * tag, that requires that no BODY tag be emited. * @param value If <strong>true</strong>, a BODY tag will be emited. */ public void emitBODYTag (boolean value) { this.bodytag = value ; } /** * Append the given string, escaping all special characters. This can be * used only if you know that the string you are inserting doesn't contain * HTML tags */ public void appendAndEscape (String content) { for (int i = 0 ; i < content.length() ; i++) { char ch = content.charAt(i) ; switch (ch) { case '<': body.append ("<") ; break ; case '>': body.append (">") ; break ; default: body.append (ch) ; break; } } } /** * Add a Base element to the head * @param the href part of the BASE element */ public void addBase(String base) { head.addBase(base); } /** * Add style to this html page * @see org.w3c.jigsaw.html.HtmlStyle */ public void addStyle(String style) { head.addStyle(style); } /** * Add style to this html page * @see org.w3c.jigsaw.html.HtmlStyle */ public void addStyle(MimeType type, String style) { head.addStyle(type, style); } /** * Add script to this html page * @see org.w3c.jigsaw.html.HtmlScript */ public void addScript(String script) { head.addScript(script); } /** * Add script to this html page * @see org.w3c.jigsaw.html.HtmlScript */ public void addScript(String lang, String script) { head.addScript(lang, script); } /** * Add a link to the head of this html document * @param link the link */ public void addLink(HtmlLink link) { head.addLink(link); } /** * Append the given string to the document body. * @param The HTML string to append. */ public void append (String content) { body.append (content) ; } /** * Append the two strings to the document body. * <code>append("x"+"y");</code> is equivalent but slower than * <code>append("x", "y");</code>. * @param str1 The first string. * @param str2 The second string. */ public void append(String str1, String str2) { body.append(str1) ; body.append(str2) ; } public void append(String s1, String s2, String s3) { body.append(s1); body.append(s2); body.append(s3); } /** * Get the length of this html document * @return the length in bytes of the document */ public int length () { if ( content == null ) close () ; return content.length() ; } /** * Close the given document: its composition is now finished. * @return The content length for this document. */ public void close () { if ( content != null ) return ; content="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " +"Transitional//EN\"\n" +" \"http://www.w3.org/TR/html4/loose.dtd\">\n" +"<html>\n" + head.toString() + "\n" + (bodytag ? ("<body>\n" + body.toString() + "</body>\n") : body.toString()) + "</html>" ; return ; } /** * adds a htt-equiv meta tag to the head of the document * @param name the name of the pseudo http tag * @param value, the string value of the pseudo header */ public void addMeta (String name, String value) { head.addMeta(name, value); } /** * @deprecated * @see addMeta */ public void meta (String name, String value) { addMeta(name, value); } /** * Get the input string for reading the document. * @return An input stream to get the generated document from. */ public InputStream getInputStream () { close() ; try { return new ByteArrayInputStream (content.getBytes(encoding)); } catch (UnsupportedEncodingException ex) { throw new RuntimeException (this.getClass().getName() + "[getInputStream] Unable to convert" + "properly char to bytes"); } } /** * create the HTML generator with a specific encoding * @param the title, a String * @param the encoding used, also a String */ public HtmlGenerator (String title, String encoding) { this.head = new HtmlHead(title); this.body = new StringBuffer() ; this.encoding = encoding; String param[] = new String[1]; String value[] = new String[1]; param[0] = "charset"; // a translation table may be needed there value[0] = encoding; this.type = new MimeType("text", "html", param, value); } /** * create the HTML generator with the default HTML encoding "ISO8859_1" * @param title, the document title */ public HtmlGenerator (String title) { this(title, "ISO-8859-1"); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?