JSP-programeksempler: Registrerings- og loginformular
โก Smart opsummering
JSP-programeksemplerne her bygger tre moduler - en registreringsformular, en login- og logoutformular og en formularbehandlingsside - der hver isรฆr forbinder en JSP-visning til en servlet-controller, sรฅ MVC-opdelingen forbliver synlig for begyndere.
Disse eksempler viser, hvordan man udvikler eksempelprogrammer med JSP, og hvordan man implementerer MVC-arkitekturen omkring dem. Tre moduler er bygget i rรฆkkefรธlge:
- Tilmeldingsblanket
- Log ind og logout formular
- JSP-formular
Sรฅdan opretter du en registreringsformular i JSP
I en registreringsformular har vi en formular, hvor vi udfylder alle oplysninger, herunder navn, brugernavn, adgangskode, adresse, kontaktnummer osv.
Denne formular hjรฆlper os med at registrere os i applikationen. Den indsamler alle vores oplysninger og gemmer dem i en database eller cache.
I dette eksempel tager vi "Guru "Tilmeldingsformular", som har fรธlgende felter:
- Fornavn
- Efternavn
- Brugernavn
- Adgangskode
- Adresse
- Kontakt nummer
Efter at have udfyldt alle disse oplysninger, har vi en send-knap; nรฅr vi klikker pรฅ den knap, sendes alle oplysningerne til servlet'en.
Eksempel 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>
Forklaring af koden:
Code Linje 11: Her tager vi en formular, der har en handling, dvs. den servlet, som anmodningen skal sendes til, og servletnavnet er guru_register.java. Anmodningen vil blive behandlet via POST-metoden.
Code Linje 14-16: Her tager vi inputtypen tekst, og navnet er fornavn.
Code Linje 18-20: Her tager vi inputtypen tekst, og navnet er last_name.
Code Linje 22-24: Her tager vi inputtypen tekst, og navnet er brugernavn.
Code Linje 26-28: Her tager vi inputtypen adgangskode (dette skjuler adgangskoden, mens den indtastes) og navnet som adgangskode.
Code Linje 30-32: Her tager vi inputtypen som tekst og navnet som adresse.
Code Linje 34-36: Her tager vi inputtypen som tekst og navnet som kontakt.
Code Linje 37: Her tager vi en knap af typen `submit`, hvis vรฆrdi ogsรฅ er `Submit`. Nรฅr man klikker pรฅ denne knap, gรฅr handlingen til den tilsvarende `guru_register` servlet, hvor alle parametervรฆrdierne sendes i anmodningen.
Bemรฆrk: tabelattributten i Code Linje 12 lรฆses style="with: 50%"Den korrekte CSS-egenskab er width, sรฅ listen gengives prรฆcis som offentliggjort, men tabellen vil ikke blive dimensioneret, fรธr den tastefejl er rettet i din egen kopi.
Eksempel 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); } } }
Forklaring af koden:
Code Linje 14: Her definerer vi servlet'en guru_register, som udvider HttpServlet.
Code Linje 18: Dette er doPost()-metoden, som kaldes, nรฅr vi angiver POST som metodeattributten i JSP-formularen ovenfor.
Code Linje 20-25: Her henter vi vรฆrdierne fra anmodningen, dvs. fornavn, efternavn, brugernavn, adgangskode, adresse og kontakt, ved hjรฆlp af request.getParameter.
Code Linje 27-32: Her bruger vi en if-betingelse, hvor vi kontrollerer, om nogen af โโde parametre, der hentes fra anmodningen, er tomme. Hvis en parameter er tom, indtaster kontrollen denne betingelse (first_name.isEmpty() || last_name.isEmpty() || username.isEmpty() || password.isEmpty() || address.isEmpty() || contact.isEmpty()), og vi henter et RequestDispatcher-objekt fra anmodningsobjektet, som sender anmodningen tilbage til register_1.jsp. Her inkluderer vi ogsรฅ anmodnings- og svarobjekterne.
Code Linje 33-37: Denne gren udfรธres, nรฅr ingen af โโparametrene er tomme. Vi henter et RequestDispatcher-objekt fra request-objektet, som videresender anmodningen til register_2.jsp. Her videresender vi request- og response-objekterne.
Forskellen mellem de to grene er vigtig: include() kรธrer register_1.jsp og returnerer kontrol til servlet'en, mens forward() sender anmodningen til register_2.jsp og vender ikke tilbage.
Eksempel 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>
Forklaring af koden:
Code Linje 10: Her viser vi velkomstbeskeden. Denne JSP kaldes, nรฅr alle parametrene er udfyldt.
Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output.
Output:
Registreringssiden viser de seks markerede felter med en enkelt Send-knap, som vist nedenfor.
Nรฅr alle felter er udfyldt, og der klikkes pรฅ Send, videresender guru_register til register_2.jsp, og successiden vises.
Nรฅr vi klikker pรฅ register_1.jsp, fรฅr vi en formular med fornavn, efternavn, brugernavn, adgangskode, adresse og kontakt. Nรฅr alle oplysninger er udfyldt, og der klikkes pรฅ send-knappen, fรฅr vi beskeden "Velkommen bruger".
Sรฅdan opretter du en login- og logoutformular i JSP
Ligesom registreringsformularen vil vi nu oprette en login- og logoutformular.
I dette eksempel har vi taget en loginformular med to felter, "brugernavn" og "adgangskode", og en send-knap.
Nรฅr vi klikker pรฅ send-knappen, fรฅr vi en velkomstbesked med en log ud-knap.
Nรฅr vi klikker pรฅ log ud-knappen, kommer vi tilbage til login-formularen.
Eksempel 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>
Forklaring af koden:
Code Linje 10: Her tager vi en formular, hvis handling er servlet'en guru_login.java. Metoden, hvorigennem dataene sendes, er POST.
Code Linje 13-16: Her bruger vi inputfeltet "brugernavn", som er af typen tekst.
Code Linje 17-20: Her bruger vi inputfeltet "adgangskode", som er af typen adgangskode.
Code Linje 22: Her tager vi en "send"-knap med vรฆrdien "Login". Nรฅr man klikker pรฅ den, gรฅr kontrollen til servlet'en guru_login, hvor begge felter lรฆses ved hjรฆlp af request-objektet.
Eksempel 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); } } }
Forklaring af koden:
Code Linje 5-9: Her importerer vi de nรธdvendige klasser ind i koden.
Code Linje 14: Her deklarerer vi servlet'en guru_login, som udvider HttpServlet.
Code Linje 21: Her bruger vi doPost()-metoden, fordi formularen bruger POST-metoden.
Code Linje 23-24: Her lรฆser vi parametre ved hjรฆlp af request-objektet, dvs. brugernavn og adgangskode.
Code Linje 25-29: Pรฅ denne mรฅde bruger vi en "if"-betingelse, der kontrollerer, om brugernavn og adgangskode er tomme. Hvis en af โโdem er tomme, fรฅr vi et RequestDispatcher-objekt, der sender kontrol tilbage til register_3.jsp med request- og response-objekterne.
Code Linje 30-34: Denne gren udfรธres, hvis begge ikke er tomme; den videresender derefter anmodningen til register_4.jsp med request- og response-objekterne.
Eksempel 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>
Forklaring af koden:
Code Linje 12: Her henter vi parameteren "brugernavn" fra request-objektet ind i String-objektets brugernavn. Dette fungerer fordi forward() bevarer den oprindelige request, og dermed dens parametre, intakte.
Code Linje 13: Her har vi en velkomstbesked med brugernavnet.
Code Linje 14: Her har vi logout-linket, som sender brugeren tilbage til register_3.jsp.
Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output.
Output:
Nรฅr register_3.jsp รฅbnes, vises de to legitimationsfelter og en Login-knap.
Nรฅr du har klikket pรฅ knappen Log ind, fรฅr du beskeden nedenfor sammen med et Log ud-link.
Hvis du klikker pรฅ linket Log ud, vender du tilbage til den login-side, der vises her.
Bemรฆrk: Dette eksempel sammenligner kun for tomme vรฆrdier, sรฅ ethvert ikke-tomt brugernavn accepteres. Et produktionslogin skal verificere legitimationsoplysningerne mod en butik og holde adgangskoder hash-hashte, aldrig i almindelig tekst.
JSP-formularbehandling ved hjรฆlp af getParameter()
Formularer er den almindelige metode til at indsamle input i webbehandling. Vi skal sende information til webserveren og derefter lรฆse den information tilbage pรฅ serversiden.
Der er to almindeligt anvendte metoder til at sende og fรฅ information tilbage til webserveren.
GET metode:
- Dette er standardmetoden til at videregive information fra browser til webserver.
- Den sender de kodede oplysninger, der er tilfรธjet til siden. URL, adskilt af et ?-tegn.
- Den har ogsรฅ en stรธrrelsesbegrรฆnsning; den klassiske vejledning er cirka 1024 tegn pr. anmodning, selvom det reelle loft er fastsat af browseren og serveren snarere end af HTTP-specifikationen.
- Vi bรธr undgรฅ at sende adgangskoder og fรธlsomme oplysninger via GET-metoden.
POST metode:
- POST er den mere pรฅlidelige metode til at sende information til serveren.
- Den sender oplysningerne som en separat beskedtekst i stedet for i adresselinjen.
- Fordi vรฆrdierne aldrig vises efter ? i URL, de gemmes ikke i browserhistorikken eller serveradgangslogfiler.
- Det bruges ofte til at sende fรธlsomme oplysninger.
JSP hรฅndterer formulardatabehandling ved hjรฆlp af fรธlgende metoder:
- getParameter(): bruges til at hente vรฆrdien af โโen enkelt formularparameter.
- getParameterValues(): bruges til at returnere flere vรฆrdier af en parameter.
- getParameterNames(): bruges til at hente navnene pรฅ alle parametre.
- getInputStream(): bruges til at lรฆse de binรฆre data, der sendes af klienten.
Eksempel:
I dette eksempel har vi taget en formular med to felter, "brugernavn" og "adgangskode", og en send-knap.
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>
Forklaring af koden: Action_form.jsp
Code Linje 10: Her har vi defineret en formular, hvis handling behandles af en anden JSPI action-attributten tilfรธjer vi den JSP, som formularen skal indsendes til via GET-metoden.
Her bruger vi GET-metoden til at videregive informationen, dvs. brugernavn og adgangskode.
Code Linje 11-14: Her tager vi felter som brugernavn og adgangskode, som er tekstfelter, og vi fรฅr input fra brugeren.
Dette input kan hentes ved hjรฆlp af getParameter-metoden. Vi har ogsรฅ en send-knap, som sender feltvรฆrdierne til action_form_process.jsp.
Action_form_process.jsp
Code Linje 14: Her henter vi vรฆrdierne for inputfelterne fra action_form.jsp ved hjรฆlp af request-objektets getParameter-metode.
Nรฅr vi udfรธrer ovenstรฅende kode, fรฅr vi fรธlgende output.
Output:
Action_form.jsp gengiver fรธrst den to-felts formular, der er vist nedenfor.
Efter indsendelse gentager action_form_process.jsp brugernavnet, som blev lรฆst med getParameter().
Nรฅr vi udfรธrer action_form.jsp, fรฅr vi en formular med to felter, brugernavn og adgangskode, og en send-knap. Efter at have indtastet et brugernavn og en adgangskode, klikker vi pรฅ send, og anmodningen behandles af den nรฆste side, som returnerer siden Formularbehandling med en velkomstbesked.
Versionsnotat: Begge ovenstรฅende servlets importerer javax.servlet, hvilket er korrekt for Tomcat 9 og tidligere. Jakarta EE 9 omdรธbte API'en, sรฅ i Tomcat 10 eller nyere bliver alle importerede javax.servlets til jakarta.servlet, eller applikationen skal konverteres med Apache Tomcat Migration Tool til Jakarta EE.







