X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Fnext%2FHtml.java;h=978cad2e500c530441353162ab8b106f80a4d5a7;hb=c54407f455eaab62e2b254cac4ba4eab3986e776;hp=c90bb40b2d891638c96b03915e5a40003a6e18b3;hpb=5203590bbc5672cc6cc2df1b95179a97a2e42cda;p=jsvc.git diff --git a/src/dolda/jsvc/next/Html.java b/src/dolda/jsvc/next/Html.java index c90bb40..978cad2 100644 --- a/src/dolda/jsvc/next/Html.java +++ b/src/dolda/jsvc/next/Html.java @@ -5,6 +5,8 @@ import org.w3c.dom.ls.*; import javax.xml.validation.*; import java.net.*; import java.io.*; +import dolda.jsvc.*; +import dolda.jsvc.util.*; public class Html extends DocBuffer { public static final String ns = "http://www.w3.org/1999/xhtml"; @@ -18,8 +20,8 @@ public class Html extends DocBuffer { Html buf = new Html("-//W3C//DTD XHTML 1.1//EN", "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"); Node html = buf.doc.getDocumentElement(); Node head = DomUtil.insertel(html, "head"); - head.appendChild(buf.makecursor("head")); Node tit = DomUtil.insertel(head, "title"); + head.appendChild(buf.makecursor("head")); DomUtil.inserttext(tit, title); Node body = DomUtil.insertel(html, "body"); body.appendChild(buf.makecursor("body")); @@ -43,7 +45,10 @@ public class Html extends DocBuffer { } public void validate() { - Validator val = schema.newValidator(); + Validator val; + synchronized(schema) { + val = schema.newValidator(); + } try { val.validate(new javax.xml.transform.dom.DOMSource(doc)); } catch(org.xml.sax.SAXException e) { @@ -53,4 +58,36 @@ public class Html extends DocBuffer { throw(new Error(e)); } } + + private static boolean asxhtml(Request req) { + String ah = req.inheaders().get("Accept"); + AcceptMap ctmap = AcceptMap.parse((ah == null)?"":ah); + AcceptMap.Entry ha = ctmap.accepts("text/html"); + AcceptMap.Entry xa = ctmap.accepts("text/xhtml+xml"); + if(xa == null) + xa = ctmap.accepts("application/xhtml+xml"); + if((ha == null) && (xa == null)) + return(false); + else if((ha != null) && (xa == null)) + return(false); + else if((ha == null) && (xa != null)) + return(true); + if(xa.q < ha.q) + return(false); + return(true); + } + + public void output(Request req) throws IOException { + finalise(); + validate(); + XmlWriter w; + if(asxhtml(req)) { + req.outheaders().put("Content-Type", "application/xhtml+xml"); + w = new XHtmlWriter(doc); + } else { + req.outheaders().put("Content-Type", "text/html; charset=utf-8"); + w = new HtmlWriter(doc); + } + w.write(req.output()); + } }