Java Servlet Bookstore: Cart and Checkout Logic with Hibernate
Classified in Computers
Written on in
English with a size of 10.02 KB
LibreriaServlet: Java Servlet for an Online Bookstore
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: must start with '/' to indicate a path 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: must start with '/' to indicate a path relative to the current context String url = "/Tienda.jsp"; ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(request, response); } }Almacen: Data Access Class
package libreria;public class Almacen { Session session = null; public Almacen() { } public List<Libro> consultaListaLibrosSolicitados(List<String> listaIsbns) throws Exception { Map<String, Libro> conjuntoLibros = new HashMap<String, Libro>(listaIsbns.size()); for (String isbn : listaIsbns) { Libro libro = null; if (!conjuntoLibros.containsKey(isbn)) { libro = this.consultaLibro(Integer.parseInt(isbn)); } else { libro = conjuntoLibros.get(isbn); conjuntoLibros.remove(isbn); libro.incrementaCantidad(); } conjuntoLibros.put(isbn, libro); } Set<String> conjuntoIsbns = conjuntoLibros.keySet(); Iterator<String> it = conjuntoIsbns.iterator(); List<Libro> listaLibros = new ArrayList<Libro>(conjuntoIsbns.size()); while (it.hasNext()) { listaLibros.add(conjuntoLibros.get(it.next())); } return listaLibros; } public Libro consultaLibro(int isbn) throws SQLException { session = HibernateUtil.getSessionFactory().getCurrentSession(); Libro libro = null; org.hibernate.Transaction tx = session.beginTransaction(); Query q = session.createQuery("from Libro where isbn = '" + isbn + "'"); libro = (Libro) q.uniqueResult(); libro.setCantidad(1); tx.commit(); return libro; } public List<Libro> consultaLibrosDisponibles() throws SQLException { session = HibernateUtil.getSessionFactory().getCurrentSession(); org.hibernate.Transaction tx = session.beginTransaction(); Query q = session.createQuery("from Libro"); List resultados = (List<Libro>) q.list(); tx.commit(); return resultados; }}JSP Fragment: Rendering the Book List
List<Libro> listaLibros = (List<Libro>) request.getAttribute("librosDisponibles");%>Tienda Electrónica de Libros
JSP Page
Libros
Libro libro = listaLibros.get(i); String txtLibro = libro.getTitulo() + "; " + libro.getAutor() + "; " + libro.getPrecio();%>