IMPOSTAZIONE DELLE APPLICAZIONI
Creazione di una servlet
Per creare una servlet sono necessari un compilatore Java e l'API per le servlet. È possibile ottenerli entrambi dal sito Web di Sun Microsystem all'indirizzo http://java.sun.com. Scaricare il Java Development Kit (JDK), comprendente il compilatore e altri strumenti di base, e il Java Servlet Development Kit (JSDK), comprendente le specifiche dell'API delle servlet, il file .JAR delle servlet (jsdk.jar) e alcune servlet di esempio. Il sito Web di Sun Microsystem fornisce anche collegamenti ad altre risorse relative alle servlet presenti nel Web.
È anche possibile creare le servlet servendosi di un qualunque ambiente di sviluppo Java. Per motivi di convenienza, una copia del file jsdk.jar è inclusa nei kit di installazione del server IBM® Lotus® Domino(TM) e di IBM® Lotus® Domino(TM) Designer. Tale file è identico a quello fornito nel JSDK di Sun Microsystem.
Nota Sono state apportate le seguenti modifiche all'ubicazione dei file JAR relativi a servlet che influenzo la posizione in cui è possibile trovare JSDK.JAR per la compilazione delle servlet:
Abilitazione del supporto delle servlet in Domino
Le servlet vengono caricate e chiamate dal Domino Java Servlet Manager, una parte dell'attività HTTP del server. Il supporto runtime di Java per le servlet è fornito da Domino Java Virtual Machine (JVM). Quando l'attività HTTP è avviata, essa può avviare automaticamente il Gestore servlet e caricare il JVM. L'attività HTTP salverà i messaggi di stato per le operazioni in corso sulla console e nel file registro del server.
Il Gestore servlet è controllato da impostazioni presenti nel documento Server nell'elenco indirizzi di Domino. Le impostazioni sono situate sulla pagina Protocolli Internet - Domino Web Engine del documento Server. Le impostazioni sono le seguenti:
Gestore servlet Domino: l'attività HTTP carica sia il JVM che il Gestore servlet.
Supporto Servlet di terze parti: l'attività HTTP carica il JVM, ma non il Gestore servlet. Ciò permette l'uso di gestori servlet di terze parti, come ad esempio WebSphere Application Server di IBM.
Esempi:
Percorso relativo della directory: domino\servlet
Perscorso assoluto della directory: c:\apps\MyServlets
File .JAR: c:\javamail\mail.jar
File .ZIP: domino\servlet\sql.zip
Nota Il supporto di interfaccia HttpSession è completamente separato dalla funzione di autenticazione della sessione HTTP in Domino.
Disabilitata: le sessioni non saranno controllate per verificarne l'inattività.
Disabilitata: (impostazione predefinita): tutti i dati della sessione vengono eliminati quando si esce dall'attività HTTP.
Il caricatore di classi del Gestore servlet non caricherà classi che usano codice nativo, creano programmi di caricamento delle classi personalizzati o eseguono talune altre operazioni soggette a limitazioni. Se la servlet richiede una classe che non può essere caricata dal Gestore servlet, è possibile provare a caricarla mediante il caricatore di classi di JVM di Domino. Il caricatore di classi di JVM è normalmente responsabile del caricamento delle classi dagli archivi Java standard installati con Domino, in particolare dei pacchetti java.* e lotus.*. È possibile forzare una servlet perché venga caricata dal caricatore di classi di JVM piuttosto che dal caricatore di classi del Gestore servlet spostando la servlet in questione dal classpath del Gestore servlet a quello di JVM. Il classpath di JVM è specificato dalla variabile JavaUserClasses del file NOTES.INI.
Suggerimento Le classi vengono caricate nel file NOTES.INI anche quando una classe richiesta dalla servlet è in conflitto con le classi nel file LOTUSXSL.JAR fornito da Domino. Se si carica e si esegue una servlet e si ottiene un messaggio "Errore di verifica", provare a spostare i file .JAR per la servlet dal percorso della classe Gestore server all'istruzione JavaUserClasses nel file NOTES.INI.
Impostazione delle proprietà per le servlet
Le proprietà speciali di singole servlet possono essere specificate in un file di testo chiamato servlets.properties ubicato nella directory dei dati di Domino. Possono essere specificate le seguenti proprietà:
servlet.<nome>.<proprietà>=<valori>
Le direttive sono sensibili alla verifica di maiuscole e minuscole. Il file servlets.properties può anche contenere righe vuote e righe di commento che iniziano con il carattere "#". Il file servlets.properties è facoltativo. Le proprietà predefinite delle servlet sono: nessun alias, nessun argomento di inizializzazione, nessuna mappatura per le estensioni e caricamento delle servlet su richiesta.
Alias delle servlet
La direttiva alias ha questa sintassi:
servlet.<nomealias>.code=<nomeclasse>
Ad esempio:
servlet.SQLQuery.code=sql.database.query.Servlet
Come misura di sicurezza, Domino non permette l'uso di nomi di servlet contenenti punti all'interno di un URL servlet. Ciò impedisce agli utenti il caricamento di classi di pacchetti Java arbitrarie attraverso il Gestore servlet. Se la servlet ha un nome di pacchetto, è necessario assegnargli un alias. Il summenzionato esempio permette il richiamo della servlet servlet sql.database.query.Servlet da un URL come http://acme.com/servlet/SQLQuery?month=june. Gli alias sono utili anche per nascondere agli utenti i nomi effettivi delle servlet.
È possibile assegnare più di un alias a ciascuna servlet. Il Gestore servlet creerà una nuova ricorrenza della servlet quando riceverà il primo URL che fa riferimento a ciascun alias. Il Gestore servlet chiamerà il metodo init() delle servlet quando ne viene creata una nuova ricorrenza. Poiché il nome dell'alias può essere usato in altre direttive del file delle proprietà, le ricorrenze possono avere ciascuna proprietà diverse dalle altre. Ad esempio, è possibile specificare una direttiva per l'argomento di inizializzazione separata per ogni alias. Inoltre, dato che le classi delle servlet vengono caricate una sola volta anche in presenza di più ricorrenze, le ricorrenze delle servlet possono condividere i dati usando variabili di classe statiche.
Come misura di sicurezza, assegnando un alias a una servlet, non è possibile fare direttamente riferimento alla servlet in questione in un URL mediante il nome della sua classe. Ciò permette di nascondere il nome effettivo di una servlet.
Argomenti di inizializzazione
È possibile specificare i dati iniziali da usare per l'impostazione delle servlet nel file delle proprietà. Le servlet possono accedere ai dati usando il metodo ServletConfig.getInitParameter. L'istruzione di inizializzazione ha questa sintassi:
servlet.<alias o nome classe>.initArgs=<nome1=valore1>,<nome2=valore2>,...
Possono essere specificati più argomenti, separati da virgole. Ad esempio:
servlet.SQLQuery.initArgs=target=db2,user=Domino,cacheSize=30
Estensione mappatura URL
La Direttiva extension per la mappatura degli URL ha la seguente sintassi:
servlet.<alias o nome classe>.extension=<estensione> <estensione> ...
È possibile assegnare più di un'estensione a una servlet, separandole con uno spazio. Tutte le estensioni devono essere incluse anche nell'impostazione "Estensione file servlet" nel record Server. Ad esempio, per fare in modo che Domino chiami la servlet SQLQuery ogni volta che un URL specifica l'estensione "sql" o "sq", aggiungere "sql,sq" all'impostazione Server e aggiungere la seguente direttiva al file delle proprietà:
servlet.SQLQuery.extension=sql sq
Ciò permette agli utenti di richiamare la servlet mediante un URL simile al seguente:
http://acme.com/query.sql?month=june
Caricamento all'avvio
Per impostazione predefinita, il Gestore servlet carica in memoria i file di classe della servlet la prima volta che viene ricevuto un URL che faccia riferimento alla servlet in questione. Tuttavia, è possibile specificare che una o più servlet debbano essere caricate immediatamente quando viene avviato il Gestore servlet. Ciò impedisce agli utenti di incorrere in ritardi al primo richiamo di una servlet da parte di un URL.
La direttiva startup ha la seguente sintassi:
servlets.startup=<alias o classe> <alias o classe> ...
Si noti che "servlets" è plurale e che i nomi delle servlet devono essere separati da spazi.
Se a una servlet è stato assegnato uno o più alias, è possibile includere tali alias nella direttiva startup. Questo farà in modo che il Gestore servlet carichi le classi delle servlet e crei quindi una ricorrenza per ciascun alias specificato.
Dopo il caricamento delle classi delle servlet da parte del Gestore servlet, esse rimarranno in memoria fino a quando non sarà interrotta o riavviata l'attività HTTP mediante i comandi di console "tell http quit" o "tell http restart". Prima di scaricare una servlet, il Gestore servlet chiama il metodo destroy() per ciascuna ricorrenza della servlet, in modo da dargli una possibilità di ripulire le risorse.
Una classe caricata dal class loader di JVM rimane in memoria fino a quando non viene interrotta l'attività HTTP. Il comando "tell http restart" non scaricherà la classe.
File proprietà di esempio
Di seguito è riportato un esempio di un file servlets.properties:
# Properties for the sql servlet servlet.SQLQuery.code=sql.database.query.Servlet servlet.SQLQuery.initArgs=cache=30 servlet.SQLQuery.extension=sql # Properties for the mail servlet servlet.MailServlet.initArgs=mime=enabled,smime=disabled # Both servlets should be loaded at startup servlets.startup=SQLQuery MailServlet # end of file Esempio Vedere anche