Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Java nella programmazione di sistemi informativi su web Java fornisce tecnologie utili per la programmazione di applicazioni multi-tier Internet-based: n Livello Interfaccia utente F Applet F Componenti Java Beans n Livello Comunicazione F Remote Method Invocation RMI n Livello Middleware F Servlet F Java Server Pages JSP n Livello Dati F Java DataBase Connectivity JDBC
La classe Applet E definita nel package javax.applet Nella classe javax.applet.JApplet
Ciclo di vita di unapplet Init Start Stop Destroy
Servlet Estende le funzionalità di un server web È usata per realizzare comunicazioni basate sul protocollo HTTP È definita nei packages javax.servlet e javax.servlet.http I packages servlet definiscono due classi astratte che implementano linterfaccia Servlet GenericServlet nel package javax.servlet HttpServlet nel package javax.servlet.http Forniscono per default limplementazione di tutti i metodi dellinterfaccia Servlet In generale, una servlet estende o GenericServlet oppure HttpServlet
Servlet Tutte le servlet devono implementare linterfaccia Servlet I metodi dellinterfaccia sono richiamati automaticamente dal server su cui la servlet è installata (servlet container)
Ciclo di vita di una servlet Il server in risposta ad una richiesta per una servlet ne effettua il caricamento in memoria void init (ServletConfig config) è avviato automaticamente da server prima che la servlet possa gestire la richiesta void service (ServletRequest request, ServletResponse response) gestisce tutte le richieste rceve le richieste le elabora e invia le risposte al client è chiamato dal server per rispondere ad una richiesta eseguito in un nuovo thread per ogni richiesta void destroy( ) chiamato al termine dellesecuzione della servelt per rilasciare le risorse usate dalla servlet
Classe HttpServlet Generalmente le Servlet web-based estendono la classe HttpServlet usano il metodo service per distinguere tra le richieste ricevute da un client (web browser) Le richieste (metodi) HTTP sono di tipo: get per richiedere informazioni dal server, generalmente documenti HTML o immagini post per inviare dati al server generalmente informazioni relative ad autenticazione o data inseriti in un form Usa i metodi doGet e doPost rispettivamente per rispondere alle richieste corrispondenti
HttpServletRequest Interface n Le chiamate a doPost e doGet per una HttpServlet ricevono un oggetto che implementa linterfaccia HttpServletRequest. n Il Web server che esegue la servlet crea un oggetto HttpServletRequest e lo passa al metodo service.
HttpServletResponse Interface n Il web server che esegue la servlet crea un oggetto HttpServletResponse che passa al metodo service della servlet che a sua volta lo passa a doGet o doPost
Interfaccia HttpServletRequest Interfaccia HttpServletResponse Classe HttpServlet implementa doDelete doOption doPut doTrace addCookies getOutputStream getWriter setContentType getParameter getParameterName getCookies getSession
Sviluppare una servlet n Affinchè una servlet possa essere eseguita è necessario che il server sia attivo n Web Server che supportano le servlet Apache HTTP Server WWW Jigsaw Web Server Microsoft Internet Information Server IIS Netscape iPlanet Application Server IBM WebSphere Application Server BEA WebLogic application server
Esempio: Tomcat Apache server É contenuto nel progetto jakarta recuperabile allindirizzo jakarta.apache.org n Configurazione del server tomcat Definire le variabili di ambiente JAVA_HOME e TOMCAT_HOME che individuano rispettivamente la directory contenente linstallazione di java ( per esempio C:\jdk1.3.1) e la directory che contiene linstallazione di Tomcat
Configurazione del server n Avvio del server tomcat dalla directory bin di jakarta eseguire il batch tomcat.bat tomcat è eseguito sulla porta 8080 è possibile controllare che il server sia attivo sulla URL o equivalemente allindirizzo :8080/ n Per interrompere lesecuzione di tomcat eseguire tomcat stop
Struttura delle directory n Le applicazioni web sono contenute nella sottodirectory webapps di jakarta-tomcat n Ciascuna applicazione sarà contenuta in una sottodirectory di webapps n Web-inf contiene il file descrittore web.xml n Web-inf/classes contiene le classi relative alle servlet e altre classi che supportano I file usati in una applicazione web. la directory relativa al package nel caso in cui le classi siano parte di un package Web-inf/lib contiene I file jar che contengono le classi servlet ed altre classi di supporto
Esempio n.1: costruzione di una servlet n La servlet genera un documento XHTML in risposta ad una richesta di tipo get, che consente di recuperare il contenuto di una specifica URL Generalmente il contenuto è di tipo HTML o XHTML n Il documento conterrà la sola stringa Welcome to Servlet!
1: import javax.servlet.*; 2: import javax.servlet.http.*; 3: import java.io; 4: 5: public class WelcomeServlet extends HttpServlet { 6: // gestisce le richieste "get" dai client 7: protected void doGet(HttpServletRequest request, 8: HttpServletResponse response) 9: throws ServletException, IOException 10: { 11: response.setContentType("text/html"); 12: PrintWriter out=response.getWriter();
Descrizione del contenuto della servlet n Le linee 1,2,3 consentono di includere I packages javax.servlet a javax.servelet.http che contenogno le classi per gestire la richiesta get e il package java.io n La classe WelcomeServlet deve estendere HttpServlet n ServletException consente di gestire le eccezioni
Overloading del metodo doGet n Il metodo doGet riceve come parametri gli oggetti request e response rispettivamente delle classi HttpServletRequest HttpServletResponse n setContentType: metodo di HttpServletRequest usato per specificare il tipo dei dati da inviare in risposta al client n Out: oggetto della classe PrintWriter Ottenuto mediante il metodo getWriter delloggetto response Utilizzato per inviare la risposta al client
13: // invia la pagina xhtml al client 14: // avvia il documento xhtml 15: out.println(" "); 16: out.println("<!DOCTYPE html PUBLIC \//W3C//DTD " + 17: "XHTML 1.0 Strict//EN\" \" 18: "/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); 19: 20: out.println(" "); Istruzioni per la creazione del documento XHTML
21: // intestazione del documento 22:out.println(" "); 23:out.println(" Prima servlet "); 24:out.println(" "); 25: 26:// corpo del documento xhtml 27:out.println(" "); 28:out.println(" Welcome to Servlet! "); 29:out.println(" "); 30: 31:// fine del documento 32:out.println(" "); 33:out.close(); // chiude lo stream 34:} 35: }
Documento XHTML n il documento contiene un form per richiamare la servlet. n form action specifica la URL che richiama la servlet welcome1 n form method indica che il browser invia una richiesta get al server n la richiesta richiama il metodo doGet della servlet
Documento XHTML <!DOCTYPE html PUBLIC "-//w3c//dtd xhtml 1.0 Strict//EN" " Gestione di una richesta HTTP di tipo Get Click the button to invoke the servlet
import javax.servlet.*; import javax.servlet.http.*; import java.io; public class WelcomeServlet extends HttpServlet { // gestisce le richieste "post" dai client protected void doPost(HtpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String firstName = request.getParameter("firstname"); response.setContentType("text/html"); PrintWriter out=response.getWriter();
Metodo doPost n Una richiesta post è usata per inviare dati da un form HTML ad un gestore di form server side che possa elaborare i dati
// invia la pagina xhtml al client // avvia il documento xhtml out.println(" "); out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD " + "XHTML 1.0 Strict//EN\" \" "/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); out.println(" "); // intestazione del documento out.println(" "); out.println(" Gestione di una richesta post con invio di dati "); out.println(" ");
// corpo del documento xhtml out.println(" "); out.println(" Hello!" + firstname + ", "); out.println("Welcome to Servlet! "); out.println(" "); // fine del documento out.println(" "); out.close(); // chiude lo stream }
<!doctype HTML public "-//w3c//dtd xhtml 1.0 Strict//EN" " Gestione di una richesta Post con invio di dati Type your name and press the Submit button Documento XHTML