Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma

Pagina creata da Raffaele Pisani
 
CONTINUA A LEGGERE
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Java Servlet
    & Java Server Pages
(una semplice introduzione)
         SAPIENZA – Università di Roma
     Corso di Progetto di Applicazioni Software
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Java Servlet Technology
• Le Servlet
      – sono una tecnologia offerta da Java per l'estensione
           delle funzionalità di server che ospitino applicazioni
           accedute dai client tramite un modello di
           comunicazione request-response
                • HTTP
      – sono delegate a processare le request ed emettere le
           response
      – consistono in moduli di codice Java in esecuzione su
           un ambiente server
                • le API sono in un pacchetto incluso in J2EE
                          – javax.servlet
                          – javax.servlet.http
      – hanno un funzionamento che ricorda le CGI
      – sono dispiegate (deployed) ed eseguite (run) in un
           servlet container all'interno del Server
      – non sono thread-safe!
                                                                2
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Servlet Container
• Infrastruttura software in cui una Servlet…
      1. … viene eseguita
               • simile al concetto di Sandbox;
      2. … scorre il proprio ciclo di vita.

                                                  3
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Servlet Container
• Infrastruttura software in cui una Servlet…
      1. … viene eseguita
               • simile al concetto di Sandbox;
      2. … scorre il proprio ciclo di vita.
• Nel resto del corso e nelle esercitazioni verrà adoperato
    Apache Tomcat

                                                  4
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Gerarchia Servlet
• Le Servlet sono in relazione
    con classi ed interfacce
    contenute nei package:
       – javax.servlet
       – javax.servlet.http
• javax.servlet comprende
    classi ed interfacce…
       – … indipendenti dal protocollo
            di comunicazione;
       – … estese da classi ed
            interfacce in
            javax.servlet.http
                 • specifiche per il
                     protocollo HTTP.

                                         5
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Java Servlet Technology

                          6
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Ciclo di vita delle Servlet
• public void init()
      –   invocato dal Servlet Container
      –   precede qualunque ulteriore invocazione
      –   termina prima di qualsiasi ulteriore invocazione
      –   tipicamente si effettua overriding di questo metodo per creare le
              connessioni ad altri oggetti Container-managed, utili durante
              tutto il resto del ciclo di vita
• public void destroy()
      – invocato dal Servlet Container
      – termina solo dopo che ogni altra invocazione ha terminato la
            propria esecuzione
      – tipicamente si effettua overriding di questo metodo per rilasciare le
            risorse occupate prima che la Servlet venga distrutta

                                                           7
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
Ciclo di vita delle Servlet
• public void service(
      ServletRequest req,
      ServletResponse res
    )
     – gestisce la richiesta del client (req)
              • il parametro req fornisce informazioni contestuali, ad esempio
                        – String getRemoteAddr() // indirizzo IP del client
                        – Enumeration getParameterNames() // parametri di invocazione
                        – …
     – imposta la risposta del server (res)
              • la scrittura sull'output avviene tramite l'oggetto
                   ServletOutputStream associato
                        – ServletOutputStream getOutputStream()
     – eseguito dal server in modalità multithread

                                                                8
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
La specializzazione HTTP
• Per ogni comando (METODO) HTTP 1.0 e 1.1…
      –   POST
      –   GET
      –   HEAD
      –   altri (PUT, DELETE, TRACE...)
• … HttpServlet definisce metodi nel formato
     protected void do‹Metodo›(
           HttpServletRequest req,
           HttpServletResponse res
     )
      –   doPost(…)
      –   doGet(…)
      –   doHead(…)
      –   doPut(…), doDelete(…), doTrace(…), … , service(…)   9
Java Servlet & Java Server Pages (una semplice introduzione) - SAPIENZA - Università di Roma
GET

      10
POST

       Parametri URL-encoded
                               11
GET

                 Parametri
               URL-encoded
               (query string)

Servlet   12
HttpServletRequest
HttpServletResponse
• HttpServletRequest estende ServletRequest
   – metodi specifici
        • public String getMethod()
              – restituisce il metodo HTTP; ad esempio:

                   » Se la HTTP request è…
                        GET http://www.dis.uniroma1.it/index.jsp?question=answer

                   » … il metodo restituisce:
                        "GET"

        • public String getRequestURI()
              – restituisce la parte di URL dal nome di dominio alla query string, esclusi

                   » Se la HTTP request è…
                        GET http://www.dis.uniroma1.it/index.jsp?question=answer

                   » … il metodo restituisce:
                        "/index.jsp"

        • …
                                                                           13
HttpServletRequest
HttpServletResponse
• HttpServletResponse estende ServletResponse
          – metodi specifici
                  • public String sendRedirect(String location)
                            – redireziona il browser del client verso la pagina indicata
                  • public String sendError(int sc, String msg)
                            – restituisce un codice di errore al client (sc sta per status code),
                                 con un messaggio HTML definito
                                        » si pensi per esempio ad un codice di errore tipico
                                              sc := HttpServletResponse.SC_FORBIDDEN // 403
                  • …

Servlet                                                                 14
Mantenimento della
Sessione
• HTTP è un protocollo stateless
• Al di sopra, è stato costruito un sistema di registrazione
     di variabili di stato relative alla navigazione del client
• È la Sessione
       – Identifica univocamente il browser in uso sulla macchina client
            durante la navigazione su una o più pagine residenti sul server
• Viene inizializzata dal server
       – Può scadere per
                • timeout
                            – impostato opzionalmente dal server
                • disabilitazione esplicita

• Si pensi al meccanismo di login / logout dei siti ad
     accesso protetto
       – Registrazione / cancellazione della sessione autenticata        15
Mantenimento della
Sessione
• Fisicamente, le variabili di stato vengono salvate su file
     temporanei del Server
       – L'identificativo della Sessione (e del file sotteso)…
                • … viene salvato dal client in un cookie, oppure
                • … riscritto come parametro di request in tutti i link e le action dei
                   form nelle pagine scritte dal server
                          – pratica, quest'ultima, sconsigliabile

                                                                    16
HttpSession
• HttpSession è la classe preposta a gestire la sessione
      – HttpServletRequest espone il metodo
              • HttpSession getSession([boolean create])
                        – il parametro create indica se forzare la creazione di una
                              sessione laddove non fosse stata già inizializzata
                                    » per default è true

      – Metodi di HttpSession
              • Object getAttribute(String name)
              • void setAttribute(String name, Object value)
                        – metodi getter e setter per ricevere (risp., impostare) valori in
                            sessione
              • void invalidate()
                        – annulla la sessione in corso
              • …

                                                                    17
Packaging e deploying di
un progetto Servlet
•   Per dispiegare l'applicazione
      web basata su Servlet
      occorre
         – creare un file WAR con
                   • nella sub-directory
                        WEB-INF/
                                – file bytecode
                                       (*.class)
                                – descrittore
                                       web.xml
                   • nella sub-directory
                        META-INF/
                                – file
                                         MANIFES
                                         T.MF
                   • eventuali altri file di
                       utilità
         – spostare il file WAR all'interno
              della specifica directory del
              servlet container
                                                   18
WEB-INF/web.xml

Servlet           19
Servlet Demo (1)

                   20
Servlet Demo (2)

                   21
Servlet Demo (3)

                   22
Servlet Demo (4)

                   23
JSP (Java Server Pages)
 
   È la tecnologia Java per lo sviluppo di
   applicazioni Web mediante l’utilizzo di “pagine
   dinamiche”
 
   Sono pagine Web (HTML o XHTML) che
   risiedono sul server Web
     
         possono contenere codice Java attraverso l’utilizzo di opportuni tag, e
         componenti JavaBean
 
     Le pagine JSP vengono interpretate e tradotte
     in Servlet al momento della prima chiamata da
     client remoti
     
         Java Servlet è la tecnologia sottostante ma JSP facilita la creazione di
         interfacce

                                                                              24
Servlet vs. JSP
 
     Servlet: richiede una dettagliata conoscenza della
     programmazione Java per lo sviluppo ed il mantenimento di
     tutti gli aspetti dell’applicazione Web, dato che il codice di
     esecuzione della richiesta ed il codice HTML risiedono
     nello stesso punto
 
     Servlet: cambiare il comportamento dell’applicazione o
     aggiungere supporto a nuovi tipi di client richiede una
     modifica del codice della servlet ed una sua ri-compilazione
 
     Servlet: è difficile trovare vantaggio dai tool per lo sviluppo
     di pagine Web quando si progetta l’interaccia
     dell’applicazione. ll codice HTML associato alla servlet
     deve essere inserito manualmente nel codice delle Servlet:
      
          Time-consuming
      
          Error-prone
      
          Boring

                                                                 25
Servlet vs. JSP
 
   Servlet: si prestano meglio alla realizzazione di
   applicazioni service-oriented (Web service
   endpoints sono implementati come servlet)
 
   JSP: separa il processamento delle richieste
   (codice di business logic) dalla presentazione
   dell’informazione
 
   JSP: separando la request processing e la
   business logic dalla presentazione è possibile
   dividere lo sviluppo di tasks tra le persone aventi
   differenti skills
      
        Web designer per l'interfaccia (presentazione)
      
        Programmatori per la logica dell'applicazione
                                                    26
Funzionamento di
JSP
                                                          prova.jsp
                                             Read
                   GET
                  prova.jsp                             provaServlet.java
                                             Generate
                prova                                Compile

                                              Execut
                                             e          provaServlet.class
  1.   il client richiede la pagina “prova”
  2.   Il server legge la pagina prova.jsp
  3.   Il server genera la servlet provaServlet.java
  4.   Il server compila la servlet.java ottenendo una classe eseguibile
  5.   Il server esegue la servlet
  6.   La risposta viene inviata la client
                                                                             27
Elementi JSP

 
   Template text
 
   Commenti JSP
 
   Elementi di scripting
    
      Codice java da inserire nella servlet risultante
 
   Direttive JSP
    
      Controllano la struttura della servlet risultante
 
   Azioni JSP
    
      Controllano il comportamento del motore JSP

                                                          28
Template text e commenti JSP


  Template text: tutte le parti di testo che non
  sono definite come elementi JSP sono copiate
  nella pagina di risposta

  Commenti JSP:
   •
     Sitassi: 
   •
     Vengono eliminati dal container in fase di
     compilazione/traduzione della pagina
   •
     i commenti HTML sono considerati come
     normale elemento di testo

                                              29
Elementi JSP
 
     Porzioni di codice in uno scripting language
     specificato nelle direttive (di default Java)
      
          Scriptlet: con sintassi ; possono contenere variabili
          locali valide solo per una singola esecuzione della Servlet
          (prodotta in seguito alla compilazione della JSP)
      
          Declaration: con sintassi ; sono metodi o variabili la cui durata è
          quella della Servlet (conservano il loro valore per tutte le esecuzioni
          della servlet)
      
          Expression: con sintassi ; l’espressione
          viene valutata e scritta nella pagina di risposta della JSP

                                                                              30
Direttive JSP: page
 
      Definisce attributi e parametri dipendenti dalla pagina, come ad esempio
      il linguaggio di scripting usato, la pagine di errore, requisiti di buffering.
     
         Attributi:
            
              language: indica il linguaggio di script usato negli script
              elements. Il valore di default è Java (se siano supportati altri
              linguaggi o meno dipende dal container)
            
              import: serve ad importare package all’interno della JSP,
              equivalente alla import del linguaggio Java (ma si possono
              specificare più package contemporaneamente, separati da virgole)
            
              buffer: indica se l’output stream debba essere bufferizzato e,
              contestualmente, la dimensione minima del buffer (il default è
              8KB). Utile nel caso di redirezione richiesta a runtime quando dei
              dati sono stati già inviati in output (come nel caso di error pages)
            
              errorpage: Indica la pagina a cui si viene reindirizzati in caso di
              eccezioni. Ha un valore espresso da un URL.

                                                                                 31
Puoi anche leggere