Esempi di programmi JSP: modulo di registrazione e accesso
โก Riepilogo intelligente
Gli esempi di programma JSP qui presentati creano tre moduli: un modulo di registrazione, un modulo di accesso e disconnessione e una pagina di elaborazione dei moduli. Ciascun modulo collega una vista JSP a un controller servlet, in modo che la distinzione tra architettura MVC e MVC rimanga chiara anche ai principianti.
Questi esempi pratici mostrano come sviluppare programmi di esempio con JSP e come implementare l'architettura MVC attorno ad essi. Vengono costruiti tre moduli in sequenza:
- il modulo d'iscrizione
- Modulo di accesso e disconnessione
- Modulo JSP
Come creare un modulo di registrazione in JSP
Nel modulo di registrazione รจ presente uno spazio da compilare con tutti i dati richiesti, tra cui nome, nome utente, password, indirizzo, numero di telefono, ecc.
Questo modulo ci aiuta a registrarci con l'applicazione. Prende tutti i nostri dati e li memorizza in un banca dati o cache.
In questo esempio prenderemo il โGuru Modulo di registrazioneโ, che presenta i seguenti campi:
- Nome
- Cognome
- Nome utente
- Password
- Indirizzo
- Numero Cellulare
Dopo aver inserito tutti questi dettagli, รจ presente un pulsante di invio; cliccando su tale pulsante, tutti i dati vengono inviati al servlet.
Esempio 1: Register_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>
Spiegazione del codice:
Code Linea 11: Qui stiamo prendendo un modulo che ha un'azione, ovvero la servlet a cui verrร inviata la richiesta, e il nome della servlet รจ guru_register.java. La richiesta verrร elaborata tramite il metodo POST.
Code Linea 14-16: Qui stiamo prendendo come input il tipo di testo e il nome รจ first_name.
Code Linea 18-20: Qui stiamo prendendo come input il tipo di testo e il nome รจ last_name.
Code Linea 22-24: Qui stiamo utilizzando il tipo di input testo e il nome รจ username.
Code Linea 26-28: Qui utilizziamo il tipo di input "password" (in questo modo la password viene nascosta durante la digitazione) e il nome come password.
Code Linea 30-32: Qui stiamo utilizzando il tipo di input testo e il nome come indirizzo.
Code Linea 34-36: Qui utilizziamo il tipo di input testo e il nome contatto.
Code Linea 37: Qui stiamo prendendo un pulsante di tipo "submit" il cui valore รจ anch'esso "Submit". Facendo clic su questo pulsante, l'azione viene indirizzata alla servlet guru_register corrispondente, dove tutti i valori dei parametri vengono passati nella richiesta.
Nota: l'attributo della tabella in Code La riga 12 recita style="with: 50%". La proprietร CSS corretta รจ widthPertanto, l'elenco viene riprodotto esattamente come pubblicato, ma la tabella non verrร ridimensionata finchรฉ l'errore di battitura non verrร corretto nella tua copia.
Esempio 2: Guru_register.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); } } }
Spiegazione del codice:
Code Linea 14: Qui definiamo la servlet guru_register, che estende HttpServlet.
Code Linea 18: Questo รจ il metodo doPost(), che viene chiamato quando specifichiamo POST come attributo del metodo nel modulo JSP sopra.
Code Linea 20-25: Qui stiamo recuperando i valori dalla richiesta, ovvero first_name, last_name, username, password, address e contact, utilizzando request.getParameter.
Code Linea 27-32: Qui utilizziamo una condizione if per verificare se uno qualsiasi dei parametri recuperati dalla richiesta รจ vuoto. Se un parametro รจ vuoto, il controllo entra in questa condizione ( first_name.isEmpty() || last_name.isEmpty() || username.isEmpty() || password.isEmpty() || address.isEmpty() || contact.isEmpty()) e recuperiamo un oggetto RequestDispatcher dall'oggetto request, che invia la richiesta a register_1.jsp. Qui includiamo anche gli oggetti request e response.
Code Linea 33-37: Questo ramo viene eseguito quando nessuno dei parametri รจ vuoto. Recuperiamo un oggetto RequestDispatcher dall'oggetto request, che inoltra la richiesta a register_2.jsp. Qui stiamo inoltrando gli oggetti request e response.
La differenza tra i due rami รจ importante: include() esegue register_1.jsp e restituisce il controllo alla servlet, mentre forward() inoltra la richiesta a register_2.jsp e non restituisce nulla.
Esempio 3: Register_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>
Spiegazione del codice:
Code Linea 10: Qui visualizziamo il messaggio di benvenuto. Questa pagina JSP viene richiamata quando tutti i parametri sono stati compilati.
Quando si esegue il codice sopra riportato, si ottiene il seguente output.
Produzione:
La pagina di registrazione visualizza i sei campi etichettati con un singolo pulsante Invia, come mostrato di seguito.
Una volta compilati tutti i campi e cliccato su Invia, guru_register reindirizza a register_2.jsp e viene visualizzata la pagina di conferma.
Quando clicchiamo su register_1.jsp, visualizziamo un modulo con nome, cognome, nome utente, password, indirizzo e contatto. Dopo aver compilato tutti i campi e cliccato sul pulsante Invia, compare il messaggio "Benvenuto utente".
Come creare un modulo di login e logout in JSP
Analogamente al modulo di registrazione, ora creeremo un modulo di accesso e uno di disconnessione.
In questo esempio, abbiamo preso un modulo di accesso con due campi, "nome utente" e "password", e un pulsante di invio.
Quando clicchiamo sul pulsante "Invia", riceviamo un messaggio di benvenuto con un pulsante per uscire.
Quando clicchiamo sul pulsante di disconnessione, torniamo al modulo di accesso.
Esempio 1: Register_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>
Spiegazione del codice:
Code Linea 10: Qui stiamo prendendo un modulo la cui azione รจ la servlet guru_login.java. Il metodo tramite il quale vengono trasmessi i dati รจ POST.
Code Linea 13-16: Qui stiamo prendendo un campo di input "username", che รจ di tipo testo.
Code Linea 17-20: Qui stiamo prendendo un campo di input "password", che รจ di tipo password.
Code Linea 22: Qui abbiamo un pulsante "Invia" con il valore "Accedi". Cliccandoci sopra, il controllo passa alla servlet guru_login, dove entrambi i campi vengono letti utilizzando l'oggetto request.
Esempio 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); } } }
Spiegazione del codice:
Code Linea 5-9: Qui stiamo importando le classi necessarie nel codice.
Code Linea 14: Qui dichiariamo la servlet guru_login, che estende HttpServlet.
Code Linea 21: Qui utilizziamo il metodo doPost() perchรฉ il modulo utilizza il metodo POST.
Code Linea 23-24: Qui leggiamo i parametri utilizzando l'oggetto richiesta, ovvero nome utente e password.
Code Linea 25-29: In questo modo utilizziamo una condizione "if" che verifica se username e password sono vuoti. Se uno dei due รจ vuoto, otteniamo un oggetto RequestDispatcher che invia il controllo a register_3.jsp con gli oggetti request e response.
Code Linea 30-34: Questo ramo viene eseguito se entrambi i parametri non sono vuoti; in tal caso, inoltra la richiesta a register_4.jsp con gli oggetti di richiesta e risposta.
Esempio 3: Register_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>
Spiegazione del codice:
Code Linea 12: Qui otteniamo il parametro "username" dall'oggetto request e lo memorizziamo nell'oggetto String username. Questo funziona perchรฉ forward() mantiene intatta la richiesta originale e, di conseguenza, i suoi parametri.
Code Linea 13: Qui abbiamo un messaggio di benvenuto con il nome utente.
Code Linea 14: Qui troviamo il link di logout, che reindirizza l'utente alla pagina register_3.jsp.
Quando si esegue il codice sopra riportato, si ottiene il seguente output.
Produzione:
Aprendo il file register_3.jsp vengono visualizzati i due campi per le credenziali e un pulsante di accesso.
Dopo aver cliccato sul pulsante Accedi, visualizzerai il messaggio seguente insieme a un link per disconnetterti.
Facendo clic sul link "Esci" si viene reindirizzati alla pagina di accesso mostrata qui.
Nota: Questo esempio confronta solo i valori vuoti, quindi qualsiasi nome utente non vuoto viene accettato. Un login di produzione deve verificare le credenziali rispetto a un archivio e mantenere le password crittografate, mai in chiaro.
Elaborazione del modulo JSP utilizzando getParameter()
I moduli sono il metodo piรน comune per raccogliere dati nell'elaborazione web. Dobbiamo inviare informazioni al server web e poi leggerle nuovamente sul server.
Esistono due metodi comunemente utilizzati per inviare e recuperare informazioni al server web.
Metodo OTTIENI:
- Questo รจ il metodo predefinito per passare le informazioni dal browser al server web.
- Invia le informazioni codificate aggiunte alla pagina URL, separati dal carattere ?.
- Esiste anche un limite di dimensione; la linea guida classica indica circa 1024 caratteri per richiesta, sebbene il limite effettivo sia stabilito dal browser e dal server piuttosto che dalla specifica HTTP.
- Dovremmo evitare di inviare password e informazioni sensibili tramite il metodo GET.
Metodo POST:
- Il metodo POST รจ il metodo piรน affidabile per inviare informazioni al server.
- Invia le informazioni come corpo del messaggio separato anzichรฉ nella barra degli indirizzi.
- Poichรฉ i valori non compaiono mai dopo il ? nel URLnon vengono memorizzati nella cronologia del browser o nei registri di accesso del server.
- Viene comunemente utilizzato per inviare informazioni sensibili.
JSP gestisce l'elaborazione dei dati dei moduli utilizzando i seguenti metodi:
- getParameter(): utilizzato per ottenere il valore di un singolo parametro del modulo.
- getParameterValues(): utilizzato per restituire i valori multipli di un parametro.
- getParameterNames(): utilizzato per ottenere i nomi di tutti i parametri.
- getInputStream(): utilizzato per leggere i dati binari inviati dal client.
Esempio:
In questo esempio, abbiamo preso un modulo con due campi, "nome utente" e "password", e un pulsante di invio.
Action_form.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>
Spiegazione del codice: Action_form.jsp
Code Linea 10: Qui abbiamo definito un modulo la cui azione viene elaborata da un altro JSPNell'attributo action aggiungiamo la pagina JSP a cui il modulo deve essere inviato tramite il metodo GET.
Qui utilizziamo il metodo GET per trasmettere le informazioni, ovvero nome utente e password.
Code Linea 11-14: Qui stiamo prendendo campi come nome utente e password, che sono campi di testo, e stiamo raccogliendo l'input dall'utente.
Questi dati di input possono essere recuperati utilizzando il metodo getParameter. ร presente anche un pulsante di invio che passa i valori del campo al file action_form_process.jsp.
Action_form_process.jsp
Code Linea 14: Qui recuperiamo i valori dei campi di input da action_form.jsp utilizzando il metodo getParameter dell'oggetto request.
Eseguendo il codice sopra riportato, otteniamo il seguente output.
Produzione:
Il file Action_form.jsp visualizza innanzitutto il modulo a due campi mostrato di seguito.
Dopo l'invio, action_form_process.jsp restituisce il nome utente letto tramite getParameter().
Quando eseguiamo action_form.jsp, otteniamo un modulo con due campi, nome utente e password, e un pulsante di invio. Dopo aver inserito nome utente e password, clicchiamo su Invia e la richiesta viene elaborata dalla pagina successiva, che ci riporta alla pagina di elaborazione del modulo con un messaggio di benvenuto.
Nota sulla versione: Entrambi i servlet sopra menzionati importano javax.servlet, il che รจ corretto per Tomcat 9 e versioni precedenti. Jakarta EE 9 ha rinominato l'API, quindi su Tomcat 10 o versioni successive ogni importazione di javax.servlet diventa jakarta.servlet, oppure l'applicazione deve essere convertita con Apache Tomcat Migration Tool per Jakarta EE.







