applicationServer

un supporto per scrivere applicazioni web

Cosa sono

Sono applicazioni che forniscono contenuti via HTTP... detto così sembrano molto simili ad Apache httpd e in effetti per alcuni parametri lo sono ma se httpd è pensato per fornire ai client dei file presenti su disco (è poi vero che esistono tantissime estensioni che ad esempio gli permettono di eseguire script PHP) un application server è pensato per eseguire applicazioni che genereranno un qualche tipo di output che viene fornito al client.

Questi server offrono un elevato numero di comode funzioni per poter scrivere e mantenere facilmente applicazioni lato server anche di grandi dimensioni, in questa breve introduzione daremo uno sguardo a quei server che ci permettono di scrivere i programmi in Java. Ne esistono diversi tipi che offrono diverse categorie di servizi, noi prendiamo in considerazione il profilo web.

Il costo che dovremo pagare per tutte queste comodità è un maggior lavoro in fase di configurazione della nostra applicazione.

tomcatTomcat

Scegliamo Tomcat come application server ma ne esistono altri sia free che a pagamento, quanto descritto qui per la struttura della nostra applicazione vale in generale, quello che cambia è la configurazione del server che noi non tratteremo perché Tomcat si avvia senza la necessità di particolari configurazioni, spostare la nostra applicazione su un altro server di questa categoria come GlassFish o altri.

Una volta scaricato il pacchetto va scompattato e per avviarlo basta lanciare il programma startup.bat in Windows o startup.sh su Unix che si trova nella sottocartella bin.

Per poter avviare Tomcat ha bisogno di sapere dove si trova Java: questo lo possiamo indicare utilizzando una variabile di ambiente chiamata JAVA_HOME nel file setenv.sh che si trova sempre nella cartella bin, il file conterrà semplicemente una riga:

JAVA_HOME=/percorso/cartella/jdk-17

Hello World!

Come esempio creiamo un oggetto che si chiama "Servlet" che è in grado di rispondere sia a richieste di tipo GET che POST, seguiamo un procedimento che richieda meno strumenti possibile, esistono però software che semplificano di molto la vita di uno sviluppatore (ma bisogna imparare ad utilizzarli).

Se stiamo usando Eclipse fa comodo avere la versione EE (quella indicata come Java Enterprise nella pagina di Download). Creiamo un nuovo progetto "Dynamic Web Project" lasciando le impostazioni di default.

A questo punto creiamo una nuova classe HelloWorld (in qualsiasi pacchetto), l'applicazione in se non è complessa (altrimenti perché usare un Application server?):

package servlet;

import java.io.IOException;
import java.io.Writer;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/saluto")
public class HelloWorld extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
        Writer uscita = response.getWriter();
        uscita.append("richiesta GET");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        response.getWriter().append("richiesta POST");
    }
}

Se abbiamo fatto tutto in ordine dovremmo avere tantissimi errori nella classe... questo perché stiamo utilizzando degli oggetti che non sono presenti nella libreria base di Java. In eclipse correggere il problema non è difficile: basta aprire le proprietà del progetto, andare nella sezione "Java build path" nella pagina delle librerie e aggiungere uno specifico jar che si chiama servlet-api.jar e si trova nella cartella lib di Tomee.

Pubblicazione

Pubblicare una applicazione vuol dire renderla disponibile per i client e in pratica tutto sta nel copiare dei file in posizioni ben precise all'interno della cartella di TomEE.

La prima cosa da fare è scegliere il nome dell'applicaizone (poniamo come esempio ciao) e nel creare la relativa cartella all'interno della cartella webapps di TomEE, da qui in avanti il lavoro andrà fatto all'interno di questa cartella.

Se il progetto è stato fatto con Eclipse e contiene la cartella WebContent il suo contenuto (e non la cartella stessa) va copiato nella cartella appena creata, in questo modo avremo copiato tuti i file della nostra applicazione (pagine html, immaini... ) esclusi i programmi veri e propri. Alcune cartelle hanno nomi precisi e non possono essere rinominate: META-INF contiene informazioni sull'applicazine mentre WEB-INF contiene il codice (compilato).

A questo punto dobbiamo copiare i nostri programmi all'interno della cartella dell'applicazione, in particolare le librerie (sono dei file .jar che non tutte le applicazioni usano) vanno copiati nella cartella WEB-INF/lib mentre i programmi compilati (i file .class ottenuti dalla compilazione dei nostri file sorgente .java) vanno copiati nella cartella WEB-INF/classes (che se non c'è va creata) facendo attenzione a non cambiare l'organizzazione dei paccetti: in pratica usando Eclipse come IDE basta copiare il contenuto della cartella bin del nostro progetto all'interno di WEB-INF/classes di TomEE.

Test

Dopo aver copiato le cartelle opportune riavviare Tomee.

Per provare se tutto funziona bisogna usare un browser web e scrivere l'indirizzo della pagina appena pubblicata, se è stato seguito l'esempio qui sopra: http://localhost:8080/ciao/saluto

Nell'ordine

http
è il protocollo in uso
localhost
oppure il nome del server su cui Tomee è in esecuzione
8080
per default Tomee sta in ascolto sulla porta 8080 ma può essere configurato
ciao
è il nome dell'applicazione cioè della cartella dentro webapps
saluto
è il nome della servlet che vogliamo usare come specificato in @WebServlet("/saluto")