Vea el CODIGO FUENTE del Servlet ActualizarServlet.java |
Código Fuente ConfirmarActualizarServlet.java
Debido a la longitud del Servlet, éste se encuentra dividido en cinco secciones seguido de una descripción para cada fragmento.
package com.osmosislatina.basesdedatos; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.sql.*; import javax.sql.*; import java.util.*; import javax.naming.*; public class ConfirmarActualizarServlet extends HttpServlet {
|
En la parte superior de este Servlet como cualquier otra Clase Java se importan las librerías ("packages") que serán utilizadas :
java.sql
que representa las Clases para conectarse a Bases de Datos,java.util
que contiene Clases utilitarias Java,javax.sql
que contiene las implementaciones más recientes para Bases de Datos (DataSource
) yjavax.naming
que proporciona las Clases para localizar recursos vía JNDI ("Java Naming Directory Interface").Se define la Clase(Servlet)
ConfirmarActualizarServlet
la cual hereda("inherit") el comportamiento deHttpServlet
como lo hace cualquier otro Servlet; de la misma manera se declara el método principal del Servlet (service
) que contiene los conocidos objetos de entradaHttpServletRequest
yHttpServletResponse
.Como primer paso dentro del método
service
, se extraen los datos introducidos por el usuario en la forma HTML a través del objetorequest
y otros colocados con anterioridad en el Objetosession
, para posteriormente definir las variables para asignar la conexión (Connection
) y recurso (DataSource
) hacia la Base de Datos.
// Conectarse a la Base de Datos try { // Traer el Contexto JNDI Context initContext = new InitialContext(); Context ctx = (Context)initContext.lookup("java:/comp/env"); dataSource = (DataSource) ctx.lookup("jdbc/ConexionMySQL"); conn = dataSource.getConnection(); // Definir Actualizacion en SQL String sql_actualizar = "update CURSOJSP_ENCUESTA set ciudad= ?, servicios = ?, area = ? where id = ?"; PreparedStatement statement = conn.prepareStatement(sql_actualizar); statement.setString(1,ciudad); statement.setString(2,servicio); statement.setString(3,area); statement.setString(4,id); statement.executeUpdate(); statement.close(); // Hacer limpieza // Eliminar los valores de la sesion en // caso que el usuario realize otra actualizacion. session.removeAttribute("id"); // Se puede realizar atributo por atributo o bien // reinicializar toda la sesion para borrado automatico session.invalidate(); // Exito en la Actualizacion RequestDispatcher dispatch = getServletContext().getRequestDispatcher("/servidordatos/exito.jsp"); dispatch.forward(request, response); } catch (SQLException exc) { // Registrar posibles error en SQL hacia registros ("Logs") // Actualizar requisicion y llamar funcion de Rechazo getServletContext().log(" Ocurrió un error al intentar actualizar la Base de Datos", exc); request.setAttribute("razonrechazo", "ocurrió un error al intentar actualizar la Base de Datos"); rechazarActualizar(request,response); } catch (NamingException exc) { // Registrar posibles error en JNDI hacia registros ("Logs") // Actualizar requisicion y llamar funcion de Rechazo getServletContext().log(" Ocurrió un error al intentar accesar contexto JNDI", exc); request.setAttribute("razonrechazo", "ocurrió un error al intentar actualizar la Base de Datos"); } finally { // Cerrar Conexion try { conn.close(); } catch (Exception exc) { getServletContext().log(" Ocurrió un error al intentar cerrar conexion hacia Base de Datos", exc); } } } //Termina metodo Service |
La sección anterior describe la parte central del Servlet ya que contiene la lógica para actualizar los datos del usuario en base a su id.
Primeramente se inicia un bloque try/catch/finally que incluirá el proceso de actualización en la Base de Datos.
Es generado un objeto de Contexto Inicial JNDI en el cual se realiza una búqueda vía el método
lookup
sobrejava:/comp/env
.Una vez definido y encontrado el contexto inicial JNDI, se realiza otra búsqueda sobre esta ruta base intentando ubicar el recurso
jdbc/ConexionMySQL
, dicho recurso es asignado a la variabledataSource
que representará nuestra Base de Datos.Es invocado el método
getConnection
del ObjetodataSource
, dicha función representa una conexión de "Pool" la cual es asignada a la referenciaconn
definida anteriormente.Se define una secuencia de actualización; nótese que la secuencia contiene el carácter
"?"
, dicho carácter será substituido por el dato proporcionado por el usuario.Es generado un Objeto del tipo
PreparedStatement
, esto permite que sea realizada una actualización en base a los datos específicos proporcionados por el usuario; dicho Objeto es asociado con la conexión definida anteriormente.A través del método
setString
del Objetostatement
son asociadas las variables a la secuencia de inserción SQL, los parámetros de este método indican la posición y valor asignado, donde la posición es representada por el carácter"?"
.Se invoca el método
executeUpdate
perteneciente a la ClasePreparedStatement
que inicia el proceso de actualización en sí.Terminada la actualización se invoca el método
close
de la ClasePreparedStatement
para indicar el cierre del elemento (inserción).Se limpia/reinicializa el objeto
session
del usuario.Se genera un Objeto del tipo
RequestDispatcher
que toma como parámetro el JSPexito.jsp
.Se invoca el método
forward
del Objetodispatch
que retorna el control hacia la pagina definida en el ObjetoRequestDispatcher
, en este caso el JSPexito.jsp
.Se define la sección catch del Bloque, la cual también invoca el método
rechazarActualizar
en caso de ocurrir un error imprevisto en la conexión o en la búsqueda JNDI.Finalmente se define la sección finally que cierra la conexión hacia la Base de Datos.
/** Redirecciona Errores a un Java Server Page **/ public void rechazarActualizar(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { RequestDispatcher dispatch = getServletContext().getRequestDispatcher("/servidordatos/error_actualizacion.jsp"); dispatch.forward(request, response); } |
El método rechazaActualizar
definido anteriormente es invocado en caso de ocurrir cualquier tipo de error en la Base de Datos, a continuación se describe:
Se genera un Objeto del tipo
RequestDispatcher
que toma como parámetro el JSPerror.jsp
.Se invoca el método
forward
del Objetodispatch
que retorna el control hacia la página definida en el ObjetoRequestDispatcher
, en este caso el JSPerror.jsp
.