Spisie treści
Wszystkie dynamiczne strony internetowe wysyłają i odbierają parametry, dzięki którym użytkownik może wysyłać informacje do serwera HTTP. Na przykład na typowym ekranie logowania musimy wysłać nazwę użytkownika i hasło do serwera, aby je zweryfikować.Sposób, w jaki przeglądarka wysyła te parametry za pomocą metody GET lub POST, wyjaśniono w samouczku dotyczącym serwera sieci Web lub serwera HTTP. To, co zobaczymy w tym samouczku, to sposób pobierania informacji logowania na serwer za pomocą interfejsu API Servlet.
Pierwszą rzeczą, jaką zrobimy, jest utworzenie strony login.html na naszej stronie z następującą zawartością:
Użytkownik | |
Klucz |
Następną rzeczą jest utworzenie serwletu, który otrzyma żądanie w /login, czyli pod adresem wskazanym w atrybucie action tagu login.html.
pakiet com.login.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; importowanie javax.servlet.http.HttpServlet; importowanie javax.servlet.http.HttpServletRequest; importowanie javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet {@Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) rzuca ServletException, IOException {String user = req.getParameter ("użytkownik"); Przejście ciągu = req.getParameter ("hasło"); if ("login" .equals (użytkownik) && "login" .equals (pass)) {response (odp., "login ok"); } else {odpowiedź (odp., "Błąd logowania"); }} prywatna pusta odpowiedź (HttpServletResponse odp, ciąg msg) wyrzuca IOException {PrintWriter out = odp.getWriter (); out.println (""); out.println (""); out.println ("" + msg + ""); out.println (""); out.println (""); }}
Kompilujemy to Serwlet i włączamy LoginServlet.class W książce adresowej / WEB-INF / zajęcia.
Modyfikujemy web.xml, aby połączyć / zalogować się za pomocą tego serwletu.
serwlet-logowania com.login.servlets.Serwlet-logowania serwlet-logowania / login
Restartujemy serwer, otwieramy stronę login.html, wpisujemy użytkownika x, hasło x i wciskamy przycisk Wyślij.
Problem polega na tym, że tajne hasło jest widoczne w adresie URL…/login?User=admin&hasło=atx123, pozostanie ono w historii przeglądarki i każdy, kto uzyska dostęp do przeglądarki po nas, może je łatwo uzyskać, chyba że korzystamy z przeglądania prywatnego lub można to naprawić zmieniając metodę przesyłania formularza na POST w login.html.
Użytkownik | |
Klucz |
To, co się tutaj dzieje, to fakt, że nie zaimplementowaliśmy metody doPost (wprowadzamy tylko doGet), więc nasz Servlet nie jest w stanie odbierać żądań POST. Poniższy kod przedstawia modyfikację wymaganą do działania.
pakiet com.login.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; importowanie javax.servlet.http.HttpServlet; importowanie javax.servlet.http.HttpServletRequest; importowanie javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet {@Override protected void doPost (HttpServletRequest req, HttpServletResponse resp) rzuca ServletException, IOException {String user = req.getParameter ("użytkownik"); Przejście ciągu = req.getParameter ("klucz"); if ("admin" .equals (użytkownik) && "atx123" .equals (pass)) {odpowiedź (odp., "login ok"); } else {odpowiedź (odp., "Błąd logowania"); }} prywatna pusta odpowiedź (HttpServletResponse odp, ciąg msg) wyrzuca IOException {PrintWriter out = odp.getWriter (); out.println (""); out.println (""); out.println ("" + msg + ""); out.println (""); out.println (""); }}
Jedyną zmianą jest to, że zamieniłem doGeta na doPost. Po ponownej kompilacji i wdrożeniu Servlet, zrestartowaniu serwera i ponownym użyciu login.html, serwlet znów działa normalnie.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt