2.1 Classe HttpServletRequest

La maggior parte del lavoro che deve svolgere il tuo servlet si basa sulle informazioni ricevute dalla richiesta. L'oggetto ne è responsabile HttpServletRequest, che il contenitore passerà al tuo servlet (al metodo serviceo ai metodi doGet(), doPost()ecc.)

Questo oggetto ha parecchi metodi, poiché memorizza semplicemente i dati della richiesta e attraverso di esso puoi interagire con il contenitore.

I metodi possono essere divisi in 2 grandi gruppi:

  • Metodi relativi all'autorizzazione dell'utente
  • Metodi per lavorare con i dati delle query

Darò i metodi di autorizzazione dell'utente sotto forma di tabella, ma non li analizzeremo. Il fatto è che sono usati molto raramente per autorizzare un utente. Tutti i framework più diffusi utilizzano i propri approcci all'autorizzazione molto più avanzati.

Dovrei elencarli, ma ancora una volta, non ho visto nessuno usarli.

Metodo Descrizione
1 authenticate(HttpServletResponse) Esegue l'autenticazione della risposta
2 changeSessionId() Modifica forzata dell'ID sessione
3 getAuthType() Restituisce il tipo di autenticazione utilizzato: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Restituisce il login dell'utente
5 getRequestedSessionId() Restituisce il SessionID del client
6 getSession() Restituisce un oggetto HttpSession
7 getUserPrincipal() Restituisce un oggetto java.security.Principal
8 login(username, password) Esegue il login dell'utente
9 logout() Disconnette la sessione utente

2.2 Richiesta dati

Il secondo gruppo di metodi è molto più interessante. Che tipo di dati abbiamo nella richiesta?

  • metodo http
  • URI
  • Opzioni
  • Titoli

Vediamo quali metodi sono disponibili per lavorare con loro:

Metodo Descrizione
1 getMethod() Restituisce il metodo HTTP: GET, POST, DELETE, ...
2 getRequestURI() Restituisce l'URI della richiesta: http://codegym.cc/my/data
3 getRequestURL() Restituisce l'URL della richiesta: http://codegym.cc/my/data
4 getQueryString() Restituisce Query, ovvero tutto ciò che segue il ?
5 getParameterMap() Restituisce un elenco di parametri di query
6 getParameter(String name) Restituisce il valore del parametro in base al suo nome
7 getContentType() Restituisce il corpo della richiesta MimeType
8 getReader() Reader per leggere il corpo della richiesta come testo
9 getInputStream() InputStream per leggere il corpo della richiesta come byte[]
10 getSession() Restituisce un oggetto HttpSession
undici getCookies() Restituisce un array di oggetti Cookie[].
12 getHeaderNames() Restituisce un elenco di titoli, solo nomi
13 getHeader(String name) Restituisce il valore dell'intestazione per nome
14 getServletPath() Restituisce la parte dell'URL che fa riferimento al servlet
15 getContextPath() Restituisce la parte dell'URI che specifica il contenuto della richiesta

E non sono nemmeno tutti i metodi ...

Anche se dopo aver studiato il protocollo HTTP e imparato a lavorare con HttpClient, qui tutto è più o meno familiare, no?

Scriviamo un servlet a cui può essere passato testo e un colore, e restituirà una pagina HTML con quel testo scritto nel colore specificato. Come ti piace l'idea?

Iniziamo scrivendo la nostra servlet:


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

Ora dobbiamo ottenere il testo e il colore passati dall'URI dall'utente:


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

E infine, devi emettere il testo come HTML. Ne parleremo nella prossima lezione, ma qui darò un piccolo suggerimento:

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