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.
Tomcat
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.
- cartella di webapps
- ...
- ciao
- pagine html e immagini
- META-INF
- WEB-INF
- lib
- classes
- ...
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")