IMPOSTAZIONE DELLE APPLICAZIONI


Esecuzione di servlet in Domino
Esempio

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:

Sun Microsystem aggiorna periodicamente sia il JDK che il JSDK. Domino Designer 6 supporta JDK 1.3 e JSDK 2.0. Le versioni di gestione (QMR) di Domino spesso comprendono gli aggiornamenti di Sun Microsystem, pertanto si consiglia di consultare le Note di rilascio delle QMR per verificare le versioni supportate di JDK e JSDK.

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:
ImpostazioneOpzioni
Supporto Java servletNessuno: (impostazione predefinita): l'attività HTTP non carica il Gestore servlet o il JVM.

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.

Percorso URL servletIl percorso presente nell'indirizzo URL che segnala a Domino che l'URL fa riferimento alla servlet. L'impostazione predefinita è /servlet.
Percorso della classeUna lista di uno o più percorsi che il class loader del Gestore servlet cercherà per trovare le servlet e le classi da loro dipendenti. Questa impostazione permette di aggiungere percorsi aggiuntivi. È possibile specificare directory, file JAR e file ZIP. I percorsi possono essere sia assoluti che relativi rispetto alla directory dei dati di Domino. Il valore predefinito è domino\servlet.

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

Estensione file servletLista di estensioni di file URL che indicano a Domino che un URL fa riferimento a una servlet. Ogni estensione presente nella lista deve essere fatta corrispondere con una singola servlet presente nel file servlets.properties. L'impostazione predefinita è nessuna estensione.
Le seguenti impostazioni controllano il supporto runtime del Gestore servlet di Domino dell'interfaccia Java Servlet API HttpSession. Una servlet che non usa questa interfaccia non è in alcun modo influenzata da tali impostazioni.

Nota Il supporto di interfaccia HttpSession è completamente separato dalla funzione di autenticazione della sessione HTTP in Domino.
ImpostazioneOpzioni
Traccia stato sessioneAbilitata: (predefinito) Il gestore delle servlet di Domino controlli periodicamente l'attività utente di tutte le istanze di HttpSession. Sessioni che sono state inattive per un certo periodo dato di tempo vengono automaticamente terminate. Il Gestore servlet chiama il metodo HttpSession.invalidate() per informare la servlet che la sessione viene terminata.

Disabilitata: le sessioni non saranno controllate per verificarne l'inattività.

Attesa sessione inattivaNumero di minuti di inattività da parte dell'utente prima che sessione la sessione venga terminata. Il valore predefinito è 30 minuti.
Numero massimo di sessioni attiveNumero di sessioni attive simultanee permesse. Il valore predefinito è di 1.000 sessioni. Quando viene raggiunto questo limite, le sessioni inattive da più tempo vengono terminate.
Durata sessioneAbilitata: Quando si esce dall'attività HTTP, il Gestore servlet salva i dati della sessione in un file chiamato sessdata.ser nella directory dei dati di Domino. I dati della sessione vengono ricaricati quando si riavvia l'attività HTTP. Anche gli oggetti che la servlet ha collegato alle sessioni verranno salvati se gli oggetti in questione implementano l'interfaccia java.io.Serializable.

Disabilitata: (impostazione predefinita): tutti i dati della sessione vengono eliminati quando si esce dall'attività HTTP.


Caricamento di classi servlet con JVM

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à:


Queste proprietà sono specificate da direttive nel file servlets.properties. La sintassi generale di una direttiva è la seguente:

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