Está en la página 1de 9

DESARROLLO WEB CON JAVA 1

PRÁCTICA NO. 11
DESARROLLO APLICACIÓN CRUD

Competencia

Desarrollar una aplicación web con java de altas, consultas, actualización y borrado de registros de
una base de datos.

Introducción

CRUD es un acrónimo de Crear, Leer, Actualizar y Eliminar (por sus siglas en inglés Create, Read,
Update and Delete) y corresponden a las operaciones básicas que se realizan en una base de datos.
La siguiente tabla muestra la operación SQL correspondiente a la operación CRUD.

CRUD SQL
Create INSERT
Read SELECT
Update UPDATE
Delete DELETE

Correlación con temas y subtemas del programa de estudio vigente

Está práctica se relaciona con el tema 4, Conectividad a bases de datos y los subtemas Verificación de
la conexión JDBC y Creación de recursos JDBC.

Medidas de seguridad e higiene

Utilizar una computadora personal conectada a corriente regulada en un laboratorio de cómputo de la


institución.

Material y equipo necesario

• Computadora con sistema operativo Linux, distribución Ubuntu


• Software de servidor de aplicaciones web y bases de datos
• Conexión a Internet

Metodología

11.1.-Desarrollo de aplicación CRUD de Películas


a)Crea la base de datos cinema con la tabla de la figura no.34:

Figura no.34 Tabla peliculas


b)En NetBeans crea un
nuevo proyecto Java Web con el nombre practica11_dwj_grupo, recuerda que las carpetas y archivos
que se creen en esta práctica estarán dentro de este proyecto.
DESARROLLO WEB CON JAVA 2

c)En WEB-INF crea el descriptor de despliegue, archivo web.xml, con el siguiente código:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<resource-ref>
<description>Conexión BD</description>
<res-ref-name>jdbc/cinemaBD</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<session-config><session-timeout>30</session-timeout></session-config>
</web-app>

d)Modifica context.xml en META-INF


<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/practica11_dwj_grupo">
<Resource name="jdbc/cinemaBD" auth="Container"
type="javax.sql.DataSource" maxActive="100" maxIdle="30"
maxWait="10000" username="root" password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/cinema?autoReconnect=true"/>
</Context>

e)Elimina el archivo index.html y crea index.jsp, incluye un menú que contenga enlaces a:
Inicio → index.jsp,
Registro → registro.jsp,
Consulta General → consultaGeneral.jsp
Consulta Individual → formularioIndividual.jsp

Figura no.35 index.jsp

f)Crea registro.jsp, el envio es hacia ServletRegistro

Figura no.36 Formulario registro.jsp


DESARROLLO WEB CON JAVA 3
g)Crea el paquete controlador y en éste crea ServletRegistro.jav. Incluye las sentencias import
necesarias y agrega el código siguiente:
private DataSource fuenteDatos = null;

public void init(ServletConfig config) throws ServletException {


try {
Context ctx = new InitialContext();
fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/cinemaBD");
} catch (Exception e) {
throw new ServletException("imposible recuperar fuente de datos");
}
}

protected void processRequest(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Connection conn = null; //conexion parcial
int id = Integer.valueOf(request.getParameter("idR"));
String titulo = request.getParameter("tituloR");
int anio = Integer.valueOf(request.getParameter("anioR"));
try {
synchronized (fuenteDatos) {
conn = fuenteDatos.getConnection();
if (conn == null) {
out.println("Error al recuperar la conexion, es nula <br/>");
throw new ServletException("Problemas con la conexion <br/>");
}
java.sql.Statement stmt = conn.createStatement();
String qry = "INSERT INTO peliculas (id, titulo,anio) VALUES ('"
+ id + "','" + titulo + "','" + anio + "');";
int resultado = stmt.executeUpdate(qry);
response.sendRedirect("resultadoRegistro.jsp?mensaje=Registro realizado");
}
} catch (Exception e) {
response.sendRedirect("resultadoRegistro.jsp?mensaje=Falla en registro");
} finally {
try {
conn.close();
} catch (Exception e) {
out.println("Error en proceso" + e.getMessage() + "<br/>");
}
}
out.close();
}

h)Crea el archivo header.jsp que contenga el menú de navegación.

En las vistas de esta aplicación se está usando Bootstrap.

i)Crea resultadoRegistro.jsp, incluye el siguiente código


<body>
<%@ include file="header.jsp" %>
<h2>
<%=request.getParameter("mensaje")%>
</h2>
</body>
DESARROLLO WEB CON JAVA 4

j)Crea el archivo consultaGeneral.jsp, agrega el código siguiente:


<body>
<%@ include file="header.jsp" %>
<h2>Consulta General Películas:</h2>
<jsp:include page="ServletConsultaGeneral"/>
</body>

k)Crea el servlet ServletConsultaGeneral.java. Incluye las sentencias import necesarias y modifica el


código como se muestra a continuación:

private DataSource fuenteDatos = null;

public void init(ServletConfig config)


throws ServletException {
try {
Context ctx = new InitialContext();
fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/cinemaBD");
} catch (Exception e) {
throw new ServletException("Imposible recuperar java:comp/env/jdbc/cinemaBD", e);
}
}

protected void processRequest(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String qry;
Connection con = null;
try {
synchronized (fuenteDatos) {
con = fuenteDatos.getConnection();
}
if (con == null) {
throw new ServletException("Problemas con la conexion <br/>");
}
qry = "SELECT * FROM peliculas;";
PreparedStatement pstmt = con.prepareStatement(qry);
ResultSet results = pstmt.executeQuery();
while (results.next()) {
out.println("Película:" + results.getString("id") + " , "
+ results.getString("titulo") + " , " + results.getString("anio") + "<br>");
}
} catch (Exception e) {
out.println("Error al procesar consulta" + e.getMessage() + "<br/>");
} finally {
try {
con.close();
} catch (Exception e) {
out.println("Error en proceso" + e.getMessage() + "<br/>");
}
}
out.close();
}
DESARROLLO WEB CON JAVA 5
La vista creada por los archivos de los incisos j y k se muestra en la figura no. 37.

Figura no.37 Consulta general

l)Crea el archivo fomularioIndividual.jsp con un formulario que envía el dato solicitado hacia
ServletIndividual

Figura no.38 Consulta individual

m)Crea el servlet ServletIndividual.java.Incluye las sentencias import necesarias y modifica el código


como se muestra a continuación:

private DataSource fuenteDatos = null;

public void init(ServletConfig config)


throws ServletException {
try {
Context ctx = new InitialContext();
fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/cinemaBD");
} catch (Exception e) {
throw new ServletException("Imposible recuperar java:comp/env/jdbc/cinemaBD",e);
}
}

protected void processRequest(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String qry;
Connection con = null;
try {
synchronized (fuenteDatos) {
con = fuenteDatos.getConnection();
}
if (con == null) {
throw new ServletException("Problemas con la conexion <br/>");
}
final int id = Integer.valueOf(request.getParameter("idFI"));
qry = "SELECT id, titulo,anio FROM peliculas where id='" + id + "';";
PreparedStatement pstmt = con.prepareStatement(qry);
ResultSet results = pstmt.executeQuery();
if (results.next()) {
DESARROLLO WEB CON JAVA 6
response.sendRedirect("mostrarIndividual.jsp?id="+results.getInt("id")
+"&titulo="+results.getString("titulo")+"&anio="
+ results.getInt("anio"));
} else {
response.sendRedirect("index.jsp");
}
} catch (Exception e) {
out.println("Error al procesar consulta" + e.getMessage() + "<br/>");
} finally {
try {
con.close();
} catch (Exception e) {
out.println("Error en proceso" + e.getMessage() + "<br/>");
}
}
out.close();
}

n)Crea el archivo mostrarIndividual.jsp que contenga el siguiente código. El formulario se muestra en


la figura no.39
<body>
<%@ include file="header.jsp" %>
<h2>Consulta Individual de Película</h2>
<%
int id = Integer.valueOf(request.getParameter("id"));
String titulo = request.getParameter("titulo");
int anio = Integer.valueOf(request.getParameter("anio"));
%>
<form action="ServletEliminar" method="post">
Identificador:
<input type="number" name="idR" value="<%=id%>" readonly> <br>
Título:
<input type="text" name="tituloR" value="<%=titulo%>" readonly> <br>
Año:
<input type="number" name="anioR" value="<%=anio%>" readonly> <br>
<input type="submit" value="Eliminar">
</form>
<br>
<form action="ServletActualizar" method="post">
Identificador:
<input type="number" name="idR" value="<%=id%>" readonly> <br>
Título:
<input type="text" name="tituloR" value="<%=titulo%>"> <br>

Año:
<input type="number" name="anioR" value="<%=anio%>"> <br>
<input type="submit" value="Actualizar">
</form>
</body>
DESARROLLO WEB CON JAVA 7

Figura no.39 Formulario mostrarIndividual.jsp

o)Crea el servlet ServletActualizar.java. Éste recibe las modificaciones al registro de una Película, en
la figura no.40 se ilustra el cambio de título de una película.

Figura no.40 Actualización de título de película

Incluye las sentencias import necesarias y modifica el código como se muestra a continuación:

private DataSource fuenteDatos = null;

public void init(ServletConfig config) throws ServletException {


try {
Context ctx = new InitialContext();
fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/cinemaBD");
} catch (Exception e) {
throw new ServletException("imposible recuperar fuente de datos");
}
}

protected void processRequest(HttpServletRequest request,


HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Connection conn = null;
int id = Integer.valueOf(request.getParameter("idR"));
String titulo = request.getParameter("tituloR");
int anio = Integer.valueOf(request.getParameter("anioR"));
DESARROLLO WEB CON JAVA 8
try {
synchronized (fuenteDatos) {
conn = fuenteDatos.getConnection();
if (conn == null) {
out.println("Error al recuperar la conexion, es nula <br/>");
throw new ServletException("Problemas con la conexion <br/>");
}
java.sql.Statement stmt = conn.createStatement();
String qry = "UPDATE peliculas SET titulo='"
+titulo+ "', anio="+ anio
+ " WHERE id=" + id+ ";";
int resultado = stmt.executeUpdate(qry);
response.sendRedirect("consultaGeneral.jsp");
}
} catch (Exception e) {
out.println("<b>Falla en Eliminar</b>");
} finally {
try {
conn.close();
} catch (Exception e) {
out.println("Error en proceso" + e.getMessage() + "<br/>");
}
}
out.close();
}

p)Crea el servlet ServletEliminar.java.

Figura no.41 Vistas al eliminar una película

Incluye las sentencias import necesarias y modifica el código como se muestra a continuación:

private DataSource fuenteDatos = null;

public void init(ServletConfig config) throws ServletException {


try {
Context ctx = new InitialContext();
fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/cinemaBD");
} catch (Exception e) {
throw new ServletException("imposible recuperar fuente de datos");
}
}
DESARROLLO WEB CON JAVA 9

protected void processRequest(HttpServletRequest request,


HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Connection conn = null;
int id = Integer.valueOf(request.getParameter("idR"));
try {
synchronized (fuenteDatos) {
conn = fuenteDatos.getConnection();
if (conn == null) {
out.println("Error al recuperar la conexion, es nula <br/>");
throw new ServletException("Problemas con la conexion <br/>");
}
java.sql.Statement stmt = conn.createStatement();
String qry = "DELETE FROM peliculas WHERE id=" + id+ ";";
int resultado = stmt.executeUpdate(qry);
response.sendRedirect("consultaGeneral.jsp");
}
} catch (Exception e) {
out.println("<b>Falla en Eliminar</b>");
} finally {
try {
conn.close();
} catch (Exception e) {
out.println("Error en proceso" + e.getMessage() + "<br/>");
}
}
out.close();
}

Sugerencias didácticas

• Ejercicios extra a la prácticas de laboratorio


• Fomentar el trabajo en equipo.
• Propiciar las dinámicas grupales.

Reporte del alumno

• Resultados, el alumno muestra lo que realizó en la práctica


• Discusión de resultados, compara sus resultados con el resultado de otros compañeros
• Conclusiones, analiza y expresa ante el maestro o sus pares lo aprendido en la práctica.

Bibliografía y referencias electrónicas

• Deitel & Deitel (2008). Java como programar, 7a. edición. Ed. Pearson, Prentice Hall
• https://getbootstrap.com/
• https://es.wikipedia.org/

También podría gustarte