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.

  • ๐Ÿ”˜ Registreringsproces: Register_1.jsp indsamler seks felter og sender dem til servlet'en guru_register, som kun videresender til en successide, nรฅr alle felter er udfyldt.
  • โ˜‘๏ธ Log ind og log ud: Register_3.jsp sender legitimationsoplysninger til guru_login; Register_4.jsp hilser brugeren velkommen og linker tilbage til login-siden for at logge ud.
  • โœ… MVC-roller: JSP-sider fungerer som viewet, servlet'en fungerer som controller, og RequestDispatcher flytter anmodningen mellem dem.
  • ๐Ÿงช Formularbehandling: getParameter(), getParameterValues(), getParameterNames() og getInputStream() lรฆser indsendte data i en JSP eller servlet.
  • ๐Ÿ› ๏ธ GET versus POST: GET tilfรธjer kodede vรฆrdier til URL og er lรฆngdebegrรฆnset; POST bรฆrer vรฆrdier i anmodningsteksten, som passer til adgangskoder.
  • โš ๏ธ Versionsnotat: Disse lister importerer javax.servlet, sรฅ de kรธrer pรฅ Tomcat 9 eller tidligere; Tomcat 10 og nyere krรฆver jakarta.servlet-pakkerne.

Eksempler pรฅ JSP-registrerings- og loginformularprogrammer

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:

  1. Fornavn
  2. Efternavn
  3. Brugernavn
  4. Adgangskode
  5. Adresse
  6. 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.

Guru Registreringsformular i JSP med fornavn, efternavn, brugernavn, adgangskode, adresse og kontaktfelter

Nรฅr alle felter er udfyldt, og der klikkes pรฅ Send, videresender guru_register til register_2.jsp, og successiden vises.

Register_2.jsp-sider med succes, der viser velkomstmeddelelsen for brugeren efter registrering

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.

Guru Loginformular i JSP, der viser felter til brugernavn og adgangskode med en Login-knap

Nรฅr du har klikket pรฅ knappen Log ind, fรฅr du beskeden nedenfor sammen med et Log ud-link.

Velkomstskรฆrmen for Register_4.jsp hilser den indloggede bruger med et logud-link

Hvis du klikker pรฅ linket Log ud, vender du tilbage til den login-side, der vises her.

Login-siden vises igen i browseren, nรฅr brugeren klikker pรฅ Log ud

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:

  1. getParameter(): bruges til at hente vรฆrdien af โ€‹โ€‹en enkelt formularparameter.
  2. getParameterValues(): bruges til at returnere flere vรฆrdier af en parameter.
  3. getParameterNames(): bruges til at hente navnene pรฅ alle parametre.
  4. 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.

Action_form.jsp gengiver tekstfelterne Brugernavn og Adgangskode med en Send-knap

Efter indsendelse gentager action_form_process.jsp brugernavnet, som blev lรฆst med getParameter().

Outputsiden Action_form_process.jsp viser overskriften Formularbehandling og velkomstbeskeden

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.

Ofte Stillede Spรธrgsmรฅl

Listningerne er rettet mod Tomcat 9 og tidligere, hvor API'en findes i javax.servlet. Jakarta EE 9 omdรธbte navneomrรฅdet, sรฅ Tomcat 10 og nyere krรฆver jakarta.servlet-import og en rekompilering eller en kรธrsel gennem Tomcat Migration Tool.

Gem det aldrig som almindelig tekst. Hash det med en langsom, saltet algoritme som BCrypt eller Argon2, fรธr det nรฅr databasen, og sammenlign hash ved login. Eksempelservlet'en tjekker kun for tomme vรฆrdier, sรฅ hashing skal tilfรธjes.

include() kรธrer mรฅlressourcen og returnerer kontrol til den kaldende servlet, sรฅ begge output vises. forward() sender hele anmodningen til mรฅlet og kommer aldrig tilbage, sรฅ servlet'en mรฅ ikke have committet svaret fรธrst.

JSP-siderne er viewet, servlet'en er den controller, der lรฆser parametre og bestemmer, hvor den skal hen, og en database eller et bean-lag leverer modellen. RequestDispatcher er forbindelsen mellem controller og view.

AI-assistenter kan udarbejde valideringsgrene, finde manglende null-tjek pรฅ getParameter(), foreslรฅ hashing-biblioteker og forklare stakken. traces. Behandl alle forslag som et udkast: verificรฉr servlet API-versionen og test den genererede kode fรธr afsendelse.ping den.

Copilot er god til gentagne standardtekster sรฅsom doPost-stubs, parameterlรฆsninger og dispatcher-kald. Den bruger ofte รฆldre javax.servlet-importer som standard, sรฅ tjek navneomrรฅdet, valideringslogikken og esca.ping af ethvert brugerinput, det producerer.

Tilfรธj et JDBC-lag i servlet'en: รฅbn en pooled-forbindelse, brug en PreparedStatement til indsรฆttelsen eller opslaget af legitimationsoplysninger, og luk ressourcer i en finally-blok. Hold SQL'en ude af JSP'en, sรฅ visningen forbliver kun prรฆsentation.

Fordi guru_login kun tester, om felterne er tomme. Et tomt brugernavn eller en tom adgangskode inkluderer login-siden igen i stedet for at videresende, hvilket fungerer som en meget simpel valideringsfunktion snarere end en reel godkendelse.

Opsummer dette indlรฆg med: