Esercizi di pubblicazione di database sul Web con MySql e Tomcat/Apache

  1. Dovreste avere Apache e MySql installati altrimenti guardate qui.
  2. Dovreste avere Java 1.4 installata.
  3. Scaricate l'ultima versione di Tomcat in /usr/local/tomcat
  4. Definite le variabili ambiente:
    setenv JAVA_HOME /usr/java/java
    setenv CATALINA_HOME /usr/local/tomcat
    
  5. Fate partire Tomcat con:
    cd $CATALINA_HOME
    ./bin/startup.sh 
    
  6. Per stopparlo date:
    ./bin/shutdown.sh
    
    Se qualcosa non funziona come dovrebbe (ad. esempio applicazione che non parte) allora guardate il log su $CATALINA_HOME/logs/catalina.out Ricordate che dopo aver fatto una correzione occorre quasi sempre stoppare e far ripartire Tomcat. Per controllare il funzionamento di Tomcat o per capire perche' un servlet non funziona date il comando:
     tail -f $CATALINA_HOME/logs/catalina.out
  7. Per aggiungere utenti editate il file conf/tomcat-users.xml
    Ad esempio, se volete poter gestire Tomcat via Web aggiungete:
    <role rolename="manager"/>
      <user username="nomeutente" password="passwordutente" roles="manager"/> 
    
  8. Ora Tomcat dovrebbe essere accessibile come server Web sulla porta 8080 http://localhost:8080/ . La pagina iniziale vi da accesso a vari esempi e alle pagine di amministrazione e manager . Queste accessibili solo agli utenti con "ruolo" admin e manager rispettivamente.
  9. Tomcat vede tutto come "applicazione web" . Di solito le applicazioni Web sono tutte nella cartella webapps. Per creare una nuova applicazione Web dovete creare una nuova cartella in webapps. In questa cartella definire almeno un html che serve per accedere all'applicazione . In piu' dovete crearvi un'altra cartella chiamata WEB-INF e all'interno di questa un file "web.xml" che descrive l'applicazione. Ecco il piu' semplice web.xml:
    <xml version="1.0" encoding="ISO-8859-1"?>
     
    <DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
     
    <web-app>
     
    </web-app> 
    
    e il suo risultato.
  10. Un'applicazione Web da scaricare la trovate sotto forma di file .war in effetti un archivio zippato contenente le cartelle e i vari files. Se voi copiate un file ".war" come questo in webapps e stoppate e quindi fate ripartire Tomcat, troverete che Tomcat ha unzippato cartelle e file a partire dalla cartella wide_world di nome uguale a quello del file che ora permette di accedere all'applicazione.
  11. Le cartelle possono contenere oltre a normali html, anche pagine dinamiche jsp. Come esempio ecco l'applicazione somma dove la pagina jsp e' la seguente riga di codice:
    <%=Integer.parseInt(request.getParameter("numero1"))+Integer.parseInt(request.getParameter("numero2"))%> 
    

    Provando a eseguire questo esempio , potete vedere la maniera di funzionare di Tomcat che viene indicato come un contenitore di servlet. La prima volta che si esegue l'esecuzione e' lentissima, perche' Tomcat deve ricompilare l'applicazione.Ma le volte successive l'esecuzione e' immediata perche' l'applicazione e' gia' pronta in memoria . Queste applicazioni che vengono eseguite dal server sono i servlet.
  12. Prima dell'introduzione delle pagine dinamiche JSP (che sono l'equivalente Java delle pagine ASP o PHP), si richiamava direttamente una classe Java come in questo esempio. L'html fa riferimento all'indirizzo "/somma". Il fatto che questo corrisponda a una classe Somma viene descritto nel file web.xml. La classe servlet Somma.java deve essere contenuta nella sottocartella classes di WEB-INF. Ecco il codice del servlet:
    import java.io.IOException;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class Somma extends HttpServlet
    {
       public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException
       {
          ServletOutputStream out = response.getOutputStream();
          out.println(Integer.parseInt(request.getParameter("numero1"))+Integer.parseInt(request.getParameter("numero2")));
       }
    }          
    
    Esso va compilato con la solita istruzione "javac Somma.java" ma dato che il pacchetto javax.servlet non e' nella distribuzione standard di Java ma e' stato scaricato con Tomcat, prima di fare questo dobbiamo dare un:
    setenv CLASSPATH .:$CATALINA_HOME/common/lib/servlet-api.jar
    
  13. Qui la stessa applicazione e' stata realizzata sia con un servlet:
    import java.io.IOException;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class Somma extends HttpServlet
    {
       public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException
       {
        gotoPage( "/somma.jsp", request, response );
       }
    private void gotoPage(String pageLocation,
                HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException
        {
            RequestDispatcher dispatcher =
                getServletContext().getRequestDispatcher( pageLocation );
     
            dispatcher.forward( request, response );
        }     
    } 
    
    che con una pagina dinamica "somma.jsp" uguale a quella vista prima. Quest'ultima implementazione di un'applicazione Web che in questo caso puo' sembrare complicata oltre misura, e' invece quella consigliata. Il motivo e' il seguente: essa applica il paradigma MVC (Model , View , Controller) che ha il pregio di scalare senza problemi. Il servlet e' in effetti il controller che si interfaccia con l'utente e provvede a controllare i dati ricevuti. Esso richiama eventualmente (ma non in questo caso) altre classi (di solito Javabean) che eseguono operazioni su questi dati e gli mandano i risultati. A questo punto il servlet richiama la pagina dinamica JSP che ha l'unico scopo di realizzare la parte View, cioe' di formattare i risultati in una pagina web da presentare all'utente.
  14. Ecco finalmente l'accesso alla tabella Persone di mysql , realizzato come servlet. Questo il file di configurazione(web.xml) e questo il codice del servlet. Da notare che per funzionare il servlet ha bisogno del driver che va copiato in $CATALINA_HOME/common/lib.

Indietro a Web e Database
Giuseppe Zito

Ultimo aggiornamento :