2.1 Klasa HttpServletRequest

Większość pracy, którą musi wykonać twój serwlet, opiera się na informacjach otrzymanych z żądania. Odpowiada za to obiekt HttpServletRequest, który kontener przekaże Twojemu serwletowi (do metody servicelub metod itp doGet(). doPost())

Ten obiekt ma sporo metod, ponieważ po prostu przechowuje dane żądania, a za jego pośrednictwem można wchodzić w interakcje z kontenerem.

Metody można podzielić na 2 duże grupy:

  • Metody związane z autoryzacją użytkowników
  • Metody pracy z danymi zapytania

Metody autoryzacji użytkownika podam w formie tabeli, ale nie będziemy ich analizować. Faktem jest, że są one bardzo rzadko używane do autoryzacji użytkownika. Wszystkie popularne frameworki wykorzystują własne, znacznie bardziej zaawansowane podejścia do autoryzacji.

Powinienem je wymienić, ale znowu nie widziałem, żeby ktoś ich używał.

metoda Opis
1 authenticate(HttpServletResponse) Wykonuje uwierzytelnianie odpowiedzi
2 changeSessionId() Wymuś zmianę identyfikatora sesji
3 getAuthType() Zwraca używany typ uwierzytelniania: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Zwraca login użytkownika
5 getRequestedSessionId() Zwraca identyfikator sesji klienta
6 getSession() Zwraca obiekt HttpSession
7 getUserPrincipal() Zwraca obiekt java.security.Principal
8 login(username, password) Wykonuje logowanie użytkownika
9 logout() Wylogowuje sesję użytkownika

2.2 Poproś o dane

Znacznie ciekawsza jest druga grupa metod. Jakie dane mamy we wniosku?

  • metoda http
  • URI
  • Opcje
  • Tytuły

Zobaczmy, jakie metody są dostępne do pracy z nimi:

metoda Opis
1 getMethod() Zwraca metodę HTTP: GET, POST, DELETE, ...
2 getRequestURI() Zwraca identyfikator URI żądania: http://codegym.cc/my/data
3 getRequestURL() Zwraca adres URL żądania: http://codegym.cc/my/data
4 getQueryString() Zwraca zapytanie, czyli wszystko po ?
5 getParameterMap() Zwraca listę parametrów zapytania
6 getParameter(String name) Zwraca wartość parametru według jego nazwy
7 getContentType() Zwraca treść żądania typu MimeType
8 getReader() Czytnik do odczytywania treści żądania jako tekstu
9 getInputStream() InputStream, aby odczytać treść żądania jako bajt []
10 getSession() Zwraca obiekt HttpSession
jedenaście getCookies() Zwraca tablicę obiektów Cookie[].
12 getHeaderNames() Zwraca listę tytułów, tylko nazwy
13 getHeader(String name) Zwraca wartość nagłówka według nazwy
14 getServletPath() Zwraca część adresu URL odnoszącą się do serwletu
15 getContextPath() Zwraca część identyfikatora URI, która określa treść żądania

A to jeszcze nie wszystkie metody...

Chociaż po przestudiowaniu protokołu HTTP i nauczeniu się pracy z HttpClient, wszystko jest tutaj mniej lub bardziej znajome, prawda?

Napiszmy serwlet, do którego można przekazać tekst i kolor, a on zwróci stronę HTML z tekstem napisanym w określonym kolorze. Jak ci się podoba pomysł?

Zacznijmy od napisania naszego serwletu:

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

Teraz musimy pobrać tekst i kolor z URI przez użytkownika:

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");

    }
}

I wreszcie, musisz wyprowadzić tekst jako HTML. Omówimy to w następnym wykładzie, ale tutaj dam małą wskazówkę:

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();
        }
    }
}