Professional Documents
Culture Documents
3-4-2013
1 REQUISITOS
Tener Instalado Netbeans IDE 7.3 versin Completa o Puede descargarlo de la siguiente url https://netbeans.org/downloads/index.html. Tener instalado Apache TomCat para la ejecucin de la aplicacin Web o Puede descargarlo de la siguiente url http://tomcat.apache.org/download-70.cgi. o Nota: En la instalacin de Netbeans tiene disponible la instalacin de TomCat Tener instalado Mysql 5.6. http://www.mysql.com/downloads/mirror.php?id=403015 Tener una BD en Mysql, para este ejemplo usaremos la dbAkihabara y la tabla de estudio, puede crearla con el siguiente cdigo:
delimiter $$ CREATE DATABASE `dbakihabara` /*!40100 DEFAULT CHARACTER SET latin1 */$$ CREATE TABLE `estudio` ( `idEstudio` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(45) NOT NULL, PRIMARY KEY (`idEstudio`), UNIQUE KEY `idempresa_UNIQUE` (`idEstudio`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1$$
3-4-2013
4. Seleccione la opcin [Java Web] y [Web Application] y de clic en [Next>] 5. Modifique ahora el nombre del proyecto a JSPServlets_DBEJ01 esto es opcional y la localizacin de la ubicacin donde se creara su proyecto. De clic en [Next>]
6. Es hora de selecciona el servidor en el que estar nuestra aplicacin. Si instalo Netbeans con Apache incluido le saldr como seleccin automtica, si no puede buscar su instalacin de apache TomCat con el botn de [Add] y seleccionar donde la instalo. Nota se le pedir el nombre de usuario y contrasea para poder acceder al servidor.
3-4-2013
7. En la selccion del frameworks, no seleccionaremos ninguno para este ejemplo. De clic en [Finish]
3-4-2013
2. Ubiquese en la opcion de Libraries de la parte izquierda de la ventana en la seecion de [Categories] y de clic. 3. Ahora agregaremos el conector de mysql a la BD, de clic en [Add Library]
Una vez de que le dio clic, se mostrara la librera agregada como este.
Con esta librera tenemos ahora la posibilidad de hacer conexiones a la BD de MySQL desde nuestro proyecto.
3-4-2013
2. En la ventana que le aparecera cambien el nombre del paquete por entidades.De clic
en [Finish]
3-4-2013
3. Ahora crearemos las clases entidades vinculadas a la BD, con ayuda de la persistencia. De clic derecho en un proyecto Seleccione [New] y de clic en [Entity Classes from Database]
4. Una vez abierta la ventana en la cuadro desplegable [Database Connetion:] Seleccione la opcin [New Database Connection].
16. Seleccione el tipo de Driver, seleccione MySQL (Connector/J driver) y de clic en [Next>]
3-4-2013
5. Ahora configure la conexin a la BD, para nuestra BD local el host sera localhost o igualmente 127.0.0.1 , el puerto por default es el 3306 pero MySQL lo tenemos configurado en el 3308 en nuestro caso. La base de datos a la que nos conectaremos es la que explicamos al principio del documento, a dbakihabara El usuario por default es root, la contrasea es la misma con la que accedemos a mysql. 6. De clic en [Test Connection] para comprobar la conexin a la BD sea exitosa.
3-4-2013
7. Seleccione ahora la tabla a la que desea crear una clase persistente. Ej: estudio Tome encuenta que para esto es necesario que la table tenga llave primaria si no solo puede existir como atributo de una clase de una tabla de entidad fuerte. De clic en [Next>]
3-4-2013
9.
De clic en [Finish]. Con esto ya tiene acceso a la Base de datos de DBAkihabara especificamente a la tabla Estudio.
3-4-2013
Estudio.java Persistence.xml
El archivo persistence contiene los datos para realizar la conexin a la base de datos y que clases son entidades, por las cuales podra uste hacer persistencia de sus datos en la BD.
3-4-2013
/** * * @author Kuro */ @Entity @Table(name = "estudio") @XmlRootElement @NamedQueries({ @NamedQuery(name = "Estudio.findAll", query = "SELECT e FROM Estudio e"), @NamedQuery(name = "Estudio.findByIdEstudio", query = "SELECT e FROM Estudio e WHERE e.idEstudio = :idEstudio"), @NamedQuery(name = "Estudio.findByNombre", query = "SELECT e FROM Estudio e WHERE e.nombre = :nombre")}) public class Estudio implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "idEstudio") private Integer idEstudio; @Basic(optional = false) @Column(name = "nombre") private String nombre; public Estudio() { } public Estudio(Integer idEstudio) { this.idEstudio = idEstudio; } public Estudio(Integer idEstudio, String nombre) { this.idEstudio = idEstudio; this.nombre = nombre; } public Integer getIdEstudio() { return idEstudio; } public void setIdEstudio(Integer idEstudio) { this.idEstudio = idEstudio; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; }
3-4-2013
@Override public int hashCode() { int hash = 0; hash += (idEstudio != null ? idEstudio.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Estudio)) { return false; } Estudio other = (Estudio) object; if ((this.idEstudio == null && other.idEstudio != null) || (this.idEstudio != null && !this.idEstudio.equals(other.idEstudio))) { return false; } return true; } @Override public String toString() { return "entidades.Estudio[ idEstudio=" + idEstudio + " ]"; } }
Esta es una clase Entidad, sirve para hacer persistencia en la base de datos
3-4-2013
2.2.2 EstudioJpaController 1. Ahora agregue un controlador para la clase entidad para esto, agregue un nuevo objeto de tipo JPAController
2. Seleccione la clase entidad, ej. Estudio. Si no aparece ninguna es que su clase entidad no fue creada correctamente. De clic en [Next >]
3-4-2013
Puede ver cdigo generado, con esta clase puede usted crea, modificar, buscar, y eliminar registros por medio de la persistencia.
package controlador; import import import import import import import import import import controlador.exceptions.NonexistentEntityException; entidades.Estudio; java.io.Serializable; java.util.List; javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.Query; javax.persistence.EntityNotFoundException; javax.persistence.criteria.CriteriaQuery; javax.persistence.criteria.Root;
public class EstudioJpaController implements Serializable { public EstudioJpaController(EntityManagerFactory emf) { this.emf = emf; } private EntityManagerFactory emf = null; public EntityManager getEntityManager() { return emf.createEntityManager(); }
2.2.2.1
2.2.2.2
3-4-2013
*/ public String edit(Estudio estudio) throws NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin();//comenzando la transaccion estudio = em.merge(estudio);//Actualizando datos con el metodo merge em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = estudio.getIdEstudio(); if (findEstudio(id) == null) { throw new NonexistentEntityException("The estudio with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } return "Transaccion finalizada"; } }
2.2.2.3
la
3-4-2013
throw new NonexistentEntityException("The estudio with id " + id + " no longer exists.", enfe); } } finally { if (em != null) { em.close(); } return " - Finalizada la transaccion"; } }
public List<Estudio> findEstudioEntities() { return findEstudioEntities(true, -1, -1); } public List<Estudio> findEstudioEntities(int maxResults, int firstResult) { return findEstudioEntities(false, maxResults, firstResult); } private List<Estudio> findEstudioEntities(boolean all, int maxResults, int firstResult) { EntityManager em = getEntityManager(); try { CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Estudio.class)); Query q = em.createQuery(cq); if (!all) { q.setMaxResults(maxResults); q.setFirstResult(firstResult); } return q.getResultList(); } finally { em.close(); } } public Estudio findEstudio(Integer id) { EntityManager em = getEntityManager(); try { return em.find(Estudio.class, id); } finally { em.close(); } } public int getEstudioCount() { EntityManager em = getEntityManager(); try { CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
3-4-2013
Root<Estudio> rt = cq.from(Estudio.class); cq.select(em.getCriteriaBuilder().count(rt)); Query q = em.createQuery(cq); return ((Long) q.getSingleResult()).intValue(); } finally { em.close(); } } }
2.2.3
Generador
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package controlador; import import import import import import import import controlador.exceptions.NonexistentEntityException; entidades.Estudio; java.io.PrintWriter; java.util.List; javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.Persistence; static servlets.CrearEstudio.mostrarResult;
public class Generador { static final EntityManagerFactory emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD //Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml public static String crearSelect() { String html="<select name=\"idestudio\" id=\"idestudio\">"; EstudioJpaController con=new EstudioJpaController(emf); List<Estudio> list=con.findEstudioEntities(con.getEstudioCount(), 0); for(Estudio estudio:list) { html=html+"<option value=\""+estudio.getIdEstudio()+"\">"+estudio.getIdEstudio()+"\t"+estudio.get Nombre()+"</option>"; } html=html+"</select>"; return html; }
3-4-2013
2.3 SERVLETS
1. Ahora cree los Servlets que harn la funcines de creacin eliminacin y actualizacin de los registros para esto, de la misma forma que crea las clases y los paquetes, ahora cree un servlet. Busque [Servlet]
2. Cambie el nombre al servlet por CrearEstudio y el paquete cmbielo a servlets, si no creo el paquete escriba el nombre y este se creara junto con la clase. De clic en [Finish]
Cree los otros dos servlets. ActualizarEstudio y EliminarEstudio En total debe tener 3 archivos en el paquete servlets
3-4-2013
2.3.1 2.3.1.1
Crear doPost Una vez creado el servlet CrearEstudio busque el mtodo doPost y modifquelo con el siguiente cdigo.
/** * 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 { /*Creando un objeto de la Clase Estudio **/ Estudio estudio=new Estudio(); /**Comprobando que los parametros no esten vacios**/ if(request.getParameter("estudio").isEmpty()) errorNoData(response);//Si esta vacio llamamos el metodo errorNoData(); para que muestre msg de error else //si no { estudio.setNombre(request.getParameter("estudio")); /**Manejador de entidades que nos permitiran acceder a la BD**/ EntityManager em; EntityManagerFactory emf; emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD
3-4-2013
//Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml EstudioJpaController con=new EstudioJpaController(emf);//Creamos un objeto de tipo Controlador de estudio //Creamos el estudio al crear se esta persitiendo en la BD PrintWriter out = response.getWriter(); out.println("<p>"+con.create(estudio)+"</p>"); mostrarResult(out, con); } }
2.3.1.2 Mostrar Resultados Agregue Este mtodo ser necesario para realizar una consulta de los registros existentes, este mtodo lo utilizara tambin en las otras clases servlets.
/** * Metodo para mostrar los resultados de consulta de la BD * @param out * @param con */ public static void mostrarResult(PrintWriter out,EstudioJpaController con) { int nmax=10; int firts=0; List<Estudio> list=con.findEstudioEntities(nmax, firts);//Llamamos al metodo para buscar los //estudios en forma de lista donde podemos especificar el numero maximo de //resultados y desde que resultado puede comenzar a enviarnos (bloque) out.println("<p>Estudios</p>"); out.println("<table>" ); out.println("<tr>\n" + "<td>ID-Estudio</td>\n"); out.println("<td>Estudio</td>\n" + "</tr>"); for(Estudio es: list) { out.println("<tr>\n" + "<td>"+es.getIdEstudio()+"</td>\n"); out.println("<td>"+es.getNombre()+"</td>\n" + "</tr>"); } out.println( "</table>"); } @Override public String getServletInfo() { return "Short description";
3-4-2013
}// </editor-fold>
2.3.1.3 ErrorNoData Agregue el siguiente mtodo en los 3 servlets. Con este mtodo se imprime un mensaje de error, puede modificarlo a su gusto.
private void errorNoData(HttpServletResponse response) { PrintWriter out = null; try { out = response.getWriter(); out.println("<p>Error no hay datos que insertar</p>"); } catch (IOException ex) {
} finally { out.close(); } } }
2.3.2
Actualizar Una vez creado el servlet ActualizarEstudio busque el mtodo doPost y modifquelo con el siguiente cdigo.
protected void doPost(HttpServletRequest request, response) throws ServletException, IOException { try { /*Creando un objeto de la Clase Estudio **/ Estudio estudio=new Estudio(); /**Comprobando que los parametros no esten vacios**/ if(request.getParameter("idestudio").isEmpty() request.getParameter("estudio").isEmpty()) errorNoData(response);//Si esta vacio llamamos errorNoData(); para que muestre msg de error else //si no { try { HttpServletResponse
|| el metodo
estudio.setIdEstudio(Integer.parseInt(request.getParameter("idestudio"))); estudio.setNombre(request.getParameter("estudio")); /**Manejador de entidades que nos permitiran acceder a la BD**/ /// EntityManager em; EntityManagerFactory emf;
3-4-2013
emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD //Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml EstudioJpaController con=new EstudioJpaController(emf);//Creamos un objeto de tipo Controlador de estudio //Creamos el estudio al crear se esta persitiendo en la BD PrintWriter out = response.getWriter(); out.println("<p>"+con.edit(estudio)+"</p>"); mostrarResult(out, con); } catch(NumberFormatException ex) { errorNoData(response); } catch (NonexistentEntityException ex) { errorNoData(response); } catch (Exception ex) { errorNoData(response); } } } catch(java.lang.NullPointerException e) { errorNoData(response); }
2.3.3 Eliminar Una vez creado el servlet EliminarEstudio, modifique el mtodo post por el cual por medio de parmetros enviado por el formulario eliminaremos el registro con el id equivalente al parmetro.
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { /*Creando un objeto de la Clase Estudio **/ Estudio estudio=new Estudio(); /**Comprobando que los parametros no esten vacios**/ if(request.getParameter("idestudio").isEmpty() ) errorNoData(response);//Si esta vacio llamamos el metodo errorNoData(); para que muestre msg de error else //si no { try
3-4-2013
{ estudio.setIdEstudio(Integer.parseInt(request.getParameter("idestudio"))); /**Manejador de entidades que nos permitiran acceder a la BD**/ /// EntityManager em; EntityManagerFactory emf; emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD //Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml EstudioJpaController con=new EstudioJpaController(emf);//Creamos un objeto de tipo Controlador de estudio PrintWriter out = response.getWriter(); out.println("<p>"+con.destroy(estudio.getIdEstudio())+"</p>\n" );//Mandamos a llamar el metodo para que elimine el registro //de la BD mostrarResult(out, con); } catch(NumberFormatException ex) { errorNoData(response); } catch (NonexistentEntityException ex) { errorNoData(response); } catch (Exception ex) { errorNoData(response); } } } catch(java.lang.NullPointerException e) { errorNoData(response); } }
2.4 JSP
2.4.1 Crear 1. Cree las paginas JSP, Actualizar, Crear, Eliminar
3-4-2013
2. Modifique el cdigo por el siguiente 3. El servlet al que se comunicara ser el de CrearEstudio por el mtodo post
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form id="form1" name="form1" method="post" action="../CrearEstudio"> <p> <label for="Estudio">Estudio</label> <input type="text" name="estudio" id="estudio" /> </p> <p> <input type="submit" name="btnInsertar" id="btnInsertar" value="Insertar" /> </p> </form> </body> </html>
Ejecute el archivo complelo con ctrl+mayus+f6, o con clic derecho y de clic en la opcin Run File
3-4-2013
Base de datos:
2.4.2
Actualizar
<%--Imports de clases--%> <%@page import="controlador.Generador"%> <%@page import="servlets.CrearEstudio"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body>
3-4-2013
<form id="form1" name="form1" method="post" action="../ActualizarEstudio"> <p> <label>ID-Estudio:</label> <%--Llamando a metodo estico de la clase Generador--%> <% out.print(Generador.crearSelect()); %> </p> <p><label>Estudio:</label> <input type="text" value="" name="estudio" id="estudio"> </p> <p> <input type="submit" name="btnActualizar" id="btnEliminar" value="Actualizar" /> </p> </form> </body> </html>
Resultado:
Base de datos:
3-4-2013
2.4.3
Eliminar
<%--Imports de clases--%> <%@page import="controlador.Generador"%> <%@page import="servlets.CrearEstudio"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form id="form1" name="form1" method="post" action="../EliminarEstudio"> <p> <label>ID-Estudio:</label> <%--Llamando a metodo estico de la clase Generador--%> <% out.print(Generador.crearSelect()); %> </p> <p> <input type="submit" name="btnEliminar" id="btnEliminar" value="Eliminar" /> </p> </form> </body> </html>
Resultado:
3-4-2013
Base de datos: