Методы doGet и doPost
Все запросы, выполняющиеся методом GET, просто перенаправляются методу doPost, как показано в листинге 4.5. Метод doPost объединяет стандартный раздел HEAD файла HTML и результаты выполнения трех методов — doPageTop, doPage- Mid и doPageEnd. Заметим, что обращение к методу getSession с параметром true приводит к созданию нового сеанса, то есть объекта HttpSession, если он еще не существует для данного пользователя.
Для того чтобы продемонстрировать методику отладки, мы проверим, является ли данный сеанс новым. Если сеанс окажется новым, мы присоединим объект CartListener и напечатаем идентификатор нового сеанса. Функции объекта CartLis- tener мы обсудим позже. Все инструкции, связанные с отладкой, будут удалены из финальной версии приложения, так как конструирование и вывод на печать объекта Date требуют больших затрат времени.
Листинг 4.5. Методы doGet и doPost (CatalogServ.java)
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost( req, resp );
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
resp.setContentType("text/html");
PrintWriter out = new PrintWriter(resp.getOutputStream());
outputHead( out );
HttpSession session = req.getSession(true);
if( session.isNew() ){
session.putValue( "listener", new CartListener() );
// session.setAttribute( "listener", new CartListener() );
System.out.print("Session is new " + session.getId() +
" " + new Date().toString() );
}
try {
doPageTop( req, resp, out, session );
doPageMid( req, resp, out, session );
doPageEnd( req, resp, out, session );
}catch( Exception e ){
e.printStackTrace( out );
}
out.println("</body>");
out.println("</html>");
out.close();
}
private void outputHead( PrintWriter out ){
out.println("<html>");
out.println("<head><title>Catalog Information</title>");
out.println( cssLink );
out.println("</head>\r\n<body>");
}
// compose and output all material at the top of the page
public void doPageTop( HttpServletRequest req, HttpServletResponse resp,
PrintWriter out, HttpSession session ){
out.print("<h1>XMLgifts</h1>");
out.print("<h2>Your Site Navigation Could Go Here</h2>\r\n");
}
В этом примере метод doPageTop очень прост, но в реальном коммерческом сайте этот метод можно использовать для отображения средств навигации по сайту и выполнения других функций.