| 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.sqlque representa las Clases para conectarse a Bases de Datos,java.utilque contiene Clases utilitarias Java,javax.sqlque contiene las implementaciones más recientes para Bases de Datos (DataSource) yjavax.namingque proporciona las Clases para localizar recursos vía JNDI ("Java Naming Directory Interface").Se define la Clase(Servlet)
ConfirmarActualizarServletla cual hereda("inherit") el comportamiento deHttpServletcomo lo hace cualquier otro Servlet; de la misma manera se declara el método principal del Servlet (service) que contiene los conocidos objetos de entradaHttpServletRequestyHttpServletResponse.Como primer paso dentro del método
service, se extraen los datos introducidos por el usuario en la forma HTML a través del objetorequesty 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
lookupsobrejava:/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 variabledataSourceque representará nuestra Base de Datos.Es invocado el método
getConnectiondel ObjetodataSource, dicha función representa una conexión de "Pool" la cual es asignada a la referenciaconndefinida 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
setStringdel Objetostatementson 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
executeUpdateperteneciente a la ClasePreparedStatementque inicia el proceso de actualización en sí.Terminada la actualización se invoca el método
closede la ClasePreparedStatementpara indicar el cierre del elemento (inserción).Se limpia/reinicializa el objeto
sessiondel usuario.Se genera un Objeto del tipo
RequestDispatcherque toma como parámetro el JSPexito.jsp.Se invoca el método
forwarddel Objetodispatchque 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
rechazarActualizaren 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
RequestDispatcherque toma como parámetro el JSPerror.jsp.Se invoca el método
forwarddel Objetodispatchque retorna el control hacia la página definida en el ObjetoRequestDispatcher, en este caso el JSPerror.jsp.
