Trabajar con Beans en JSP

JSPEn el artículo de hoy vamos a ver como podemos crear un sencillo Bean en un proyecto JSP para añadir información a una base de datos. El ejemplo mostrado es muy simple pero pretende servir como base para la realización de proyectos mas complejos.

Si queréis profundizar en algunos de los contenidos aquí mostrados podéis encontrarlos mejor explicados en un completo curso de JSP (en inglés) en el siguiente enlace. Se trata de un curso de JSP dividido en diferentes capítulos con el que se puede aprender de forma fácil los fundamentos de JSP.

En este ejemplo vamos a crear un Bean que nos permita trabajar con una clase para permitirnos almacenar direcciones web en una base de datos, por ejemplo, para bloquearlas o simplemente hacer estadísticas de uso. Lo primero que haremos será crear una clase genérica para trabajar con nuestra base de datos y, a continuación, crearemos un sencillo bean que nos va a permitir guardar información en esa base de datos utilizando la clase generada anteriormente. Con todo esto creado, añadiremos el código necesario a nuestro JSP para que éste utilice el Bean para almacenar un página web dada. Esa inserción la vamos a realizar directamente en código y, posteriormente, veremos como obtenerla directamente de un formulario o como fruto de un request creado por otra página web.

Creación de la clase ConexionBD.java

Creamos un paquete llamado DB en el cual crearemos una clase genérica para poder conectarnos a nuestra base de datos y realizar algunas sencillas consultas y ciertas utilidades que pueden sernos útiles en el futuro. En este caso, la clase va a conectarse a una base de datos Oracle instalada en un servidor remoto.

package DB;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConexionBD {

    Connection conexion = null;
    boolean activa = false;

    public ConexionBD() {
        //System.out.println("Se crea la conexion");
        conectaDB();
        activa = true;
    }

    private void conectaDB() {

        try {
            DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
            conexion = DriverManager.getConnection("jdbc:oracle:thin:@192.168.100.100:1521:XE", "professor", "professor");
        } catch (SQLException ex) {
            System.out.println("Excepcion: " + ex);
            Logger.getLogger(ConexionBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void CloseConnection() {
        //System.out.println("Se cierra la conexion");
        try {
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(ConexionBD.class.getName()).log(Level.SEVERE, null, ex);
        }

        activa = false;
    }

    public boolean isActive() {
        return activa;
    }

    public int insertDB(String sentencia) {
        int resultado = 0;
        try {
            Statement stmt = conexion.createStatement();
            resultado = stmt.executeUpdate(sentencia);

        } catch (SQLException ex) {
            Logger.getLogger(ConexionBD.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultado;
    }

    public ResultSet selectDB(String sentencia) {
        ResultSet rset = null;
        try {
            Statement stmt = conexion.createStatement();
            rset = stmt.executeQuery(sentencia);
            //rset.next();

        } catch (SQLException ex) {
            Logger.getLogger(ConexionBD.class.getName()).log(Level.SEVERE, null, ex);
        }
        return rset;
    }

    private void statementDB(Statement st) {
        try {
            st.close();
        } catch (SQLException ex) {
            Logger.getLogger(ConexionBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void commit() {
        try {
            conexion.commit();
        } catch (SQLException ex) {
            Logger.getLogger(ConexionBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void rollback() {
        try {
            conexion.rollback();
        } catch (SQLException ex) {
            Logger.getLogger(ConexionBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Creación del Bean Web.java

Creamos un paquete llamado Beans. En el vamos a almacenar los diferentes beans que creemos en nuestro proyecto. En este caso, vamos a crear un Bean para añadir URLs a una base de datos. Este Bean unicamente va a añadir un id y una URL a una base de datos creada previamente en nuestro gestor de bases de datos. Antes de hacerlo, vamos a recordar las características que debe cumplir un bean:

  • Debe tener un constructor con cero argumentos
  • No debe tener variables públicas de instancia
  • Debe ser serializable
  • Se debe acceder a sus variables privadas mediante getters y setters
    • setNombre
    • getNombre
    • isCorrect para comprobar variables booleanas
package Beans;

import DB.ConexionBD;

public class Web implements java.io.Serializable{ //Todo Bean debe ser serializable

    int id;
    String url;

    //Todo Bean debe tener constructor sin argumentos
    public Web(){
        super();
    }

    public int getId() {
        return id;
    }

    public String getUrl() {
        return url;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setUrl(String url) {
        this.url= url;
    }
    //Utilizamos la clase ConexionDB para realizar el INSERT en la BD.
    public boolean saveDB(){
        ConexionBD db = new ConexionBD();
        int res = db.insertDB("INSERT INTO Web VALUES("+id+",'"+nombre+"')");
        db.CloseConnection();
        if(res!=0)
            return true;
        return false;
    }
}

Accedemos al fichero index.jsp e importamos el Bean creado anteriormente añadiendo un import a la primera línea de dicho archivo especificando el paquete y la clase creada anteriormente.

<%@page contentType="text/html" language="java" import="Beans.Web" pageEncoding="UTF-8"%>

Para utilizar este Bean en JSP basta con añadir las siguientes líneas:

<jsp:useBean id="web" class="Beans.Web" scope="page">
</jsp:useBean>
  • id: Prefijo que vamos a usar para trabajar con el bean en nuestro JSP.
  • scope: Especifica donde estará disponible este bean.
    • page: El bean está disponible en la página actual. Se almacena en el PageContent de la página actual.
    • request: El bean está disponible únicamente en el request actual. Se almacena en el ServletRequest.
    • session: El bean esta disponible para todas las páginas durante la sesión actual. Es almacenado en HttpSession.
    • application: El bean está disponible para todas las páginas que comparten el mismo contexto. Se almacena en el ServletContext.

De esta forma, especificamos que vamos a poder utilizar el Bean creado utilizando el prefijo web. A continuación vamos a añadir una página directamente desde nuestro JSP.

<%
        web.setId(111);
        web.setUrl("https://blogdeaitor.wordpress.com");
        web.saveDB();
%>

En este punto ya tenemos la base de nuestro proyecto creada. Si accedemos a nuestro index.jsp mediante el explorador, se va a añadir una nueva entrada en nuestra base de datos con id 111 y con URL https://blogdeaitor.wordpress.com

Obteniendo información del request

Para obtener un parámetro de un request podemos obtenerlo directamente desde JSP de la siguiente forma:

request.getParameter("nombreDelParametro");

Si el valor del ID y de la url provienen del request generado por otra página, podemos capturarlos de la siguiente forma:

String id= request.getParameter("id");
String url = request.getParameter("url");

Con lo cual, solo sería necesario modificar el código añadido anteriormente por el siguiente para aprovechar los requests y almacenar su información en la base de datos:

<%
        web.setId(id);
        web.setUrl(url);
        web.saveDB();
%>
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: