Листинг 7.6. Метод doPost класса QuestionnaireServ (QuestionnaireServ.java)
public void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = new PrintWriter(resp.getOutputStream()); //System.out.println("Start doPost"); HttpSession session = req.getSession(false); try { if( session == null ){ errorMsg(out, "No Session ", null ); return ; } Interpreter terpret = (Interpreter)session.getValue("xmldocument"); //deprecated //in 2.2 API we use this // (Interpreter)session.getAttribute("xmldocument"); Recorder rb = (Recorder) session.getValue("recorder"); // (Recorder) session.getValue("recorder"); if( terpret == null || rb == null ){ errorMsg( out, "Data not recovered from Session", null ); return; } terpret.doPostQ( out, req, rb ); footer( out ); }catch(Exception e ){ errorMsg( out, "doPost ", e ); } }
В листинге 7.7 показаны некоторые полезные вспомогательные методы класса QuestionnaireServ. Используя метод footer для размещения закрывающих те- гов на каждой странице, можно внизу указывать версию сервлета. Это очень удобно на этапе разработки, а впоследствии из финальной версии сервлета эти теги можно легко удалить.
Отладка сервлетов может оказаться очень непростым делом, особенно если ошибки проявляются лишь время от времени. Отладка особенно затрудняется в том случае, если пользователи не могут четко и однозначно выразить свои проблемы. Для сообщения об ошибках мы предпочитаем использовать метод erroMsg. Если ошибка связана с каким-либо исключением, то на HTML-странице появится сообщение с содержимым стека. Там же указывается и электронный адрес, по которому пользователь может послать сообщение об ошибке и, мы надеемся, копию содержимого стека. Разумеется, вам следует заменить приведенный ниже электронный адрес на свой.