DISEÑO DE APLICACIONES
Escritura del servlet
Para escribir un servlet, es necesario un compilador de Java y la API (del inglés Application Programming Interface, interfaz de programación de aplicaciones) del servlet. Puede conseguir ambos en la sede Web de Sun Microsystems: http://java.sun.com. Descargue Java Development Kit (JDK), que incluye el compilador y otras herramientas básicas y Java Servlet Development Kit (JSDK), que incluye la especificación de la API de servlets, el archivo .JAR de servlets (jsdk.jar) y servlets de ejemplo. La sede de Sun también proporciona vínculos a otros recursos de servlets de Internet.
También puede escribir servlets utilizando cualquier entorno de desarrollo de Java de uso habitual. Por comodidad, se incluye una copia de jsdk.jar en los kits de instalación del servidor IBM® Lotus® Domino(TM) y de IBM® Lotus® Domino(TM) Designer. Esta copia es idéntica al archivo suministrado por Sun en Java Servlet Development Kit.
Sun actualiza periódicamente JDK y JSDK. Lotus Domino Designer Versión 6 permite el uso de JDK 1.3 y JSDK 2.0. Las versiones de mantenimiento trimestral (QMR) de Domino incluyen frecuentemente las actualizaciones de Sun, de modo que es conveniente comprobar las Notas de release para comprobar cuales son las versiones de JDK y JSDK compatibles.
Activación del soporte para servlets en Domino
Domino Java Servlet Manager, una parte de la tarea del servidor HTTP, es quien se encarga de cargar e invocar a los servlets. Domino Java Virtual Machine (JVM) proporciona el soporte de ejecución de Java para servlets. Cuando se inicia la tarea HTTP, puede iniciar automáticamente el gestor de servlets y cargar JVM. La tarea HTTP escribirá mensajes de estado relativas a estas operaciones en la consola del servidor y en el archivo de registro.
El gestor de servlets está controlado por parámetros del documento de servidor del Directorio de Domino. Los parámetros están situados en la ficha Protocolos de Internet > Motor de Web de Domino del documento de servidor. Son los siguientes:
Domino Servlet Manager: La tarea HTTP carga ambos, JVM y Servlet Manager.
Soporte para servlets de otros fabricantes: La tarea HTTP carga JVM, pero no Domino Servlet Manager. Esto permite el uso de administradores de servlets de otras empresas, como WebSphere Application Server de IBM.
Ejemplos:
Ruta de acceso al directorio relativa: domino\servlet
Ruta de acceso al directorio absoluta: c:\apps\MisServlets
Archivo JAR: c:\javamail\mail.jar
Archivo ZIP: domino\servlet\sql.zip
Nota El soporte de la interfaz HttpSession es completamente distinto de la función Autentificación de sesiones de HTTP de Domino.
Desactivado: No se comprobará la inactividad de las sesiones.
Desactivado: (Opción predeterminada). Todos los datos de las sesiones se rechazan cuando acaba la tarea HTTP.
El cargador de clases Servlet Manager no cargará las clases que utilicen código nativo, creen cargadores de clases personalizados o ejecuten ciertas operaciones restringidas. Si su servlet precisa de una clase que Servlet Manager no puede cargar, intente cargarla con el cargador de clases JVM de Domino. El cargador de JVM es normalmente el responsable de cargar las clases de los archivos comprimidos de Java estándar instalados con Domino, en particular los paquetes java.* y lotus.*. Para obligar a que un servlet se cargue mediante el cargador de JVM, y no mediante el cargador de Servlet Manager, mueva el servlet desde la ruta de acceso de las clases de Servlet Manager a la ruta de acceso de JVM. La ruta de acceso para las clases de JVM se especifica en la variable JavaUserClasses del archivo NOTES.INI.
Consejo También es posible cargar clases en el archivo NOTES.INI cuando una clase requerida por el servlet entra en conflicto con las clases del archivo LotusXSL.jar incluido en Domino. Si carga y ejecuta un servlet y aparece un mensaje de error de verificación "Verify Error", mueva los archivos JAR del servlet desde la ruta de acceso de las clases de Servlet Manager a la sentencia JavaUserClasses del archivo NOTES.INI.
Configuración de las propiedades de los servlets
Las propiedades especiales de servlets individuales deben especificarse en un archivo de texto denominado servlets.properties ubicado en el directorio de datos de Domino. Se pueden especificar las propiedades siguientes:
servlet(s).<nombre>.<propiedad>=<valor(es)>
Las directivas tienen en cuenta las mayúsculas y las minúsculas. El archivo servlets.properties también puede incluir líneas en blanco y líneas de comentarios que comiencen con el carácter "#". El archivo servlets.properties es opcional. Las propiedades predeterminadas para los servlets son: sin alias, sin argumentos de inicialización, sin asignación de extensiones y carga de los servlets bajo demanda.
Alias de los servlets
La directiva del alias tiene esta sintaxis:
servlet.<alias>.code=<nombre-de-la-clase>
Por ejemplo:
servlet.SQLQuery.code=sql.database.query.Servlet
Como medida de seguridad, Domino no permite que los nombres de servlets contengan puntos para usarlos en una URL de servlet. Esto impide los intentos de usuarios malintencionados de cargar arbitrariamente clases de paquetes de Java mediante Servlet Manager. Si su servlet tiene un nombre de paquete, deberá asignarle un alias. El siguiente ejemplo permite al servlet sql.database.query.Servlet ser invocado por una URL como "http://hyd.com/servlet/SQLQuery?mes=junio". Los alias también son útiles para ocultar los nombres reales de los servlets a los usuarios.
Es posible asignar más de un alias al servlet. El gestor de servlets creará una nueva instancia del servlet al recibir la primera URL que se refiera a cada alias. El gestor de servlets invocará el método init() del servlet cuando se cree una nueva instancia. Puesto que el alias puede utilizarse en otras directivas en el archivo de propiedades, su pueden dar propiedades diferentes a las instancias. Por ejemplo, se podría especificar un argumento de inicialización distinto para cada alias. Asimismo, puesto que las clases de servlets sólo se cargan una vez aunque se hayan creado varias instancias, las instancias del servlet pueden compartir datos utilizando variables de clases estáticas.
Como función de seguridad, si se asigna un alias a un servlet, no se podrá hacer referencia al servlet en las URL por su nombre de clase. Esto le permitirá ocultar el nombre real del servlet.
Argumentos de inicialización
Los datos de inicio de un servlet se pueden especificar en el archivo de propiedades. El servlet puede acceder a los datos usando el método ServletConfig.getInitParameter. La directiva de inicialización tiene esta sintaxis:
servlet.<alias o nombre de la clase>.initArgs=<nombre1=valor1>,<nombre2=valor2>,...
Se pueden especificar varios argumentos separándolos por comas. Por ejemplo:
servlet.SQLQuery.initArgs=target=db2,user=Domino,cacheSize=30
Asignación de extensiones URL
La directiva de asignación de extensiones URL tiene esta sintaxis:
servlet.<alias o nombre de la clase>.extension=<extensión> <extensión> ...
Es posible asignar más de un extensión al servlet, separando unas de otras por un espacio. Asimismo, todas las extensiones deben haberse incluido en el parámetro Extensiones del archivo de Servlets del documento de servidor. Por ejemplo, para hacer que Domino invoque al servlet SQLQuery siempre que una URL especifique la extensión "sql" o "sq", incluya "sql,sq" en el parámetro del servidor y agregue esta directiva al archivo de propiedades:
servlet.SQLQuery.extension=sql sq
Esto permitirá a un usuario invocar al servlet con una URL como esta:
http://hyd.com/query.sql?mes=junio
Cargar al iniciar la ejecución
De forma predeterminada, el gestor de servlets carga en la memoria los archivos de clase de un servlet la primera vez que recibe una URL que se refiere a él. Sin embargo, se puede especificar que uno o varios servlets se carguen nada más iniciarse el gestor de servlets. Esto evita que los usuarios sufran demoras cuando las URL soliciten por primera vez los servlets.
La directiva de inicio de la ejecución tiene esta sintaxis:
servlets.startup=<alias o clase> <alias o clase> ...
Tenga en cuenta que servlets es plural y que los nombres de servlets deben estar separados por espacios.
Si ha asignado uno o varios alias a un servlet, puede incluir los alias en la directiva de inicio de la ejecución. Esto provocará que el gestor de servlets cargue las clases del servlet y, a continuación, cree una instancia para cada alias.
Una vez que el gestor de servlets carga las clases de un servlet, estas permanecen en la memoria hasta que la tarea HTTP de Domino es detenida por el comando de la consola "tell http quit" o es restablecida por el comando "tell http restart". Antes de descargar un servlet, el gestor de servlets invoca el método destroy() para cada instancia del servlet, para darle la posibilidad de liberar recursos.
Las clases cargadas por el cargador de clases de JVM permanecen activas hasta que se detiene la tarea HTTP. El comando "tell http restart" no las descargará.
Ejemplo de archivo de propiedades
He aquí un ejemplo de archivo servlets.properties:
# Propiedades del servlet sql servlet.SQLQuery.code=sql.database.query.Servlet servlet.SQLQuery.initArgs=cache=30 servlet.SQLQuery.extension=sql # Propiedades del servlet de correo servlet.MailServlet.initArgs=mime=enabled,smime=disabled # Ambos servlets se deben cargar al iniciarse la ejecución servlets.startup=SQLQuery MailServlet # fin del archivo Ejemplo Véase también