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

(Anterior) Búsqueda en Base de Datos con JSTL y Java Beans
Vea el CODIGO FUENTE del JSP exito.jsp
Vea el CODIGO FUENTE del Java Bean Encuestado.java
Vea el CODIGO FUENTE del Java Bean ListaEncuestado.java

Código Fuente BuscarServlet.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.*;
import com.osmosislatina.beans.*;

public class BuscarServlet extends HttpServlet { 


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

	// Sacar los  Datos de la Forma   
	String buscar = request.getParameter("servicio");
	String orden = request.getParameter("orden");
        String ver_email = request.getParameter("email");

  • 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) BuscarServlet 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 através del objeto request.

	// Definir terminos de Busqueda
        String sql_busca = "select * from CURSOJSP_ENCUESTA ";

	if (buscar.equals("a")) { 
	sql_busca += " where servicios = 1 ";
	} else if (buscar.equals("b")) {  
	sql_busca += " where servicios = 2 ";
        } else if (buscar.equals("c")) {  
	sql_busca += " where servicios = 3 ";
	} 

	if (orden.equals("a")) { 
	sql_busca += " order by servicios ,area";
	} else if (orden.equals("c")) {  
	sql_busca += " order by ciudad";
        } else if (orden.equals("n")) { 
	sql_busca += " order by apellido,nombre";
	} 

	// Definir un Arreglo de Encuestados para colocar resultados 
	ListaEncuestado encuestados = new ListaEncuestado();

  • Se define una secuencia de búsqueda para la Base de Datos en base a los datos extraídos de la forma HTML.

  • Posteriormente se define una instancia de la Clase (Java Bean) ListaEncuestado que será utilizada para guardar los resultados de la búsqueda.

	
	// Conectarse a la Base de Datos 
	
	try { 
	    
	    // Traer el Contexto JNDI
	    Context initContext = new InitialContext();
	    Context ctx  = (Context)initContext.lookup("java:/comp/env");
	    
	    // Extraer Conexion del Contexto JNDI
	    dataSource = (DataSource) ctx.lookup("jdbc/ConexionMySQL");
	    conn = dataSource.getConnection();
	    
	    // Verificar si existe usario por Correo Electronico 
	    Statement statement = conn.createStatement();
	    ResultSet results = statement.executeQuery(sql_busca);	    

	    while (results.next()) { 
		String nombre =  results.getString(2);
		String apellido = results.getString(3);
		int ciudad = results.getInt(4);
		int servicio = results.getInt(5);
		int area = results.getInt(6);
		String email = results.getString(7);

		// Definir Variable Descriptiva para Ciudad
		String ciudadDesc = new String();
		switch (ciudad) {
		case 1:  ciudadDesc = "Guadalajara" ; break;
		case 2:  ciudadDesc = "Mexico, D.F" ; break;
		case 3:  ciudadDesc = "Monterrey" ; break;
		case 4:  ciudadDesc = "Tijuana" ; break;
		case 5:  ciudadDesc = "Otra" ; break;
		}

		// Definir Variable Descriptiva para Servicio
		String servicioDesc = new String();
		switch (servicio) {
		case 1:  servicioDesc = "Internet" ; break;
		case 2:  servicioDesc = "Telefonia Celular" ; break;
		case 3:  servicioDesc = "Internet y Telefonia Celular" ; break;
		}

		// Definir Variable Descriptiva para Area
		String areaDesc = new String();
		switch (area) {
		case 1:  areaDesc = "Residencial" ; break;
		case 2:  areaDesc = "Empresarial" ; break;
		case 3:  areaDesc = "Residencial y Empresarial" ; break;
		}

		// Definir un Java Bean con los datos extraidos 
		// Utilizar el Constructor Adecuado

		if (ver_email == null) { 
		    // Definido el Java Bean Colocarlo dentro del Lista de Encuestados
		    encuestados.setMiembro(new Encuestado(nombre, apellido, ciudadDesc, servicioDesc, areaDesc));		    
		    
		} else { 
		    // Definido el Java Bean Colocarlo dentro del Lista de Encuestados
		    encuestados.setMiembro(new Encuestado(nombre, apellido, ciudadDesc, servicioDesc, areaDesc, email));
		}
		
		
	    }      
            results.close();
            statement.close();	    
    	// Colocar Lista de Encuestados en la Sesion 
	HttpSession session = request.getSession();
	session.setAttribute("encuestados",encuestados);
	
	// Redireccionar a JSP de exito
	RequestDispatcher dispatch = getServletContext().getRequestDispatcher("/jstl/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 en la Base de Datos mientras se intentaba insertar datos", exc);
	
	request.setAttribute("razonrechazo", "ocurrió un error en la Base de Datos");
	
	rechazarBusqueda(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 en la Base de Datos");
	
	rechazarBusqueda(request,response);
   
	
	 } finally { 
		
		
		// Cerrar Conexion
		try { 
		    // Cerrar Conexión 
		    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 realizar la búsqueda en la Base de Datos.

  • Se inicia un bloque try/catch/finally que incluirá el proceso de búsqueda en la Base de Datos.

  • Posteriormente se realiza una búsqueda JNDI por el recurso java:/comp/env/jdbc/ConexionMySQL que representa nuestra conexión hacia la Base de Datos, siendo asignado dicho recurso a la referencia conn definida anteriormente.

  • Es generado un Objeto del tipo Statement, dicho Objeto es asociado con la conexión definida anteriormente.

  • Se genera un Objeto del tipo ResultSet que representará los resultados de nuestra básqueda; el inicio de la búsqueda es iniciado por medio del método executeQuery perteneciente a la Clase Statement.

  • Se define un ciclo while para iterar sobre los resultados obtenidos de la búsqueda, en cada iteración (renglón de la Base de Datos) ocurre lo siguiente:

    • Se extraen los valores de la búsqueda y son colocados en sus respectivas variables.

    • Los campos ciudad,servicio y area son representados en la Base de Datos con dígitos o caracteres individuales, por lo que se realiza una transformación hacia nombres descriptivos através de un switch.

    • Se define una condicional basado en las indicaciones del usuario (sobre el despliegue de correo electrónico).

    • En ambos casos es generada una instancia de la Clase (Java Bean) Encuestado através del respectivo constructor, generada la instancia, esta misma es colocada através del método setMiembro dentro de la instancia de la Clase (Java Bean) ListaEncuestado.

  • Terminada la condicional y ciclo se invoca el método close sobre las Clases Statement y ResultSet para indicar el cierre de la búsqueda.

  • Posteriormente se coloca la referencia encuestados en la sesión 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 página definida en el Objeto RequestDispatcher, en este caso el JSP exito.jsp.

  • Se define la sección catch del Bloque, que invoca el método rechazarBusqueda 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 rechazarBusqueda(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException    {

	RequestDispatcher dispatch = getServletContext().getRequestDispatcher("/jstl/error.jsp");
    
	    dispatch.forward(request, response);

    }

El método rechazarBusqueda definido anteriormente es invocado en caso de ocurrir cualquier tipo de error al momento de buscar 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