JSP Response, tutti i metodi dell’oggetto implicito Response

Java Server Page Tutorial

Nello sviluppo dinamico di applicazioni Web, le interazioni client e server sono essenziali per inviare e ricevere informazioni su Internet. In questo tutorial andremo ad approfondire i metodi nella JSP Response Implicit Object, cioè i metodi dell’oggetto implicito Response.

Quando il browser richiede una pagina web , molte informazioni vengono inviate al server web e il server web risponde dopo aver elaborato la richiesta HTTP. La JSP Response gestisce la risposta gestendo le seguenti informazioni:

  • una riga di stato,
  • alcune intestazioni di risposta,
  • una riga vuota e
  • il documento.

Tipicamente una risposta si presenta come segue:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>

<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>
  • La riga di stato è composta dalla versione HTTP (nell’esempio HTTP/1.1),
  • un codice di stato (nell’esempio 200) e
  • un messaggio molto breve corrispondente al codice di stato (nell’esempio OK).

In fondo alla pagina troverai un riepilogo delle intestazioni di risposta HTTP 1.1 più usate, ritornate al browser dal server web.

In questo post vedremo i vari metodi forniti da JSP per la gestione della risposta JSP

JSP Response

La JSP Response può essere definita come un oggetto implicito è un’istanza di ” HttpServletResponse ” ed è formata per ogni richiesta JSP creata dal contenitore JSP.

JSP Response Implicit Object
  • Un oggetto Response è un oggetto implicito implementato per modificare o gestire la risposta inviata al client (es. browser) dopo l’elaborazione della richiesta, ad esempio reindirizzando la risposta a un’altra risorsa o un errore inviato a un client.
  • L’oggetto implicito della risposta è un’istanza di un’interfaccia javax.servlet.http.HttpServletResponse .
  • Il contenitore lo crea per ogni richiesta.

Ecco un esempio di una richiesta JSP e di oggetti impliciti di risposta in cui un utente invia le informazioni di accesso e un’altra pagina JSP le riceve per l’elaborazione:

<!DOCTYPE html>
<html>
    <head>
        <title>User login form</title>
    </head>
    <body>
        <form action="login.jsp">
            Username: <input type="text" name="user_name" /> <br />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

Di seguito il file login.jsp

<%@ page import = " java.util.* " %>
<% 
String username = request.getParameter("user_name"); 
if(username.equals("admin")){
    response.sendRedirect("home.jsp");  
}else{
    out.print("Invalid Username");  
}
%>
Metodo di Response Implicit Object

JSP ha metodi diversi per gestire gli oggetti di Response, che è di tipo HttpServeltResponse. Ognuno di questi metodi ha la propria funzionalità.

  • String encodeURL(String url): viene utilizzato per codificare un URL particolare comprendendo l’ID della sessione insieme ad esso. In caso contrario, quando la codifica non è richiesta, restituirà l’URL invariato.
  • String encodeRedirectURL(String url): viene utilizzato per codificare un URL particolare per utilizzarlo nel metodo sendRedirect. In caso contrario, quando la codifica non è richiesta, restituirà l’URL invariato.
  • boolean containsHeader(String name): viene utilizzato per restituire un booleano che indica se l’intestazione della risposta del nome è già impostata o meno.
  • void addDateHeader(String name, long date): viene utilizzato per aggiungere un’intestazione di risposta con il nome specificato insieme a un valore di data.
  • void addHeader(String name, String value): viene utilizzato per aggiungere un’intestazione di risposta con il nome specificato e un valore.
  • boolean isCommitted(): viene utilizzato per restituire un valore booleano che indica se la risposta è stata confermata o meno.
  • void addIntHeader(String name, int value): viene utilizzato per aggiungere un’intestazione di risposta con il nome specificato insieme a un valore intero.
  • void flushBuffer(): viene utilizzato per forzare qualsiasi contenuto nel buffer per scriverlo sul client.
  • void addCookie(Cookie cookie): viene utilizzato per aggiungere un cookie particolare con la risposta.
  • void reset(): viene utilizzato per cancellare tutti i dati presenti nel buffer, nell’intestazione o nel codice di stato.
  • void sendError(int sc): viene utilizzato per inviare una risposta di errore (attraverso un particolare codice di stato) al proprio client.
  • void sendError(int sc, String msg): viene utilizzato per inviare una risposta di errore (attraverso una particolare stringa di stato) al proprio client.
  • void resetBuffer(): viene utilizzato per cancellare il contenuto del buffer sottostante senza cancellare il codice di stato o l’intestazione.
  • void sendRedirect(String location): viene utilizzato per inviare una risposta di reindirizzamento a breve termine al client.
  • void setBufferSize(int size): viene utilizzato per impostare una dimensione del buffer ideale per il corpo della risposta.
  • void setCharacterEncoding(String charset): viene utilizzato per impostare la codifica dei caratteri (solitamente MIME charset – UTF 8) da inviare al client.
  • void setContentType(String type): viene utilizzato per impostare il tipo di contenuto inviato al client quando la risposta non è ancora stata confermata.
  • void setDateHeader(String name, long date): viene utilizzato per impostare un’intestazione di risposta con il nome specificato e il valore della data.
  • void setContentLength(int len): viene utilizzato per impostare la lunghezza del corpo del contenuto nella risposta.
  • void setHeader(String name, String value): viene utilizzato per impostare un’intestazione di risposta con il nome specificato e il valore.
  • void setIntHeader(String name, int value): viene utilizzato per impostare un’intestazione di risposta con il nome specificato e un valore intero.
  • void setLocale(Locale loc): viene utilizzato per impostare la localizzazione della risposta nel caso in cui la risposta non sia ancora stata salvata.
  • void setStatus(int sc): viene utilizzato per impostare il codice di stato per la risposta.
Esempio Response implicit object

Vediamo qui di seguito un altro esempio di Response implicit object che implementa un refresh su browser, utilizzando il metodo setIntHeader(), scrivendo Ora, Minuti, Secondi simulando un orologio digitale. Esempio di orologio.jsp

<%@ page import = "java.io.*,java.util.*" %>

<html>
   
   <head>
      <title>Auto Refresh Header Example</title>
   </head>
   
   <body>
      <center>
         <h2>Auto Refresh Header Example</h2>
         <%
            // Set refresh, autoload time as 5 seconds
            response.setIntHeader("Refresh", 5);
            
            // Get current time
            Calendar calendar = new GregorianCalendar();
            
            String am_pm;
            int hour = calendar.get(Calendar.HOUR);
            int minute = calendar.get(Calendar.MINUTE);
            int second = calendar.get(Calendar.SECOND);
            
            if(calendar.get(Calendar.AM_PM) == 0) 
               am_pm = "AM";
            else
               am_pm = "PM";
               String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
               out.println("Current Time is: " + CT + "\n");
         %>
      </center>
   
   </body>
</html>

Ora inserendo il codice in un orologio.jsp, provando ad avviarlo, visualizzerà l’ora attuale del sistema dopo ogni 5 secondi.

Riepilogo delle intestazioni di risposta HTTP 1.1 più usate, ritornate al browser dal server web
  • Allow: questa intestazione specifica i metodi di richiesta (GET, POST, ecc.) supportati dal server.
  • Cache-Control: questa intestazione specifica le circostanze in cui il documento di risposta può essere memorizzato nella cache in modo sicuro. Può avere valori public, private o no-cache ecc. Pubblico significa che il documento è memorizzabile nella cache, Private significa che il documento è per un singolo utente e può essere archiviato solo in cache private (non condivise) e no-cache significa che il documento non dovrebbe mai essere memorizzato nella cache.
  • Connection: questa intestazione indica al browser se utilizzare o meno connessioni HTTP persistenti. Un valore di chiusura indica al browser di non utilizzare connessioni HTTP persistenti e keep-alive significa utilizzare connessioni persistenti.
  • Content-Disposition: questa intestazione consente di richiedere che il browser chieda all’utente di salvare la risposta su disco in un file con il nome specificato.
  • Content-Encoding: questa intestazione specifica il modo in cui la pagina è stata codificata durante la trasmissione.
  • Content-Language: questa intestazione indica la lingua in cui è scritto il documento. Ad esempio, en, en-us, ru, ecc.
  • Content-Length: questa intestazione indica il numero di byte nella risposta. Queste informazioni sono necessarie solo se il browser utilizza una connessione HTTP persistente (keep-alive).
  • Content-Type: questa intestazione fornisce il tipo MIME (Multipurpose Internet Mail Extension) del documento di risposta.
  • Expires: questa intestazione specifica l’ora in cui il contenuto deve essere considerato non aggiornato e quindi non essere più memorizzato nella cache.
  • Last-Modified: questa intestazione indica quando il documento è stato modificato l’ultima volta. Il client può quindi memorizzare nella cache il documento e fornire una data tramite un’intestazione della richiesta If-Modified-Since nelle richieste successive.
  • Location: questa intestazione deve essere inclusa in tutte le risposte che hanno un codice di stato nei 300 secondi. Questo notifica al browser l’indirizzo del documento. Il browser si riconnette automaticamente a questa posizione e recupera il nuovo documento.
  • Refresh: questa intestazione specifica entro quanto tempo il browser dovrebbe richiedere una pagina aggiornata. È possibile specificare il tempo in numero di secondi dopo i quali una pagina verrà aggiornata.
  • Retry-After: questa intestazione può essere utilizzata insieme a una risposta 503 (servizio non disponibile) per indicare al client quanto tempo può ripetere la richiesta.
  • Set-Cookie: questa intestazione specifica un cookie associato alla pagina.

Ercole Palmeri

Autore