Cuprins
Toate paginile web dinamice trimit și primesc parametri care reprezintă modul în care utilizatorul poate trimite informații către serverul Http. De exemplu, într-un ecran tipic de autentificare trebuie să trimitem numele de utilizator și parola la server pentru a le valida.Cum se face browserul pentru a trimite acești parametri utilizând metoda GET sau POST este explicat în tutorialul Web Server sau HTTP Server. Ceea ce vom vedea în acest tutorial este cum să preluăm informațiile de conectare pe server utilizând Servlet API.
Primul lucru pe care îl vom face este să creăm o pagină login.html pe site-ul nostru cu următorul conținut:
Utilizator | |
Cheie |
Următorul lucru este să creați un Servlet care primește cererea în / login, care este adresa indicată în atributul de acțiune al etichetei login.html.
pachet 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 extinde HttpServlet {@Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) aruncă ServletException, IOException {String user = req.getParameter ("user"); String pass = req.getParameter („parolă”); if ("login" .equals (utilizator) && "login" .equals (pass)) {răspuns (resp, "login ok"); } else {răspuns (resp, "Eroare de conectare"); }} private void response (HttpServletResponse resp, String msg) aruncă IOException {PrintWriter out = resp.getWriter (); out.println (""); out.println (""); out.println ("" + msg + ""); out.println (""); out.println (""); }}
Compilăm acest lucru Servlet și includem LoginServlet.class În agenda de adrese / WEB-INF / clase.
Modificăm web.xml pentru a lega / autentifica cu acest servlet.
login-servlet com.login.servlets.LoginServlet login-servlet / login
Repornim serverul, deschidem pagina login.html, punem un x în utilizator, un x în parolă și apăsăm butonul de trimitere.
Problema aici este că parola secretă este vizibilă în adresa URL … / login? User = admin & password = atx123, va rămâne în istoricul browserului și oricine accesează browserul după noi îl poate obține cu ușurință, cu excepția cazului în care folosim navigarea privată sau poate fi remediat schimbând metoda de trimitere a formularului la POST în login.html.
Utilizator | |
Cheie |
Ceea ce se întâmplă aici este că nu am implementat metoda doPost (implementăm doar doGet), astfel încât Servletul nostru nu este capabil să primească cereri POST. Următorul cod arată modificarea necesară pentru ca aceasta să funcționeze.
pachet 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 extinde HttpServlet {@Override protected void doPost (HttpServletRequest req, HttpServletResponse resp) aruncă ServletException, IOException {String user = req.getParameter ("user"); String pass = req.getParameter ("cheie"); if ("admin" .equals (user) && "atx123" .equals (pass)) {răspuns (resp, "login ok"); } else {răspuns (resp, "Eroare de conectare"); }} private void response (HttpServletResponse resp, String msg) aruncă IOException {PrintWriter out = resp.getWriter (); out.println (""); out.println (""); out.println ("" + msg + ""); out.println (""); out.println (""); }}
Singura modificare este că am înlocuit doGet cu doPost. După recompilarea și implementarea Servletului, repornirea serverului și utilizarea din nou a login.html, funcționează din nou în mod normal.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv