package questionnaire; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.Vector; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.RequestDispatcher; 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 org.xml.sax.InputSource; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; /** * @author tsuhtan */ public class SaverServlet extends HttpServlet { private SaverServletConfig config = new SaverServletConfig(); private class SaverServletConfig { String response_url = null; } /** * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig) */ public void init (ServletConfig sc) throws ServletException { super.init (sc); config.response_url = sc.getInitParameter ("response_url"); } /** * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Document doc = getRequestAsDocument (req); Vector result_list = analyzeDocument (doc); for (int i = 0; i < result_list.size(); i++) { System.out.println (result_list.elementAt (i)); } sendResponse (req, res, result_list); } private Document getRequestAsDocument (HttpServletRequest req) { String content_type = req.getContentType(); int x = content_type.indexOf ('='); String charset = (x >= 0 ? content_type.substring (x + 1) : null); try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource ( (charset != null ? new BufferedReader (new InputStreamReader (req.getInputStream(), charset)) : req.getReader())); return db.parse (is); } catch (Exception e) { throw new RuntimeException (e); } } private class QuestionnaireResultSet { String questionnaire_id = null; String value = null; public String toString() { return "{" + questionnaire_id + "," + value + "}"; } } private Vector analyzeDocument (Document doc) { Node root = doc.getFirstChild(); NodeList result_list = root.getChildNodes(); Vector v = new Vector(); int count = result_list.getLength(); for (int i = 0; i < count; i++) { Node result = result_list.item (i); NodeList result_item_list = result.getChildNodes(); QuestionnaireResultSet rs = new QuestionnaireResultSet(); rs.questionnaire_id = getTextNodeValueAt (result_item_list, 0); rs.value = getTextNodeValueAt (result_item_list, 1); v.add (rs); } return v; } private String getTextNodeValueAt (NodeList list, int index) { Node node = list.item (index).getFirstChild(); return (node == null ? null : node.getNodeValue()); } private void sendResponse (HttpServletRequest req, HttpServletResponse res, Vector result_list) { RequestDispatcher dispatcher = req.getRequestDispatcher (this.config.response_url); try { dispatcher.forward (req, res); } catch (Exception e) { throw new RuntimeException (e); } } }