Электронный магазин на Java и XML

       

Сервлет SubmitOrder


Когда подтвержденные клиентом данные (то есть JSP-страница Confirmlnfo) отправлены, необходимо послать поставщику услуг по обработке сведения, связанные с оплатой заказа. Это делается с помощью сервлета SubmitOrder. Здесь мы используем не JSP-страницу, а сервлет, поскольку данная процедура, с одной стороны, требует довольно много кода, а с другой стороны, генерирует сравнительно немного выходных данных. Дело в том, что, как правило, создавать и отлаживать сервлеты проще, чем JSP-страницы, но отрицательной стороной сер- влетов является сложность генерируемого кода HTML.

Главная точка входа в сервлет — метод doGet, который получает объект Session, соответствующий текущему сеансу (листинг 5.24). Затем мы получаем объект Order, сформированный для этого сеанса предыдущими JSP-страницами. Далее для получения подтверждения данных кредитной карты используется класс TestPaymentAuthorizer. Если подтверждение получено, клиенту посылается соответствующее сообщение с помощью класса Emailег, вызывается метод, который записывает заказ в специальный файл, и вызывается JSP-страница Approved.jsp, создающая сообщение с информацией о подтверждении заказа и указанием идентификатора заказа. Если подтверждение не было получено, вызывается JSP-страница Declined .jsp и создается другое сообщение.

Листинг 5.24. Метод doGet сервлета SubmitOrder (SubmitOrder.java)

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import com.XmlEcomBook.Chap05.*;

// Explain why we used a servlet: easier to code, debug

public class SubmitOrder extends HttpServlet {

public void doGet(HttpServletRequest req,

HttpServletResponse res)



throws IOException, ServletException {

res.setContentType("text/html");

PrintWriter out = res.getWriter();

try {

HttpSession session = req.getSession();

Order order = (Order)session.getAttribute( "order" );

Authorization auth = TestPaymentAuthorizer.getAuthorization(order );

order.setAuthorization( auth );


if( auth.isApproved() ) {

//Emailer.sendConfirmation( order );

writeOrder( order );

getServletContext()

.getRequestDispatcher("/Approved.jsp").forward(req, res);

}

else {

getServletContext()

.getRequestDispatcher("/Declined.jsp").forward(req, res);

}

}

catch( Exception e )

{

e.printStackTrace(out); } }

Метод writeOrder используется для записи информации о заказе в файл XML. Этот метод помещает все файлы с заказами, поступившими в течение одного дня, в отдельную папку. Поэтому для определения даты (год, месяц и число месяца) создается специальный объект, GregorianCalendar. В имени папки указывается соответствующая дата, а название файла содержит идентификатор заказа. Метод mkdir класса File вызывается для проверки наличия данной папки, а затем с помощью метода writeXML объекта Order информация о заказе заносится в файл, как показано в листинге 5.25.



Листинг 5.25. Метод writeOrder (SubmitOrder.java)

private void writeOrder( Order order ) {

try

{

Calendar calendar = new GregorianCalendar();

int day = calendar.get( Calendar.DAY_OF_MONTH );

int month = calendar.get( Calendar.MONTH ) + 1;

int year = calendar.get( Calendar.YEAR );

String dir = "Orders_" + year + "-" + month + "-" + day;

String filename = "Order_" + order.getId() + ".xml";

File file = new File( dir );

file.mkdir();

FileWriter writer = new FileWriter( dir + File.separator + filename );

order.writeXML(writer);

writer.close();

}

catch( IOException e ) {

}

}

}

 




Содержание раздела