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 service
o 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();
}
}
}
GO TO FULL VERSION