domenica 19 ottobre 2008

Webware: Installazione, configurazioni e HelloWorld!

Condividi su Facebook

INTRODUZIONE


Come sapete sono un programmatore java di applicazione j2ee. Ogni tanto però mi piace vedere e soprattutto provare a che punto sono gli altri linguaggi di programmazione in ambito web.

Lasciando stare .Net, che per avere buoni risultati devi utilizzare le varie piattaforme e framework Microsoft quindi pagando, nel mondo open source sicuro l'unico concorrente valido a java in applicazioni web è python.

Ormai per quanto riguarda python si sa che è il miglior linguaggio di scripting object oriented ed abbastanza maturo con una grosse mole di sviluppatore che lo usano e ampliano le sue librerie. Ma in ambito web a che punto è?



Ovviamente il prodotto principale in python per il web è Zope che con Plone forniscono una tra le migliori piattaforme web. Questi due essendo cms fanno il loro ottimo lavoro in gestione e pubblicazione di contenuti in poco tempo, con un ambia libreria di plug-in ecc.. Però d'altra parte dobbiamo attenerci a regole da loro dettate e non facili da personalizzare... E allora? Se volessimo una cosa tipo  Tomcat, Servlets e jsp, per creare le nostre applicazioni da zero?

Detto fatto girovagando ho trovato un application server per python chiamato Webware. Che supporta le servlets python e le PSP. In oltre offre anche MiddleKit libreria python per mappare oggetti su db.

Ho provato Webware e vi posso garantire che l'ho trovato davvero ottimo... ovviamente nn pensate che sia al livello di tomcat per java con tutte le sue configurazioni, ma già quello che offre fa il suo dovere per applicazioni web di certo spessore scritte in python. A tutto ciò va aggiunto che offre un modulo per integrarlo com Apache.

INSTALLAZIONE

Prima di installare scrichiamolo.... andate sul sito di Webware per eseguire il download bene abbiamo tutto, ah ovviamente dovete avere python installato..

Ora scompattate il file webware-xxx.tar.gz dove volete.. entrate nella cartella ed eseguite un bel

>python install.py

vi chiederà la password per l'utente admin da impostare e avete finito.

nella cartella di web ware  trovate già diverse applicazione pronte tipo Example, MiddleKit e WebKit.

Per avviare ed esplorare Webware non vi rimane che andare nella cartella WebKit e lanciare il comando

>AppServer

ora nel vostro browser scrivete localhost:8080 e buona esplorazione del WebKit ossia il pannello di controllo.

Il WebKit oltre a fare da console ci offre anche una serie di tools.. Che come vedremo erediteremo nelle nostre applicazioni..

CONFIGURAZIONI


Per capire bene le configurazioni devo spiegarvi, per lo meno come ho capito io, la logica dell'application server.

Bene lui si basa sui domini(uno per ogni applicazione web) e ogni dominio può avere più context (uno per ogni modulo web).... Quindi in realtà per lanciare app server dobbiamo avviare un suo dominio o più di uno, come abbiamo fatto con il WebKit.

In ogni dominio abbiamo la cartella Config, nella quale oltre ad altri files, abbiamo Application.config e ApplicationServer.config

Il primo contiene le configurazioni dell'applicazione e il secondo quelle del dominio.

ApplicationServer.config possiamo confirgurare porta in ascolto, abilitare il WebKit, il numero massimo di thread ecc.

Application.config possiamo configurare l'applicazione tipo i vari context, la password di amministratore, la sessione, la gestione della cache e dei log, ecc..

Non sto a siegarvi tutto aprite i file tanto sn di facile comprensione...

Vi spiego solo come configurare Webware se lo volete usare con Apache2.

Integrazione con Apache


Il WebKit ci permette di comunicare con apache tramite un modulo Apache che ci fornisce chiamato mod_webkit. Per installarlo andate nella cartella WebKit/Adapters/mod_webkit2/ e copiate il file mod_webkit.dll... Ora incollatelo nella cartella di apache [path cartella di apache]\modules e cambiate l'estensione da '.dll' a '.so' come vuole per convenzione Apache.

Ora editate il file httpd.conf che troavate nella cartella [path cartella di apache]\conf e inserite la seguente riga dove sono presenti le altre simili:
LoadModule webkit_module modules/mod_webkit.so

Abbiamo detto ad apache di caricare il modulo al suo avvio. Inseriamo ora le seguenti righe
<Location /WK>
WKServer localhost 8086
SetHandler webkit-handler
</Location>

con il tag location abbiamo detto a ad apache di richiamare, se nella url è presente /WK, di richiamare l'handler del webkit in ascolto sulla porta 8086 e che la richiesta la elabora lui....

Per altre configurazioini clikkate qui.

Ora lanciate WebKit se nn lo avete fatto e lanciate Apache andate sul browser e scrvete l'host per raggiungere Apache e accodategli /WK

del tipo http://localhost:80/WK/ e come per incanto avete la home del webkit...

Ovviamente nel file AppServer.conf del dominio di WebKit, o altro dominio, dovete impostare
EnableAdapter = True
AdapterPort = 8086

HELLO WORLD


Come ogni guida o recensione che si rispetti dobbiamo fare almeno un esempio di utilizzo e sicuramente è il famoso HelloWorld!! :) .

Prima di addentrarci ad utilizzare gli strumenti messi a disposizioni da Webware e a comporre le nostre pagine vi dico le intenzioni.

Creeremo un nuovo dominio con avviamente il nosro context di default e poi una nuova servlet python che stampa una pagina web chiamata MyServlet che stampa HelloWorld!! in una pagina web. Nel farlo proverò a spiegare come e perchè ecc... ovviamente do per scontato che conoscete python.

Creazione di un applicazione e dominio


Dobbiamo creare quello chiama Webware una work dir, per fare cio ci viene in aiuto con uno script python chiamato MakeAppWorkDir.py presente nella cartella Webware/bin.

Andiamo nella cartella che dovra contenere il nostro progetto e non preoccupatevi potete crearlo nella cartella che più vi piace tanto sarà lo script a gestire dipendenze e librerie. Quindi scelta la nostra directory di lavoro lanciamo il comando
>python Webware/bin/MakeAppWorkDir.py -c PeppeProva PeppeProva

abbiamo detto allo script di crearci una directory di lavoro con context (opzione -c) PeppeProva e chiamata PeppeProva. Se non avessimo messo l'opzione -c avrebbe creato un context MyContext.

Antriamo nella cartella creata e esploratela tra queste ci sono le cartelle Config che contiene i due file di configurazione precedentemente descritti ed ereditati da WebKit, un'altra cartella PeppeProva che rispecchia il nome del context e nella quale vanno le nostre servlet e la cartella Lib dove possiamo inserire le nostre librerie python.

Nella cartella del context PeppeProva troviamo gia una classe Main.py. E' una servlet python che stampa sulla pagina l'lenco dei context del dominio creato. Come per ogni app server la pagina di ingresso index.html, qui il nome da dare alla servlet è Main.py o Index.py.

Apriamo il file Config/Application.conf qui troviamo

----------

Contexts = {}
Contexts['Docs'] = WebwarePath + '/Docs'
Contexts['WebKit/Docs'] = WebKitPath + '/Docs'
Contexts['Examples'] = WebKitPath + '/Examples'
Contexts['Admin'] = WebKitPath + '/Admin'
Contexts['MKBrowser'] = WebwarePath + '/MiddleKit/WebBrowser'
Contexts['Testing'] = WebKitPath + '/Testing'
Contexts['PeppeProva'] = 'PeppeProva'
Contexts['default'] = 'PeppeProva'

-------------

come vedete abbiamo i context ereditati dalla configurazione di WebKit ovviamente possiamo eliminarli o aggiungerne quant ne vogliamo. Per aggiungere un context quindi dobbiamo indicargli nome e cartella. La sola cosa che cambia dal file di cnfigurazione di WebKit è il context di default che come vedete ha impostato quello della nostra applicazione.

Una cosa che dobbiamo cambiare è andare nel file AppServer.config e la proprietà AutoReload a True in modo che ogni volta che facciamo una modifica alle servlet queste vengono rideployate..

Possiamo gia lanciare l'applicazione quindi il dominio e quindi il server, non abbiate paura dobbiamo eseguire solo un comando, o un click se siete su windows. Andate nella root dell workdir PeppeProva e fate doppio click su AppServer.bat. Ora andate nel browser e scrivete localhost:8080 per chiamare il context di defaulth o localhost:8080/Nome context/ per chiamare un context diverso. Se chiamate quello di defaulth vi trovate la pagina web generata dalla servlet Main.py su descritta quindi una serie di link ai vari context..

Creazione della Servlet


Il WebKit anche qui ci viene in aiuto perchè dobbiamo solo estendere la classe Page che nn è altro una estensione delle classe Servlet di python. In Page WebKit non ha fatto altro che implementera dei metodi al posto nostro per gestire i vari contenuti di una pagina web. Quindi tra i metodi messi a disposizione da tale servlet noi dobbiamo solo sovrascivere quello del contenuto tra i tag body e quello che imposta il titolo della pagina ecco il codice:
from WebKit.Page import Page

class MyServlet(Page):

def title(self):
return 'My Sample Servlet'

def writeContent(self):
self.write("<h1>HelloWorld!</h1>")

Abbiamo creato una classe chiamata MyServlet e che estende la classe page del WebKit e abbiamo personalizzato il contenuto del body e del tag title. Semplice vero.. Ovviamente ci sono altri metodi che sovrascrivono l'head gli attributi del body ecc... (immaginateli in una gestione di template...che figata). Attenzione il nome della classe deve corrispondere al nome del modulo python affinche Webware risolva l'url, di conseguenza il codice va in un file chiamato MyServlet.py e messo nella cartella del context PeppeProva.

Non ci rimane che guardare i frutti: andate su http://localhost:8080/MyServlet con il vostro browser e vi trovate il vostro bel HelloWorld!! di seguito il sorgente html della pagina generata:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>My Sample Servlet</title>
</head>
<body text="black" bgcolor="white">
<h1>HelloWorld!!</h1>
</body>
</html>

CONCLUSIONI


Come vedete è semplice creare applicazioni web con python tramite Webware. Per approfondimenti andate sul sito ufficiale.

In questo post non ho parlato delle PSP e soprattutto del MiddleKit anche quello è una figata ve lo garantisco ma su questi scrverò altri post.

Alla prossima :)

Nessun commento:

Posta un commento