import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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; public class GuestBookDom extends HttpServlet { private static Element createTableFromKeys(HttpServletRequest request, Document doc, Enumeration keys) { Element tbl = doc.createElement("table"); tbl.setAttribute("border", "1"); tbl.appendChild(doc.createTextNode("\n")); while (keys.hasMoreElements()) { Element row = doc.createElement("tr"); Element td1 = doc.createElement("td"); String left = (String)keys.nextElement(); td1.setTextContent(left); row.appendChild(td1); Element td2 = doc.createElement("td"); td2.setTextContent(request.getParameter(left)); row.appendChild(td2); tbl.appendChild(row); tbl.appendChild(doc.createTextNode("\n")); } return tbl; } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { request.setCharacterEncoding("Windows-31J"); try { // 読み込みの準備 String filename = getServletContext().getRealPath("/WEB-INF/Guests.html"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(filename); // 木構造の生成 Element root = doc.getDocumentElement(); // rootはhtml要素のはず Element body = (Element)root.getElementsByTagName("body").item(0); // body要素の検索 // 新しい tableの追加 body.appendChild(createTableFromKeys(request, doc, request.getParameterNames())); body.appendChild(doc.createTextNode("\n")); body.appendChild(doc.createElement("hr")); body.appendChild(doc.createTextNode("\n")); // 出力処理 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(); getServletContext().getRequestDispatcher("/WEB-INF/Guests.html") .forward(request, response); } catch (Exception e) { response.setContentType("text/html; charset=Windows-31J"); PrintWriter out = response.getWriter(); out.println("
");
			e.printStackTrace(out);
			out.println("
"); } } }