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
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
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
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
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
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
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.
- roger1345's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Re: Registrando en una BD
Este ejemplo va servir de mucho. Muy buen aporte como siempre.
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
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,
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,