ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Eshop | Java | Tools | Web | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

FRAMEWORK SERVLET JAVA
Un framework per applicazioni Web in Java
Usare le Servlet
Interfaccia delle HttpServlet
Un compilatore di HTML
Semplificare le query
L'Agenda Web
Conclusioni
Bibliografia e Listati
L'autore

<<< Un compilatore di HTML >>>

Le servlet generalmente producono HTML, eseguendo println sull'output stream fornito dal WebServer. Sebbene per una servlet semplice può essere sensato cablare l'HTML nel codice, in pratica è sempre separare l'HTML in un file a parte, magari costruito utilizzando un editor WYSYWYG. Non è diverso dal concetto di separare il disegno l'interfaccia dal codice di gestone eventi, tipico dello sviluppo di GUI. La servlet API non offre nessuna facility del genere, anche se esiste già la specifica nota come Java Server Pages che consente l'embedding di codice Java in una pagina HTML allo stesso modo delle ASP. Le implementazioni di Java Server Pages che conosco sono tutte a pagamento, e inoltre hanno degli svantaggi, più che altro di logica dell'applicazione. Il framework che stiamo costruendo ci permette di evitare l'acquisto di servlet engine con le JSP, e di ottenere la separazione tra HTML e Java utilizzando un compilatore di HTML JSP-like.

Il mio JSPCompiler, in Java, incluso nel codice dell'articolo che può essere scaricato dal sito di PDJ e dal mio sito. Il JSPCompiler trasforma un File.html in un File.java. Questo file, una volta compilato, genera una classe le cui istanze hanno un metodo expand per produrre in output l'HTML originario. Questo è già un vantaggio, però non è determinante. La cosa importante è che supporta dei tag ASP-like per incorporare Java nell'HTML. Per cui se scriviamo un file.html come questo:


<h1>Test</h1>

<%for(int i=1;i<3;++i){%>

<p>Hello, world</p>

<%}%>


compilandolo otterremo una classe Java come questa:


class Test {

public void expand(HttpData data) {

data.println("<h1>Test</h1>");

for(int i=1;i<3;++i) {

data.println("<p>Hello, world</p>");

}

data.flush();

}

}


Normalmente in una servlet costruisco tutte le istanze delle pagine, nella inizializzazione e le uso per produrre i risultati delle azioni eseguite dalle servlet. Il JSPCompiler fornisce anche una sorta di "variabili", per cui una stringa come %var% viene tradotta in "compilazione" come data.get("var"), per cui posso utilizzare la classe come un template da istanziare e l'HttpData come "ambiente" delle variabili che verranno espanse dal template. Il JSPCompiler supporta anche il concetto di "campo" di una query, per cui %!field% viene trasformato in data.fget("field"). Questa feature deve venire utilizzata in un contesto come questo:


<table>

<%if(data.initRSLoop) do {%>

<tr><td>%!nome%</td>

<td>%!email%</td>

<%} while(data.RSLoop()); %>

</table>


per stampare i risultati ottenuti da un ResultSet. Nel listato 3 c'è un ampio esempio d'uso che commenteremo più avanti. Normalmente utilizzo il JSPCompiler installandolo nel menù Tools del JBuilder, e trovo la cosa molto comoda: infatti posso editare tranquillamente il mio HTML dal JBuilder stesso che è dotato di un previewer di HTML, poi compilo la pagina e infine compilo il tutto per produrre la servlet. Notare che il JSPCompiler non è esattamente come le JavaServerPages, e possiede alcuni tag in più (come il <%%package mio.package%>).

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com