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();
%>

Related entries: