Jsp Seiten, wie Parameter, GET-Methode und POST in Servlets gesendet werden

jsp.jpg

Jedes dynamische Web sendet und empfängt Parameter, mit denen der Benutzer Informationen an den HTTP-Server senden kann. In einem typischen Anmeldebildschirm müssen wir beispielsweise den Benutzer und das Kennwort zur Validierung an den Server senden.

Wie der Browser diese Parameter mit der Methode GET oder POST sendet, wird im Tutorial Web Server oder HTTP Server erläutert. In diesem Lernprogramm erfahren Sie, wie Sie mithilfe der Servlet-API Anmeldeinformationen auf dem Server abrufen.

Als Erstes erstellen wir auf unserer Website eine login.html -Seite mit folgendem Inhalt:

 <html> <body> <form action = "login" method = "get"> <table> <tr> <td> Benutzer </ td> <td> <input name = "user" /> </ td> </ tr> <tr> <td> Passwort </ td> <td> <input name = "key" /> </ td> </ tr> </ table> <input type = "submit" value = "Send" /> </ form> </ body> </ html> 

Als Nächstes erstellen Sie ein Servlet, das die Anforderung in / login empfängt. Dies ist die Adresse, die im Aktionsattribut des Tags <form> von login.html angegeben ist.

 Paket com.login.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet erweitert HttpServlet { @Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) wirft ServletException, IOException { String user = req.getParameter ("user"); String pass = req.getParameter ("password"); if ("login" .equals (user) && "login" .equals (pass)) { Antwort (bzw. "Login ok"); } else { Antwort (bzw. "Login error"); } } private void response (HttpServletResponse bzw. String msg) wirft IOException { PrintWriter out = resp.getWriter (); out.println ("<html>"); out.println ("<body>"); out.println ("<t1>" + msg + "</ t1>"); out.println ("</ body>"); out.println ("</ html>"); } } 

Wir kompilieren dieses Servlet und fügen LoginServlet.class in das Verzeichnis / WEB-INF / classes ein .

Ändern Sie die Datei web.xml, um sich mit diesem Servlet zu verbinden / anzumelden.

 <Web-App> <servlet> <Servlet-Name> Login-Servlet </ Servlet-Name> <servlet-class> com.login.servlets.LoginServlet </ servlet-class> </ servlet> <Servlet-Mapping> <Servlet-Name> Login-Servlet </ Servlet-Name> <url-pattern> / login </ url-pattern> </ servlet-mapping> </ web-app> 

Starten Sie den Server neu, öffnen Sie die Seite login.html, geben Sie ein x in user und ein x in password ein und klicken Sie auf die Schaltfläche “Senden”.

See also  So installieren, synchronisieren und verwenden Sie OneDrive unter Linux oder macOS

Das Problem hierbei ist, dass das geheime Passwort in der URL sichtbar ist … / login? User = admin & password = atx123, es bleibt im Browserverlauf und jeder, der nach uns auf den Browser zugreift, kann es leicht erhalten, es sei denn, wir verwenden privates Surfen oder es kann sein Behoben, indem die Methode zum Senden des Formulars an POST in login.html geändert wurde.

 <html> <body> <form action = "login" method = "post"> <table> <tr> <td> Benutzer </ td> <td> <input name = "user" /> </ td> </ tr> <tr> <td> Passwort </ td> <td> <input name = "key" /> </ td> </ tr> </ table> <input type = "submit" value = "Send" /> </ form> </ body> </ html> 

Was hier passiert, ist, dass wir die doPost-Methode nicht implementiert haben (wir implementieren nur doGet), sodass unser Servlet keine POST-Anforderungen empfangen kann. Der folgende Code zeigt die notwendigen Änderungen, damit es funktioniert.

 Paket com.login.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet erweitert HttpServlet { @Override Geschützter void doPost (HttpServletRequest req, HttpServletResponse resp) wirft ServletException, IOException { String user = req.getParameter ("user"); String pass = req.getParameter ("key"); if ("admin" .equals (user) && "atx123" .equals (pass)) { Antwort (bzw. "Login ok"); } else { Antwort (bzw. "Login error"); } } private void response (HttpServletResponse bzw. String msg) wirft IOException { PrintWriter out = resp.getWriter (); out.println ("<html>"); out.println ("<body>"); out.println ("<t1>" + msg + "</ t1>"); out.println ("</ body>"); out.println ("</ html>"); } } 

Die einzige Änderung ist, dass ich doGet durch doPost ersetzt habe. Nach dem erneuten Kompilieren und Bereitstellen des Servlets, dem Neustart des Servers und der erneuten Verwendung von login.html funktioniert es wieder normal.

See also  Entfernen und Zurücksetzen des Hijacker-Browsers unter Windows 10, 8, 7

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *