JAXBでDTDのDOCTYPE宣言を出力
前にちらっと書いたJAXBでXHTMLを生成する方法でリンク集のページを書いてみた。結構いい感じだ。やっぱりプログラミング言語は強力。
ひとつ困ったのは、XHTML 1.0のStrictを使う場合、頭にDTDのDOCTYPE宣言を入れないと、w3cのバリデータ様がお怒りになってcomplienceテストに通らない事。で、JAXBでこれをやるには、どうすればいいのか良く分からなかった。結局宣言部をJAXBに出力させないようにして回避。
PrintWriter pw = new PrintWriter(out);
pw.println("<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>");
pw.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"");
pw.println("\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
pw.flush();
renderMyPage();
Marshaller m = jaxbContext.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.setProperty(Marshaller.JAXB_ENCODING, "Shift_JIS");
m.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);
m.marshal(HTML, out);
out.flush();
なんだかなぁという感じだけど、
あとはJSPにするかどうか。この仕組みならJSPにする必要なんて無いのだけど、JSPはホットデプロイが出来るから、楽なんだよね。ほんとにそれだけのため。本体が全て<% %>で囲まれているJSPなんて初めて書いた。とはいえやっぱりエラーが起きた時とか面倒だしエディタも使いにくい。JSPは継承が使えないのも痛い。extendsディレクティブで既存クラスからの継承はできるけど、JSP同士での継承が出来ないんじゃ、結局親クラスはwarに入れなきゃならないわけで。やっぱりJSPは使わない方がいいかもしれない。








