Innehållsförteckning
All dynamisk webb skickar och tar emot parametrar som är det sätt som användaren kan skicka information till HTTP -servern. Till exempel, i en typisk inloggningsskärm måste vi skicka användarnamnet och lösenordet till servern för att validera det.Hur webbläsaren gör för att skicka dessa parametrar med hjälp av GET- eller POST -metoden förklaras i webbservern eller HTTP -serverhandledning. Vad vi ska se i den här självstudien är hur man hämtar inloggningsinformation på servern med Servlet API.
Det första vi ska göra är att skapa en login.html -sida på vår webbplats med följande innehåll:
Användare | |
Nyckel |
Nästa sak är att skapa en Servlet som tar emot begäran i / inloggning, vilket är adressen som anges i åtgärdsattributet för taggen login.html.
paket com.login.servlets; importera java.io.IOException; importera java.io.PrintWriter; importera javax.servlet.ServletException; importera javax.servlet.http.HttpServlet; importera javax.servlet.http.HttpServletRequest; importera javax.servlet.http.HttpServletResponse; public class LoginServlet utökar HttpServlet {@Override skyddad void doGet (HttpServletRequest req, HttpServletResponse resp) kastar ServletException, IOException {String user = req.getParameter ("användare"); Strängpass = req.getParameter ("lösenord"); if ("login" .equals (user) && "login" .equals (pass)) {response (resp, "login ok"); } annat {svar (resp. "Inloggningsfel"); }} private void response (HttpServletResponse resp, String msg) kastar IOException {PrintWriter ut = resp.getWriter (); out.println (""); out.println (""); out.println ("" + msg + ""); out.println (""); out.println (""); }}
Vi sammanställer detta Servlet och vi inkluderar LoginServlet.class I adressboken / WEB-INF / klasser.
Vi ändrar web.xml för att länka / logga in med denna Servlet.
login-servlet com.login.servlets.LoginServlet login-servlet / login
Vi startar om servern, öppnar login.html -sidan, sätter ett x i användare, ett x i lösenord och trycker på skicka -knappen.
Problemet här är att det hemliga lösenordet är synligt i webbadressen … / inloggning? Användare = admin & lösenord = atx123, det kommer att förbli i webbläsarhistoriken och alla som öppnar webbläsaren efter oss kan enkelt få det, om vi inte använder privat surfning eller det kan åtgärdas genom att ändra formuläret för inlämning till POST i login.html.
Användare | |
Nyckel |
Vad som händer här är att vi inte har implementerat doPost -metoden (vi implementerar bara doGet) så att vår Servlet inte kan ta emot POST -förfrågningar. Följande kod visar den modifiering som krävs för att den ska fungera.
paket com.login.servlets; importera java.io.IOException; importera java.io.PrintWriter; importera javax.servlet.ServletException; importera javax.servlet.http.HttpServlet; importera javax.servlet.http.HttpServletRequest; importera javax.servlet.http.HttpServletResponse; public class LoginServlet utökar HttpServlet {@Override skyddade void doPost (HttpServletRequest req, HttpServletResponse resp) kastar ServletException, IOException {String user = req.getParameter ("användare"); Strängpass = req.getParameter ("nyckel"); if ("admin" .equals (användare) && "atx123" .equals (pass)) {svar (resp. "logga in ok"); } annat {svar (resp. "Inloggningsfel"); }} private void response (HttpServletResponse resp, String msg) kastar IOException {PrintWriter ut = resp.getWriter (); out.println (""); out.println (""); out.println ("" + msg + ""); out.println (""); out.println (""); }}
Den enda ändringen är att jag ersatte doGet med doPost. Efter att ha kompilerat om och distribuerat Servlet, startat om servern och använt login.html igen, fungerar det normalt igen.Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng