Menú Curso Java Web (JSP's/Servlets) : Código Fuente Servlet ConfirmarActualizarServlet.java para actualizar Información en Base de Datos.

(Anterior) Actualizar información en Base de Datos a través de Servlets.
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 { 

 
    public void service(HttpServletRequest request, HttpServletResponse response) 
     throws java.io.IOException, ServletException
    {

	// Sacar los  Datos de la Forma con valores modificados
	String ciudad = request.getParameter("ciudad");
	String servicio = request.getParameter("servicio");
	String area = request.getParameter("area");
	
	// Extraer la Sesion para conocer el ID de usuario que estamos manejando
	HttpSession session = request.getSession();
	String id = (String) session.getAttribute("id");

        // Declarar Conexion y DataSource hacia base de Datos          
	DataSource dataSource =  null;
	Connection conn = null;

  • 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) y javax.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 de HttpServlet 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 entrada HttpServletRequest y HttpServletResponse.

  • Como primer paso dentro del método service, se extraen los datos introducidos por el usuario en la forma HTML a través del objeto request y otros colocados con anterioridad en el Objeto session, 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 sobre java:/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 variable dataSource que representará nuestra Base de Datos.

  • Es invocado el método getConnection del Objeto dataSource, dicha función representa una conexión de "Pool" la cual es asignada a la referencia conn 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 Objeto statement 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 Clase PreparedStatement que inicia el proceso de actualización en sí.

  • Terminada la actualización se invoca el método close de la Clase PreparedStatement 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 JSP exito.jsp.

  • Se invoca el método forward del Objeto dispatch que retorna el control hacia la pagina definida en el Objeto RequestDispatcher, en este caso el JSP exito.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 JSP error.jsp.

  • Se invoca el método forward del Objeto dispatch que retorna el control hacia la página definida en el Objeto RequestDispatcher, en este caso el JSP error.jsp.

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com