Ejemplos de programas JSP: formulario de registro e inicio de sesión
⚡ Resumen inteligente
Los ejemplos de programas JSP que se muestran aquí crean tres módulos: un formulario de registro, un formulario de inicio y cierre de sesión y una página de procesamiento de formularios. Cada módulo conecta una vista JSP a un controlador de servlet, de modo que la división del patrón MVC permanece visible para los principiantes.
Estos ejemplos prácticos muestran cómo desarrollar programas de muestra con JSP y cómo implementar la arquitectura MVC a su alrededor. Se construyen tres módulos en orden:
- formulario de inscripción
- Formulario de inicio de sesión y cierre de sesión
- Formulario JSP
Cómo crear un formulario de registro en JSP
En un formulario de registro, tenemos un formulario para completar todos los datos, que incluyen nombre, nombre de usuario, contraseña, dirección, número de contacto, etc.
Este formulario nos ayuda a registrarnos en la aplicación. Recoge todos nuestros datos y los almacena en un base de datos de CRISPR Medicine News o caché.
En este ejemplo, vamos a tomar el “Guru Formulario de registro”, que tiene los siguientes campos:
- Nombre
- Apellido
- Nombre de usuario
- Contraseña
- Dirección
- Número de celular
Tras completar todos estos datos, tenemos un botón de envío; al hacer clic en ese botón, todos los datos se envían al servlet.
Ejemplo 1: Registro_1.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>Guru Registration Form</title> </head> <body> <h1>Guru Register Form</h1> <form action="guru_register" method="post"> <table style="with: 50%"> <tr> <td>First Name</td> <td><input type="text" name="first_name" /></td> </tr> <tr> <td>Last Name</td> <td><input type="text" name="last_name" /></td> </tr> <tr> <td>UserName</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>Password</td> <td><input type="password" name="password" /></td> </tr> <tr> <td>Address</td> <td><input type="text" name="address" /></td> </tr> <tr> <td>Contact No</td> <td><input type="text" name="contact" /></td> </tr></table> <input type="submit" value="Submit" /></form> </body> </html>
Explicación del código:
Code Línea 11: Aquí estamos utilizando un formulario que tiene una acción, es decir, el servlet al que se enviará la solicitud, cuyo nombre es guru_register.java. La solicitud se procesará mediante el método POST.
Code Línea 14-16: Aquí estamos tomando el tipo de entrada como texto y el nombre es first_name.
Code Línea 18-20: Aquí estamos tomando el tipo de entrada como texto y el nombre es last_name.
Code Línea 22-24: Aquí estamos tomando el tipo de entrada como texto y el nombre es username.
Code Línea 26-28: Aquí estamos tomando el tipo de entrada como contraseña (esto oculta la contraseña mientras se escribe) y el nombre como contraseña.
Code Línea 30-32: Aquí estamos tomando como tipo de entrada texto y como nombre dirección.
Code Línea 34-36: Aquí estamos tomando el tipo de entrada como texto y el nombre como contacto.
Code Línea 37: Aquí tenemos un botón de tipo "Enviar" cuyo valor también es "Enviar". Al hacer clic en este botón, la acción se dirige al servlet guru_register correspondiente, donde se pasan todos los valores de los parámetros en la solicitud.
Nota: el atributo de tabla en Code La línea 12 dice style="with: 50%"La propiedad CSS correcta es widthPor lo tanto, el listado se reproduce exactamente como se publicó, pero la tabla no se redimensionará hasta que se corrija ese error tipográfico en su propia copia.
Ejemplo 2: Guru_registrar.java
package demotest; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class guru_register */ public class guru_register extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String first_name = request.getParameter("first_name"); String last_name = request.getParameter("last_name"); String username = request.getParameter("username"); String password = request.getParameter("password"); String address = request.getParameter("address"); String contact = request.getParameter("contact"); if(first_name.isEmpty() || last_name.isEmpty() || username.isEmpty() || password.isEmpty() || address.isEmpty() || contact.isEmpty()) { RequestDispatcher req = request.getRequestDispatcher("register_1.jsp"); req.include(request, response); } else { RequestDispatcher req = request.getRequestDispatcher("register_2.jsp"); req.forward(request, response); } } }
Explicación del código:
Code Línea 14: Aquí definimos el servlet guru_register, que extiende HttpServlet.
Code Línea 18: Este es el método doPost(), que se llama cuando especificamos POST como atributo del método en el formulario JSP anterior.
Code Línea 20-25: Aquí estamos obteniendo los valores de la solicitud, es decir first_name, last_name, username, password, address y contact, usando request.getParameter.
Code Línea 27-32: Aquí utilizamos una condición if para comprobar si alguno de los parámetros de la solicitud está vacío. Si algún parámetro está vacío, el control entra en esta condición (first_name.isEmpty() || last_name.isEmpty() || username.isEmpty() || password.isEmpty() || address.isEmpty() || contact.isEmpty()) y obtenemos un objeto RequestDispatcher del objeto de solicitud, que envía la solicitud de vuelta a register_1.jsp. Aquí también incluimos los objetos de solicitud y respuesta.
Code Línea 33-37: Esta rama se ejecuta cuando ninguno de los parámetros está vacío. Obtenemos un objeto RequestDispatcher del objeto de solicitud, que reenvía la solicitud a register_2.jsp. Aquí reenviamos los objetos de solicitud y respuesta.
La diferencia entre las dos ramas importa: include() ejecuta register_1.jsp y devuelve el control al servlet, mientras forward() Envía la solicitud a register_2.jsp y no regresa.
Ejemplo 3: Registro_2.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>Guru Success Page</title> </head> <body> <a><b>Welcome User!!!!</b></a> </body> </html>
Explicación del código:
Code Línea 10: Aquí mostramos el mensaje de bienvenida. Esta página JSP se llama cuando se han completado todos los parámetros.
Cuando ejecuta el código anterior, obtiene el siguiente resultado.
Salida:
La página de registro muestra los seis campos etiquetados con un único botón de "Enviar", como se muestra a continuación.
Una vez que se hayan completado todos los campos y se haya hecho clic en Enviar, guru_register redirige a register_2.jsp y aparece la página de éxito.
Al hacer clic en register_1.jsp, aparece un formulario con nombre, apellido, nombre de usuario, contraseña, dirección y datos de contacto. Una vez completados todos los datos y pulsado el botón de enviar, aparece el mensaje "Bienvenido usuario".
Cómo crear un formulario de inicio y cierre de sesión en JSP
Al igual que con el formulario de registro, ahora crearemos un formulario de inicio y cierre de sesión.
En este ejemplo, hemos tomado un formulario de inicio de sesión con dos campos, "nombre de usuario" y "contraseña", y un botón de envío.
Al hacer clic en el botón de enviar, aparece un mensaje de bienvenida con un botón para cerrar sesión.
Al hacer clic en el botón de cerrar sesión, volvemos al formulario de inicio de sesión.
Ejemplo 1: Registro_3.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>Guru Login Form</title> </head> <body> <form action="guru_login" method="post"> <table style="with: 50%"> <tr> <td>UserName</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>Password</td> <td><input type="password" name="password" /></td> </tr> </table> <input type="submit" value="Login" /></form> </body> </html>
Explicación del código:
Code Línea 10: Aquí estamos tomando un formulario cuya acción es el servlet guru_login.java. El método a través del cual se pasan los datos es POST.
Code Línea 13-16: Aquí estamos tomando un campo de entrada llamado "nombre de usuario", que es de tipo texto.
Code Línea 17-20: Aquí estamos tomando un campo de entrada "contraseña", que es de tipo contraseña.
Code Línea 22: Aquí tenemos un botón de "enviar" con el valor "Iniciar sesión". Al hacer clic en él, el control pasa al servlet guru_login, donde se leen ambos campos utilizando el objeto de solicitud.
Ejemplo 2: Guru_login.java (servlet)
package demotest; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class guru_login */ public class guru_login extends HttpServlet { public guru_login() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String username = request.getParameter("username"); String password = request.getParameter("password"); if(username.isEmpty() || password.isEmpty() ) { RequestDispatcher req = request.getRequestDispatcher("register_3.jsp"); req.include(request, response); } else { RequestDispatcher req = request.getRequestDispatcher("register_4.jsp"); req.forward(request, response); } } }
Explicación del código:
Code Línea 5-9: Aquí estamos importando las clases necesarias al código.
Code Línea 14: Aquí estamos declarando el servlet guru_login, que extiende HttpServlet.
Code Línea 21: Aquí estamos utilizando el método doPost(), porque el formulario utiliza el método POST.
Code Línea 23-24: Aquí estamos leyendo los parámetros utilizando el objeto de solicitud, es decir, el nombre de usuario y la contraseña.
Code Línea 25-29: De esta forma, utilizamos una condición "if" que comprueba si el nombre de usuario y la contraseña están vacíos. Si alguno de ellos está vacío, obtenemos un objeto RequestDispatcher que devuelve el control a register_3.jsp con los objetos de solicitud y respuesta.
Code Línea 30-34: Esta rama se ejecuta si ambos no están vacíos; luego reenvía la solicitud a register_4.jsp con los objetos de solicitud y respuesta.
Ejemplo 3: Registro_4.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>Guru Logged In</title> </head> <body> <table style="with: 50%"> <tr><td> <% String username = request.getParameter("username"); %> <a>Welcome <% out.println(username); %> User!!!! You have logged in.</a></td></tr> <tr></tr><tr><td></td><td></td><td><a href="register_3.jsp"><b>Logout</b></a></td></tr> </table> </body> </html>
Explicación del código:
Code Línea 12: Aquí obtenemos el parámetro "username" del objeto de solicitud y lo almacenamos en el objeto String username. Esto funciona porque forward() mantiene intacta la solicitud original y, por lo tanto, sus parámetros.
Code Línea 13: Aquí tenemos un mensaje de bienvenida con el nombre de usuario.
Code Línea 14: Aquí tenemos el enlace para cerrar sesión, que redirige al usuario de vuelta a register_3.jsp.
Cuando ejecuta el código anterior, obtiene el siguiente resultado.
Salida:
Al abrir register_3.jsp se muestran los dos campos para credenciales y un botón de inicio de sesión.
Tras hacer clic en el botón Iniciar sesión, verá el siguiente mensaje junto con un enlace para cerrar la sesión.
Al hacer clic en el enlace Cerrar sesión, regresará a la página de inicio de sesión que se muestra aquí.
Nota: Este ejemplo solo compara valores vacíos, por lo que se acepta cualquier nombre de usuario no vacío. Un inicio de sesión en producción debe verificar las credenciales con un almacén y mantener las contraseñas cifradas, nunca en texto plano.
Procesamiento de formularios JSP utilizando getParameter()
Los formularios son el método habitual para recopilar datos en el procesamiento web. Necesitamos enviar la información al servidor web y luego leerla de vuelta en el servidor.
Hay dos métodos comúnmente utilizados para enviar y recibir información al servidor web.
OBTENER método:
- Este es el método predeterminado para pasar información del navegador al servidor web.
- Envía la información codificada adjunta a la página. URL, separados por un carácter ?.
- También tiene una limitación de tamaño; la recomendación clásica es de aproximadamente 1024 caracteres por solicitud, aunque el límite real lo establecen el navegador y el servidor, más que la especificación HTTP.
- Debemos evitar enviar contraseñas e información confidencial mediante el método GET.
Método de publicación:
- POST es el método más fiable para enviar información al servidor.
- Envía la información como un cuerpo de mensaje separado en lugar de en la barra de direcciones.
- Porque los valores nunca aparecen después del ? en el URLNo se almacenan en el historial del navegador ni en los registros de acceso del servidor.
- Se utiliza habitualmente para enviar información confidencial.
JSP gestiona el procesamiento de datos de formularios utilizando los siguientes métodos:
- getParameter(): se utiliza para obtener el valor de un único parámetro de formulario.
- getParameterValues(): se utiliza para devolver los múltiples valores de un parámetro.
- getParameterNames(): se utiliza para obtener los nombres de todos los parámetros.
- getInputStream(): se utiliza para leer los datos binarios enviados por el cliente.
Ejemplo:
En este ejemplo, hemos tomado un formulario con dos campos, "nombre de usuario" y "contraseña", y un botón de envío.
formulario_acción.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>Guru Form</title> </head> <body> <form action="action_form_process.jsp" method="GET"> UserName: <input type="text" name="username"> <br /> Password: <input type="text" name="password" /> <input type="submit" value="Submit" /> </form> </body> </html>
Action_form_process.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>Insert title here</title> </head> <body> <h1>Form Processing</h1> <p><b>Welcome User:</b> <%= request.getParameter("username")%> </p> </body> </html>
Explicación del código: Action_form.jsp
Code Línea 10: Aquí hemos definido un formulario cuya acción es procesada por otro. JSPEn el atributo action agregamos el JSP al cual se debe enviar el formulario a través del método GET.
Aquí estamos utilizando el método GET para pasar la información, es decir, el nombre de usuario y la contraseña.
Code Línea 11-14: Aquí estamos tomando campos como nombre de usuario y contraseña, que son campos de texto, y estamos obteniendo la entrada del usuario.
Esta información se puede obtener mediante el método getParameter. También disponemos de un botón de envío que pasa los valores de los campos a action_form_process.jsp.
Action_form_process.jsp
Code Línea 14: Aquí obtenemos los valores de los campos de entrada de action_form.jsp utilizando el método getParameter del objeto de solicitud.
Al ejecutar el código anterior, obtenemos la siguiente salida.
Salida:
Action_form.jsp primero renderiza el formulario de dos campos que se muestra a continuación.
Después de enviar el formulario, action_form_process.jsp muestra el nombre de usuario que leyó con getParameter().
Al ejecutar action_form.jsp, obtenemos un formulario con dos campos, nombre de usuario y contraseña, y un botón de envío. Tras introducir el nombre de usuario y la contraseña, hacemos clic en enviar y la solicitud se procesa en la siguiente página, que muestra la página de procesamiento del formulario con un mensaje de bienvenida.
Nota de versión: Ambos servlets mencionados anteriormente importan javax.servlet, lo cual es correcto para Tomcat 9 y versiones anteriores. Jakarta EE 9 cambió el nombre de la API, por lo que en Tomcat 10 o posterior, cada importación de javax.servlet se convierte en jakarta.servlet, o bien la aplicación debe convertirse con la herramienta de migración de Apache Tomcat para Jakarta EE.







