2.1 HttpServletRequest-klass

Det mesta av arbetet som din servlet måste göra baserat på informationen från förfrågan. Objektet är ansvarigt för det HttpServletRequest, som behållaren skickar till din servlet (till metoden serviceeller metoderna doGet(), doPost()etc.)

Detta objekt har en hel del metoder, eftersom det helt enkelt lagrar förfrågningsdata och genom det kan du interagera med behållaren.

Metoderna kan delas in i 2 stora grupper:

  • Metoder relaterade till användarauktorisering
  • Metoder för att arbeta med frågedata

Jag kommer att ge användarna auktoriseringsmetoder i form av en tabell, men vi kommer inte att analysera dem. Faktum är att de mycket sällan används för att auktorisera en användare. Alla populära ramverk använder sina egna, mycket mer avancerade metoder för auktorisering.

Jag borde lista dem, men återigen, jag har inte sett någon använda dem.

Metod Beskrivning
1 authenticate(HttpServletResponse) Utför svarsautentisering
2 changeSessionId() Tvångsändring av sessions-ID
3 getAuthType() Returnerar typen av autentisering som används: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Returnerar användarinloggning
5 getRequestedSessionId() Returnerar klientens sessions-ID
6 getSession() Returnerar ett HttpSession-objekt
7 getUserPrincipal() Returnerar ett java.security.Principal-objekt
8 login(username, password) Utför användarinloggning
9 logout() Loggar ut användarsessionen

2.2 Begär data

Den andra gruppen av metoder är mycket mer intressant. Vilken typ av data har vi i begäran?

  • http-metoden
  • URI
  • alternativ
  • Titlar

Låt oss se vilka metoder som finns tillgängliga för att arbeta med dem:

Metod Beskrivning
1 getMethod() Returnerar HTTP-metod: GET, POST, DELETE, ...
2 getRequestURI() Returnerar begäran URI: http://codegym.cc/my/data
3 getRequestURL() Returnerar webbadressen för begäran: http://codegym.cc/my/data
4 getQueryString() Returnerar fråga, dvs allt efter ?
5 getParameterMap() Returnerar en lista med frågeparametrar
6 getParameter(String name) Returnerar värdet på parametern efter dess namn
7 getContentType() Returnerar MimeType-förfrågan
8 getReader() Läsare för att läsa förfrågans brödtext som text
9 getInputStream() InputStream för att läsa förfrågans text som byte[]
10 getSession() Returnerar ett HttpSession-objekt
elva getCookies() Returnerar en array av Cookie[]-objekt
12 getHeaderNames() Returnerar en lista med titlar, endast namn
13 getHeader(String name) Returnerar rubrikvärdet efter namn
14 getServletPath() Returnerar den del av URL:en som refererar till servleten
15 getContextPath() Returnerar den del av URI:n som anger innehållet i begäran

Och det är inte ens alla metoder...

Fast efter att vi har studerat HTTP-protokollet och lärt oss hur man arbetar med HttpClient är allt mer eller mindre bekant här, eller hur?

Låt oss skriva en servlet som kan skickas text och en färg till, och den kommer att returnera en HTML-sida med den texten skriven i den angivna färgen. Hur gillar du idén?

Låt oss börja med att skriva vår servlet:

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

Nu måste vi få texten och färgen skickad från URI:n av användaren:

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

    }
}

Och slutligen måste du mata ut texten som HTML. Vi kommer att ta upp detta i nästa föreläsning, men här kommer jag att ge en liten hint:

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