Registrando Datos en una BD usando JSP y Servlets

Registrando Datos en una BD usando JSP y Servlets

Hace unos dias comenzamos con el desarrollo de aplicaciones JEE, vimos como usar Servlets, JSP's, gestion de base de datos, entre otros conceptos.

Hoy quise traerles una pequeña y sencilla aplicacion que muestra los principales aspectos a tener en cuenta en el desarrollo de aplicaciones Web.

A continuacion veran una imagen del proyecto en Eclipse IDE, mostrando la estructura de archivos, implementando el patron de diseño MVC, modelo vista controlador.

La aplicacion muestra dos formas de registrar un usuario, a través del método POST y a través del método GET.

Codigo

Clase BeanUsuario

package controlador;

public class BeanUsuario {
 
 private String nombre;
 private String apellido;
 private String edad;
 private String correo;
 private String usuario;
 private String clave;
 public String getNombre() {
  return nombre;
 }
 public void setNombre(String nombre) {
  this.nombre = nombre;
 }
 public String getApellido() {
  return apellido;
 }
 public void setApellido(String apellido) {
  this.apellido = apellido;
 }
 public String getEdad() {
  return edad;
 }
 public void setEdad(String edad) {
  this.edad = edad;
 }
 public String getCorreo() {
  return correo;
 }
 public void setCorreo(String correo) {
  this.correo = correo;
 }
 public String getUsuario() {
  return usuario;
 }
 public void setUsuario(String usuario) {
  this.usuario = usuario;
 }
 public String getClave() {
  return clave;
 }
 public void setClave(String clave) {
  this.clave = clave;
 }
 public BeanUsuario(String nombre, String apellido, String edad,
   String correo, String usuario, String clave) {
  super();
  this.nombre = nombre;
  this.apellido = apellido;
  this.edad = edad;
  this.correo = correo;
  this.usuario = usuario;
  this.clave = clave;
 }
}

Clase Usuario

package modelo;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import controlador.BeanUsuario;

public class Usuario {
 
 public static boolean agregarUsuario(BeanUsuario usuario){
  boolean agregado=false;
  try {
   Conexion c=new Conexion();
   Connection con=c.getConexion();
   if(con!=null){
    Statement st;
    st = con.createStatement();
    st.executeUpdate("INSERT INTO Usuario(`Nombre`,`Apellido`,`Edad`, `Correo`,`Usuario`,`Clave`) VALUES ('"+usuario.getNombre()+"','"+usuario.getApellido()+"',"+usuario.getEdad()+",'"+usuario.getCorreo()+"','"+usuario.getUsuario()+"','"+usuario.getClave()+"')");
    agregado=true;
    st.close();
   }
   c.cerrarConexion();
  } catch (SQLException e) {
   agregado=false;
   e.printStackTrace();
  }
  return agregado;
 }
}

Clase Conexion

package modelo;

import java.sql.*;

public class Conexion {

 private Connection con = null;

 public Conexion() {
  try {
   Class.forName("com.mysql.jdbc.Driver").newInstance();
   con = DriverManager.getConnection("jdbc:mysql://localhost:3306/javazoneee", "root","****");
  } catch (InstantiationException | IllegalAccessException
    | ClassNotFoundException | SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public Connection getConexion(){
  return con;
 }
 
 public void cerrarConexion(){
  try {
   con.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}

Clase ServletRegistro

package vista;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.Usuario;

import controlador.BeanUsuario;

public class ServletRegistro extends HttpServlet {
 private static final long serialVersionUID = 1L;

    public ServletRegistro() {
    }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String nombre=request.getParameter("nombre");
  String apellido=request.getParameter("apellido");
  String edad=request.getParameter("edad");
  String correo=request.getParameter("correo");
  String usuario=request.getParameter("usuario");
  String clave=request.getParameter("clave");
  if(!nombre.equalsIgnoreCase("") && !apellido.equalsIgnoreCase("") && !edad.equalsIgnoreCase("") && !correo.equalsIgnoreCase("") && !usuario.equalsIgnoreCase("") && !clave.equalsIgnoreCase("")){
   BeanUsuario busuario=new BeanUsuario(nombre, apellido, edad, correo, usuario, clave);
   boolean sw=Usuario.agregarUsuario(busuario);
   if(sw){
    request.getRequestDispatcher("Mensaje.jsp").forward(request, response);
   }else{
    PrintWriter out=response.getWriter();
    out.println("Si estas viendo este mensaje es por que algo salio mal, no se pudo completar tu solicitud.");
   }
  }
 }

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String nombre=request.getParameter("nombre");
  String apellido=request.getParameter("apellido");
  String edad=request.getParameter("edad");
  String correo=request.getParameter("correo");
  String usuario=request.getParameter("usuario");
  String clave=request.getParameter("clave");
  if(!nombre.equalsIgnoreCase("") && !apellido.equalsIgnoreCase("") && !edad.equalsIgnoreCase("") && !correo.equalsIgnoreCase("") && !usuario.equalsIgnoreCase("") && !clave.equalsIgnoreCase("")){
   BeanUsuario busuario=new BeanUsuario(nombre, apellido, edad, correo, usuario, clave);
   boolean sw=Usuario.agregarUsuario(busuario);
   if(sw){
    request.getRequestDispatcher("Mensaje.jsp").forward(request, response);
   }else{
    PrintWriter out=response.getWriter();
    out.println("Si estas viendo este mensaje es por que algo salio mal, no se pudo completar tu solicitud.");
   }
  }
 }
}

Archivo JSP, index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registro Usuario</title>
</head>
<body>
<div align="center">
<table>
<tr>
<td>Usando el Metodo GET</td>
<td>Usando el Metodo POST</td>
</tr>
<tr>
<td>
<form action="ServletRegistro" method="get">
<table>
<tr>
<td>Nombre:</td>
<td><input type="text" size="20" name="nombre"></td>
</tr>
<tr>
<td>Apellido:</td>
<td><input type="text" size="20" name="apellido"></td>
</tr>
<tr>
<td>Edad:</td>
<td><input type="text" size="20" name="edad"></td>
</tr>
<tr>
<td>Correo:</td>
<td><input type="text" size="20" name="correo"></td>
</tr>
<tr>
<td>Usuario:</td>
<td><input type="text" size="20" name="usuario"></td>
</tr>
<tr>
<td>Contraseña:</td>
<td><input type="password" size="20" name="clave"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Registrar"></td>
</tr>
</table>
</form>
</td>
<td>
<form action="ServletRegistro" method="post">
<table>
<tr>
<td>Nombre:</td>
<td><input type="text" size="20" name="nombre"></td>
</tr>
<tr>
<td>Apellido:</td>
<td><input type="text" size="20" name="apellido"></td>
</tr>
<tr>
<td>Edad:</td>
<td><input type="text" size="20" name="edad"></td>
</tr>
<tr>
<td>Correo:</td>
<td><input type="text" size="20" name="correo"></td>
</tr>
<tr>
<td>Usuario:</td>
<td><input type="text" size="20" name="usuario"></td>
</tr>
<tr>
<td>Contraseña:</td>
<td><input type="password" size="20" name="clave"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Registrar"></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</div>
</body>
</html>

Archivo JSP, Mensaje.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registrado Correctamente</title>
</head>
<body>
<div>
<label>Te has registrado exitosamente!. Felicitaciones por unirte a Java Zone.</label>
</div>
</body>
</html>

Imagenes del programa desplegado

Descargar

Pueden descargar el archivo directamente desde aqui. Recuerden visitar Java Zone.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Re: Registrando en una BD

Este ejemplo va servir de mucho. Muy buen aporte como siempre.

Imagen de xinobertho

Re: Registrando en una BD

Mi primer post. Muchas gracias por el ejemplo, ya tiene tiempo que estaba aprendiendo JSP y Servlets y lo estoy retomando. Esto ejemplo me será de ayuda

Consulta

jkh

Imagen de Eduardo Vargas

Muchas gracias, aunque veo varias inconsistencias

Gracias por el aporte, roger1345. Muy buenas ideas, pero veo varias cosas que no checan y algunas otras que podrían mejorarse:

1) El código que muestras aquí no es exactamente el mismo que está en el archivo ZIP que nos ofreces. En el ZIP se ve que usas anotaciones en el servlet controlador " ServletRegistro" y en el código que enviaste aquí no lo usas. ¿Es realmente útil o no el uso de ese tipo de anotaciones?

2) Veo que usas multi-catch, entonces, ¿por qué no omitir la línea en donde dice " Class.forName("com.mysql.jdbc.Driver").newInstance();"?
y, por qué no usar try-with-resources en vez de utilizar un método para abrir y cerrrar conexiones, y además aprovecharlo para crear y cerrar el Statement?

3) En la distribución de las clases en el MVC, parece que que te equivocaste porque en el nombre de los paquetes el bean "BeanUsuario" aparece en el paquete "controlador"; en el paquete "vista" tienes el Servlet (el cual debería de mostrarse como Controlador); además de que la vista debería de ser el jsp.

Muy buen aporte y ojalá que nos puedas comentar por qué preferiste hacer las cosas así, en vez de como lo he comentado.

p.d. Veo que el post original es de 2012 y a lo mejor roger1345 ya no existe. Es la costumbre de no revisar las fechas de los temas je je je :=) pero bueno, a muchos les puede servir para intentar mejorar el ejemplo.

Saludos,

Imagen de Eduardo Vargas

Traten de elaborar mejor sus preguntas

Hola Sefe,

Sugiero que trates de elaborar mejor tu pregunta. Si algo no funciona, normalmente se obtiene un mensaje de error en la consola. Lo más conveniente es que la primera vez muestres la parte principal de ese mensaje de error, ya que algunas veces el texto del mensaje de error puede llevarse varias páginas.

hola

ok, gracias.. e resuelto el problema..
no es necesario hacer lo que yo suponía..

Consulta

hola.

me estoy enfrentando al siguiente problema.

deseo insertar en dos tablas relacionadas, la forma de hacerlo es la siguiente, primero inserto en la tabla1, que tiene una clave primaria incrementa-ble
después de insertar en la tabla2, e qui el problema. como hacerle para pasar la ultima clave o valor incrementable de la tabla uno a la tabla 2, ya que estas están relacionadas. lo estoy tratando de hacer con LAST_INSERT_ID(); Si lo realizo directamente en consola si funciona la inserción en la tabla 2. pero al real izarlo desde java no responde.

alguien sabe como insertar desde java jsp,