2.1 HttpServletRequest-Klasse

Der Großteil der Arbeit, die Ihr Servlet leisten muss, basiert auf den von der Anfrage erhaltenen Informationen. Dafür ist das Objekt verantwortlich , das der Container an Ihr Servlet (an die Methode oder Methoden usw. ) HttpServletRequestweitergibt.servicedoGet()doPost()

Dieses Objekt verfügt über eine ganze Reihe von Methoden, da es lediglich die Anforderungsdaten speichert und Sie über es mit dem Container interagieren können.

Methoden können in 2 große Gruppen unterteilt werden:

  • Methoden im Zusammenhang mit der Benutzerautorisierung
  • Methoden zum Arbeiten mit Abfragedaten

Ich werde den Benutzern Autorisierungsmethoden in Form einer Tabelle zur Verfügung stellen, aber wir werden sie nicht analysieren. Tatsache ist, dass sie sehr selten zur Autorisierung eines Benutzers verwendet werden. Alle gängigen Frameworks verwenden ihre eigenen, viel fortschrittlicheren Autorisierungsansätze.

Ich sollte sie auflisten, aber auch hier habe ich noch niemanden gesehen, der sie benutzt.

Methode Beschreibung
1 authenticate(HttpServletResponse) Führt eine Antwortauthentifizierung durch
2 changeSessionId() Ändern Sie die Sitzungs-ID zwangsweise
3 getAuthType() Gibt den verwendeten Authentifizierungstyp zurück: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Gibt die Benutzeranmeldung zurück
5 getRequestedSessionId() Gibt die SessionID des Clients zurück
6 getSession() Gibt ein HttpSession-Objekt zurück
7 getUserPrincipal() Gibt ein java.security.Principal-Objekt zurück
8 login(username, password) Führt die Benutzeranmeldung durch
9 logout() Meldet die Benutzersitzung ab

2.2 Daten anfordern

Die zweite Gruppe von Methoden ist viel interessanter. Welche Daten liegen uns in der Anfrage vor?

  • http-Methode
  • URI
  • Optionen
  • Titel

Sehen wir uns an, welche Methoden für die Arbeit mit ihnen verfügbar sind:

Methode Beschreibung
1 getMethod() Gibt die HTTP-Methode zurück: GET, POST, DELETE, ...
2 getRequestURI() Gibt den Anforderungs-URI zurück: http://codegym.cc/my/data
3 getRequestURL() Gibt die Anforderungs-URL zurück: http://codegym.cc/my/data
4 getQueryString() Gibt eine Abfrage zurück, d. h. alles nach dem ?
5 getParameterMap() Gibt eine Liste von Abfrageparametern zurück
6 getParameter(String name) Gibt den Wert des Parameters anhand seines Namens zurück
7 getContentType() Gibt den MimeType-Anfragetext zurück
8 getReader() Leser liest den Anforderungstext als Text
9 getInputStream() InputStream zum Lesen des Anforderungstexts als Byte[]
10 getSession() Gibt ein HttpSession-Objekt zurück
elf getCookies() Gibt ein Array von Cookie[]-Objekten zurück
12 getHeaderNames() Gibt eine Liste mit Titeln zurück, nur Namen
13 getHeader(String name) Gibt den Headerwert nach Namen zurück
14 getServletPath() Gibt den Teil der URL zurück, der auf das Servlet verweist
15 getContextPath() Gibt den Teil des URI zurück, der den Inhalt der Anfrage angibt

Und das sind noch nicht einmal alle Methoden ...

Aber nachdem wir das HTTP-Protokoll studiert und gelernt haben, wie man mit HttpClient arbeitet, ist hier doch alles mehr oder weniger vertraut, nicht wahr?

Schreiben wir ein Servlet, an das Text und eine Farbe übergeben werden können und das eine HTML-Seite mit diesem Text in der angegebenen Farbe zurückgibt. Wie gefällt dir die Idee?

Beginnen wir mit dem Schreiben unseres Servlets:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
          //write your code here
    }
}

Jetzt müssen wir den vom Benutzer vom URI übergebenen Text und die Farbe abrufen:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Getting the parameter “text” and “color” from request
        String text= request.getParameter("text");
        String color = request.getParameter("color");

    }
}

Und schließlich müssen Sie den Text als HTML ausgeben. Wir werden dies in der nächsten Vorlesung behandeln, aber hier gebe ich einen kleinen Hinweis:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Get the "text" and "color" parameters from the request
        String text = request.getParameter("text");
        String color = request.getParameter("color");


        // Print the HTML as a response to the browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out =  response.getWriter();
        try {
            out.println("<html>");
            out.println("<head> <title> ColorTextServlet </title> </head>");
            out.println("<body>");
            out.println("<h1 style="color:"+color+">"+text+"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}