import java.io.*; import javax.servlet.http.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Text; import org.xml.sax.InputSource; public class GuestBookDom extends HttpServlet { private static void appendNewline(Document doc, Element e) { Text txt = doc.createTextNode("\n"); e.appendChild(txt); } private static void writeTableRow(Document doc, Element tbl, String left, String right) { Element row = doc.createElement("tr"); Element td1 = doc.createElement("td"); td1.setTextContent(left); row.appendChild(td1); Element td2 = doc.createElement("td"); td2.setTextContent(right); row.appendChild(td2); tbl.appendChild(row); appendNewline(doc, tbl); } private static Element createTable(HttpServletRequest request, Document doc) { Element tbl = doc.createElement("table"); tbl.setAttribute("border", "1"); appendNewline(doc, tbl); writeTableRow(doc, tbl, "名前", request.getParameter("名前")); writeTableRow(doc, tbl, "メールアドレス", request.getParameter("メールアドレス")); writeTableRow(doc, tbl, "ホームページ", request.getParameter("ホームページ")); writeTableRow(doc, tbl, "ひとこと", request.getParameter("ひとこと")); return tbl; } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html; charset=Windows-31J"); request.setCharacterEncoding("Windows-31J"); PrintWriter out = response.getWriter(); out.println(""); try { // 読み込みの準備 String filename = getServletContext().getRealPath("/Guests.html"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(new FileReader(filename)); is.setEncoding("Shift_JIS"); Document doc = db.parse(is); // 木構造の生成 Element root = doc.getDocumentElement(); // rootはhtml要素のはず Element body = (Element)root.getElementsByTagName("body").item(0); // body要素の検索 // 新しい tableの追加 body.appendChild(createTable(request, doc)); appendNewline(doc, body); body.appendChild(doc.createElement("hr")); appendNewline(doc, body); // 出力処理 TransformerFactory fac = TransformerFactory.newInstance(); Transformer tran = fac.newTransformer(); tran.setOutputProperty(OutputKeys.ENCODING, "Shift_JIS"); // 注: Windows-31Jは少し不都合がある OutputStream o = new FileOutputStream(filename); StreamResult result = new StreamResult(o); tran.transform(new DOMSource(doc.getDocumentElement()), result); o.close(); out.println("御記帳有難うございました。
"); out.println("ゲストブックはこちらです。"); } catch (Exception e) { e.printStackTrace(out); } out.println(""); out.close(); } }