Lezione 3: Servlet

Struttura di una servlet

Si assume che si conosca già la struttura di una servlet e il suo ciclo di vita in quanto argomenti spiegati a lezione di teoria.
Si ricorda che la documentazione circa i package javax.servlet e javax.servlet.http sono disponibili ANCHE in locale, all'URL file:///usr/local/tomcat/webapps/tomcat-docs/servletapi/index.html.

Compilazione servlet

Le servlet sono delle classi java, quindi per poter far eseguire delle servlet è necessario prima compilarle nel formato bytecode.
Per compilare le servlet è necessario utilizzare la libreria servlet.jar disponibile nella directory /usr/local/tomcat/common/lib.
Ci sono due modi per compilare utilizzando una libreria:

  1. O si setta la variabile d'ambiente CLASSPATH (solo UNA volta) in modo tale che includa la libreria e poi si compila normalmente:
    export CLASSPATH=.:/usr/local/tomcat/common/lib/servlet.jar:$CLASSPATH
    
    javac MiaServlet.java
  2. O si utilizza il compilatore direttamente fornendo come parametro il cammino della libreria da utilizzare:
    javac -classpath /usr/local/tomcat/common/lib/servlet.jar:. MiaServlet.java
    

Le servlet compilate (*.class) DEVONO essere memorizzate nella directory webapps/nome/WEB-INF/classes/, dove nome è il nome dell'applicazione web di cui la servlet deve far parte.

Se si pongono i sorgenti in un'altra directory si deve utilizzare l'opzione -d dir_destinazione del compilatore per poter compilare la servlet e memorizzare direttamente nella directory destinazione il file .class.

Ad esempio, supponiamo di voler compilare la servlet HelloWorld.java e di volerla utilizzare nel context ROOT.

Esercizio 1

Uno schema minimo di servlet HTTP è il seguente:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class nomeClasse extends HttpServlet {

    ...eventuali variabili di classe

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException {

        /* Definisco il tipo MIME del response. Caldamente richiesto
         * dalle specifiche!
         */
        response.setContentType("text/html; charset=ISO-8859-1");

        PrintWriter out = response.getWriter();

        //Inserisco il DOCTYPE!
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"");
        out.println("\"http://www.w3.org/TR/REC-html40/loose.dtd\">");

        out.println("<html>");
        out.println("<head>");
        ...inserire tutti i dati del header
        out.println("</head>");
        out.println("<body>");
        ...inserire tutti i dati del body
        out.println("</body>");
        out.println("</html>");
    }
}

Partendo da questo schema, scrivere una semplice servlet che produca un file HTML contenente la classica frase "Hello World!", salvarla nella directory tomcat/src e attivarla nel context ROOT.
Se si hanno problemi, esiste la servlet di esempio HelloWorldEsempio.java (in tomcat/src) con cui confrontare il proprio codice.

Valida il documento
Copyright © 2002 by Roberto Posenato