/** * Handles the HTTP <code>GET</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userPath = request.getServletPath(); HttpSession session = request.getSession(); Category selectedCategory; Collection<Product> categoryProducts; // if category page is requested if (userPath.equals("/category")) { // get categoryId from request String categoryId = request.getQueryString(); if (categoryId != null) { // get selected category selectedCategory = categoryFacade.find(Short.parseShort(categoryId)); // place selected category in session scope session.setAttribute("selectedCategory", selectedCategory); // get all products for selected category categoryProducts = selectedCategory.getProductCollection(); // place category products in session scope session.setAttribute("categoryProducts", categoryProducts); } // if cart page is requested } else if (userPath.equals("/viewCart")) { String clear = request.getParameter("clear"); if ((clear != null) && clear.equals("true")) { ShoppingCart cart = (ShoppingCart) session.getAttribute("cart"); cart.clear(); } userPath = "/cart"; // if checkout page is requested } else if (userPath.equals("/checkout")) { ShoppingCart cart = (ShoppingCart) session.getAttribute("cart"); // calculate total cart.calculateTotal(surcharge); // forward to checkout page and switch to a secure channel // if user switches language } else if (userPath.equals("/chooseLanguage")) { // get language choice String language = request.getParameter("language"); // place in request scope request.setAttribute("language", language); String userView = (String) session.getAttribute("view"); if ((userView != null) && (!userView.equals("/index"))) { // index.jsp exists outside 'view' folder // so must be forwarded separately userPath = userView; } else { // if previous view is index or cannot be determined, send user to welcome page try { request.getRequestDispatcher("/index.jsp").forward(request, response); } catch (Exception ex) { ex.printStackTrace(); } return; } } // use RequestDispatcher to forward request internally String url = "/WEB-INF/view" + userPath + ".jsp"; try { request.getRequestDispatcher(url).forward(request, response); } catch (Exception ex) { ex.printStackTrace(); } }
/** * Handles the HTTP <code>POST</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userPath = request.getServletPath(); HttpSession session = request.getSession(); ShoppingCart cart = (ShoppingCart) session.getAttribute("cart"); Validator validator = new Validator(); // if addToCart action is called if (userPath.equals("/addToCart")) { // if user is adding item to cart for first time // create cart object and attach it to user session if (cart == null) { cart = new ShoppingCart(); session.setAttribute("cart", cart); } // get user input from request String productId = request.getParameter("productId"); if (!productId.isEmpty()) { Product product = productFacade.find(Integer.parseInt(productId)); cart.addItem(product); } userPath = "/category"; // if updateCart action is called } else if (userPath.equals("/updateCart")) { // get input from request String productId = request.getParameter("productId"); String quantity = request.getParameter("quantity"); boolean invalidEntry = validator.validateQuantity(productId, quantity); if (!invalidEntry) { Product product = productFacade.find(Integer.parseInt(productId)); cart.update(product, quantity); } userPath = "/cart"; // if purchase action is called } else if (userPath.equals("/purchase")) { if (cart != null) { // extract user data from request String name = request.getParameter("name"); String email = request.getParameter("email"); String phone = request.getParameter("phone"); String address = request.getParameter("address"); String cityRegion = request.getParameter("cityRegion"); String ccNumber = request.getParameter("creditcard"); // validate user data boolean validationErrorFlag = false; validationErrorFlag = validator.validateForm(name, email, phone, address, cityRegion, ccNumber, request); // if validation error found, return user to checkout if (validationErrorFlag == true) { request.setAttribute("validationErrorFlag", validationErrorFlag); userPath = "/checkout"; // otherwise, save order to database } else { int orderId = orderManager.placeOrder(name, email, phone, address, cityRegion, ccNumber, cart); // if order processed successfully send user to confirmation page if (orderId != 0) { // in case language was set using toggle, get language choice before destroying session Locale locale = (Locale) session.getAttribute("javax.servlet.jsp.jstl.fmt.locale.session"); String language = ""; if (locale != null) { language = (String) locale.getLanguage(); } // dissociate shopping cart from session cart = null; // end session session.invalidate(); if (!language.isEmpty()) { // if user changed language using the toggle, // reset the language attribute - otherwise request.setAttribute( "language", language); // language will be switched on confirmation page! } // get order details Map orderMap = orderManager.getOrderDetails(orderId); // place order details in request scope request.setAttribute("customer", orderMap.get("customer")); request.setAttribute("products", orderMap.get("products")); request.setAttribute("orderRecord", orderMap.get("orderRecord")); request.setAttribute("orderedProducts", orderMap.get("orderedProducts")); userPath = "/confirmation"; // otherwise, send back to checkout page and display error } else { userPath = "/checkout"; request.setAttribute("orderFailureFlag", true); } } } } // use RequestDispatcher to forward request internally String url = "/WEB-INF/view" + userPath + ".jsp"; try { request.getRequestDispatcher(url).forward(request, response); } catch (Exception ex) { ex.printStackTrace(); } }