Inhoudsopgave
Alle dynamische web verzendt en ontvangt parameters die de manier zijn waarop de gebruiker informatie naar de Http-server kan verzenden. In een typisch inlogscherm moeten we bijvoorbeeld de gebruikersnaam en het wachtwoord naar de server sturen om het te valideren.Hoe de browser deze parameters verzendt met behulp van de GET- of POST-methode, wordt uitgelegd in de zelfstudie Web Server of HTTP Server. Wat we in deze tutorial gaan zien, is hoe je inloggegevens op de server kunt ophalen met behulp van de Servlet API.
Het eerste dat we gaan doen, is een login.html-pagina op onze site maken met de volgende inhoud:
Gebruiker | |
Sleutel |
Het volgende ding is om een Servlet te maken die het verzoek ontvangt in / login, wat het adres is dat wordt aangegeven in het actieattribuut van de login.html-tag.
pakket com.login.servlets; import java.io.IOException; java.io.PrintWriter importeren; javax.servlet.ServletException importeren; javax.servlet.http.HttpServlet importeren; javax.servlet.http.HttpServletRequest importeren; javax.servlet.http.HttpServletResponse importeren; openbare klasse LoginServlet breidt HttpServlet uit {@Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) gooit ServletException, IOException {String user = req.getParameter ("gebruiker"); String pass = req.getParameter ("wachtwoord"); if ("login" .equals (gebruiker) && "login" .equals (pass)) {response (resp, "login ok"); } else {antwoord (resp, "Inlogfout"); }} private void response (HttpServletResponse resp, String msg) genereert IOException {PrintWriter out = resp.getWriter (); uit.println (""); uit.println (""); out.println ("" + bericht + ""); uit.println (""); uit.println (""); }}
Wij stellen dit samen Servlet en we omvatten LoginServlet.class In het adresboek / WEB-INF / lessen.
We passen web.xml aan om te linken / inloggen met deze Servlet.
login-servlet com.login.servlets.LoginServlet login-servlet / login
We herstarten de server, openen de login.html pagina, zetten een x in user, een x in password en drukken op de verzendknop.
Het probleem hier is dat het geheime wachtwoord zichtbaar is in de URL … / login? Gebruiker = admin & wachtwoord = atx123, het blijft in de browsergeschiedenis en iedereen die de browser na ons opent, kan het gemakkelijk verkrijgen, tenzij we privé browsen gebruiken of het kan worden opgelost door de methode voor het indienen van formulieren te wijzigen in POST in login.html.
Gebruiker | |
Sleutel |
Wat hier gebeurt, is dat we de doPost-methode niet hebben geïmplementeerd (we implementeren alleen doGet), dus onze Servlet kan geen POST-verzoeken ontvangen. De volgende code toont de wijziging die nodig is om het te laten werken.
pakket com.login.servlets; import java.io.IOException; java.io.PrintWriter importeren; javax.servlet.ServletException importeren; javax.servlet.http.HttpServlet importeren; javax.servlet.http.HttpServletRequest importeren; javax.servlet.http.HttpServletResponse importeren; openbare klasse LoginServlet breidt HttpServlet uit {@Override protected void doPost (HttpServletRequest req, HttpServletResponse resp) gooit ServletException, IOException {String user = req.getParameter ("gebruiker"); String pass = req.getParameter ("sleutel"); if ("admin" .equals (gebruiker) && "atx123" .equals (pass)) {respons (resp, "login ok"); } else {antwoord (resp, "Inlogfout"); }} private void response (HttpServletResponse resp, String msg) genereert IOException {PrintWriter out = resp.getWriter (); uit.println (""); uit.println (""); out.println ("" + bericht + ""); uit.println (""); uit.println (""); }}
De enige verandering is dat ik doGet heb vervangen door doPost. Na het opnieuw compileren en implementeren van de Servlet, het herstarten van de server en het opnieuw gebruiken van login.html, werkt het weer normaal.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven