Java Servlet Bookstore: Cart and Checkout Logic Explained
LibreriaServlet
package servlet;
public class LibreriaServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
Almacen almacen = new Almacen();
List<Libro> librosDisponibles = new ArrayList<Libro>();
try {
librosDisponibles = almacen.consultaLibrosDisponibles();
} catch (Exception e) {
PrintWriter out = response.getWriter();
out.print("ERROR: " + e.getMessage());
out.close();
}
if (session != null) {
String accion = request.getParameter("Accion");
if (accion.equals("agregar")) {
List<String> listaIsbns = (List<String>) session.getAttribute("tienda.carro");
String isbn = request.getParameter("seleccionLibros");
Libro libro = null;
try {
libro = almacen.consultaLibro(Integer.parseInt(isbn));
if (libro != null) {
if (listaIsbns == null) {
listaIsbns = new ArrayList<String>(10);
}
listaIsbns.add(isbn);
session.setAttribute("tienda.carro", listaIsbns);
} else {
PrintWriter out = response.getWriter();
out.print("ERROR: Libro con ISBN " + isbn + " no está disponible.");
out.close();
}
} catch (Exception ex) {
PrintWriter out = response.getWriter();
out.print("ERROR: " + ex.getMessage());
out.close();
}
request.setAttribute("librosDisponibles", librosDisponibles);
try {
request.setAttribute("librosSolicitados", almacen.consultaListaLibrosSolicitados(listaIsbns));
} catch (Exception ex) {
Logger.getLogger(LibreriaServlet.class.getName()).log(Level.SEVERE, null, ex);
}
// IMPORTANT!! The path must start with '/' to indicate it is relative to the current context
String url = "/Tienda.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request, response);
} else if (accion.equals("comprar")) {
List<String> listaIsbns = (List<String>) session.getAttribute("tienda.carro");
try {
request.setAttribute("listaCompra", almacen.consultaListaLibrosSolicitados(listaIsbns));
} catch (Exception ex) {
Logger.getLogger(LibreriaServlet.class.getName()).log(Level.SEVERE, null, ex);
}
String url = "/Compra.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request, response);
}
} else {
request.setAttribute("librosDisponibles", librosDisponibles);
// IMPORTANT!! The path must start with '/' to indicate it is relative to the current context
String url = "/Tienda.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request, response);
}
}
}
JSP Fragment: Purchase List
List<Libro> listaCompra = (List<Libro>) request.getAttribute("librosSolicitados");
if (listaCompra != null && !listaCompra.isEmpty()) {
%>
for (int idx = 0; idx < listaCompra.size(); idx++) {
Libro libro = listaCompra.get(idx);
%>