Programación en castellano
Inicio > Tutoriales > Servidores de Aplicaciones Java > BEA WebLogic: Guía de Administración
-Tutoriales

BEA WebLogic: Guía de Administración


Desplegar y Configurar Aplicaciones Web

. Introducción

Un Aplicación Web contiene recursos de aplicación como Servlets, JavaServer Pages (JSP), librerías de etiquetas JSP, y recursos estáticos como páginas HTML y ficheros de imágenes. Una aplicación Web también peude definir enlaces a recursos fuera de la aplicación como Enterprise JavaBeans (EJB). Las aplicaciones Web usan un descriptor de despliegue estándar J2EE en conjunción con un descriptor de despliegue específico de WebLogic para definir los recursos y otros parámetros de operación.

Las páginas JSP y los servlets HTTP pueden acceder a todos los servicios y APIs disponibles en el Servidor WebLogic. Estos servicios incluyen EJBs, conexiones a bases de datos mediante JDBC, JavaMessaging Service (JMS), XML, y más.

Las aplicaciones Web usan una estructura de directorio estándar definida en la especificación J2EE y pueden desplegarse como una colección de ficheros que usan esta estructura de directorio (este tipo de despliegue se llama formato de directorio expandido) o como un fichero individual llamado un fichero .war. El despliegue de aplicaciones Web en formato de directorio expandido se recomienda principalmente mientras desarrollamos nuestra aplicación. Mientras que en entornos de producción se recomienda desplegar una aplicación Web usando un fichero .war.

. Pasos para Desplegar una Aplicación Web

Para desplegar una Aplicación Web:

  1. Distribuimos los recursos (servlets, JSPs, ficheros estáticos y descriptores de despliegue) en el formato de directorio prescrito. Para más información puedes ver Estructura de Directorio.
  2. Escribimos el descriptor de despliegue de la aplicación Web (web.xml). En este paso registramos los servlets, definimos los parámetros de inicialización de los servlets, registramos las librerías de etiquetas JSP, definimos las restricciones de seguridad, y definimos otros parámetros de la Aplicación Web.
  3. Creamos el descriptor de despliegue específico de WebLogic (weblogic.xml). En este paso definimos las propiedades JSP, los mápeos JNDI, los mapeos de los roles de seguridad y los parámetros de sesión HTTP. Si no necesitamos definir ninguno de los atributos de este fichero, no necesitamos crearlo.
  4. Almacenamos los ficheros de la estructura de directorios anterior en un fichero .war. Sólo usamos el archivado cuando la Aplicación Web está preparada para desplegarse en un entorno de producción. (Durante el desarrollo podriamos encontrar más conveniente para actualizar los componentes individuales de nuestra aplicación Web, desplegarla en el formato de directorio extendido). Para crear un archivo .war, usamos esta línea de comandos desde el directorio raíz que contiene nuestra aplicación Web:
    jar cv0f myWebApp.war .
    
    Este comando crea un fichero de Aplicación Web llamado myWebApp.war.
  5. Desplegar la Aplicación Web sobre el Servidor WebLogic de una de estas dos formas: usando la Consola de Administración o copiando la Aplicación Web dentro del directorio de aplicaciones de nuestro dominio.

    Para desplegar una Aplicación Web en formato war usando la Consola de Administración (no podemos desplegar una Aplicación Web en formato de directorio extendido usando este procedimiento):

    • Seleccionamos el nodo Web Applications en el panel izquierdo.
    • Pulsamos Install a New Web Application.
    • Navegamos a la localización del fichero .war en nuestro sistema de ficheros.
    • Pulsamos Upload.

    Este procedimiento crea una nueva entrada en el fichero config.xml que contiene la configuración para nuestra Aplicación Web y copia nuestra Aplicación a una localización interna.

    Para desplegar una Aplicación Web (en formato archivado o expandido) copiando:

    • Copiamos un fichero .war o un directorio de más alto nivel que contiene una Aplicación Web en un formato de directorio extendido en el directorio mydomain/config/applications de nuestra distribución WebLogic Server. (Donde mydomain es el nombre de nuestro dominio). Tan pronto como se complete la copia, WebLogic Server despliega automáticamente la Aplicación Web.
    • (Opcional) Usamos la Consola de Administración para configurar la Aplicación Web. Una vez que cambiamos cualquier atributo (ver paso 6) de la Aplicación Web, la configuración es escrita en el fichero config.xml y la Aplicación Web será desplegada estáticamente la próxima vez que reinicemos el Servidor WebLogic. Si no usamos la Consola de Administración, nuestra Aplicación Web todavía es desplegada automáticamente cada vez que arrancamos el Servidor WebLogic, incluso aunque la información de configuración no se haya grabado en el fichero config.xml.
      Nota:
      Si despliegas tu Aplicación Web en formato expandido, debes leer Modificar Componentes de una Aplicación Web.

      Nota:
      Si modificamos cualquier componente de un fichero .war en su localización original en nuestro sistema de ficheros, debemos re-desplegar nuestro fichero .war subiéndolo de nuevo desde la Consola de Administración.
  6. Asignamos atributos de despliegue a nuestra Aplicación Web:
    • Abrimos la Consola de Administración.
    • Seleccionamos el nodo Web Applications.
    • Seleccionamos nuestra Aplicación Web.
    • Asignamos nuestra Aplicación Web a un Servidor WebLogic, a un Cluster o a un Host Virtual.
    • Seleccionamos la pestaña File y definimos los atributos apropiados.

. Estructura de Directorio

Desarrollamos nuestra Aplicación Web dentro de una estructura de directorio específica para que pueda ser archivada o desplegada sobre un Servidor WebLogic, u otro servidor compatible con Servlet 2.2. Todos los servlets, clases, ficheros estáticos y otros recursos que pertenecen a una Aplicación Web están organizados bajo un árbol de directorios. La raíz de este árbol define el documento raíz de nuestra Aplicación Web. Todos los ficheros bajo el directorio raíz pueden servirse a los clientes, excepto los fichero bajo los directorios especiales WEB-INF y META-INF localizados bajo el directorio raíz. Nombramos el directorio raíz con el nombre de nuestra Aplicación Web. Este nombre se usará para resolver las solictudes de componentes de la Aplicación Web.

Los ficheros privados deben situarse en el directorio WEB-INF, bajo el directorio raíz. Todos los ficheros que haya en este directorio son privados, y no serán servidos a los clientes.

  • WebApplicationName/
    Situamos nuestros ficheros estáticos, como ficheros HTML o JSP en este directorio (o un subdirectorio). Este directorio es el documento raíz de nuestra Aplicación Web.
    • /WEB-INF/web.xml
      El descriptor de despliegue de la Aplicación Web que la configura.
    • /WEB-INF/weblogic.xml
      El descriptor de despliegue específico de WebLogic que define cómo se mapen los recursos nombrados en el fichero web.xml a los recursos residentes en algún lugar del Servidor webLogic. Este fichero también se usa para definir atributos de sesiones JSP y HTTP.
    • /WEB-INF/classes
      Contiene las clases del lado del servidor como servlets HTTP y clases de utilidad.
    • /WEB-INF/lib
      Contiene los ficheros .jar usados por la Aplicación Web.

. Desplegar y Re-Desplegar Aplicaciones Web

El procedimiento que usamos para despelgar y re-despelgar una Aplicación Web depende de si la vamos a desplegar en formato expandido o comprimido. Cuando modificamos un componente de una Aplicación Web también debemos re-despelgarla sobre el Servidor WebLogic para servir el componente modificado. Estos procedimientos se describen en esta sección.

. Modificar Componentes de una Aplicación Web

Cuando modificamos cualquier componente de una Aplicación Web (como una clase Servlet, un fichero HTML o JSP, o uno de los descriptores de despliegue), la nueva versión del componente no puede ser servida por el Servidor WebLogic hasta que hayamos re-desplegado la Aplicación Web. El procedimiento usado para re-despelgar depende de si la desplegamos usando el formato comprimido (.war) o expandido.

Componentes en formato .war

Cuando editamos un componente de una Aplicación Web que se ha desplegado en un fichero war, necesitamos re-jar (re-empaquetar) el archivo y luego subir el fichero .war usando uno de los procedimientos descritos en el paso 5 de Pasos para Desplegar una Aplicación Web.

Componentes en Formato de Directorio Expandido

Cuando editamos un componente de una Aplicación Web que se ha desplegado en formato de directorio expandido, debemos tener en mente que WebLogic actualiza los componentes de forma diferente:

  • Ficheros JSP
    Los ficheros JSP se re-despliegan basándose en la selección del atributo pageCheckSeconds que definimos en el descriptor de despliegue específico de WebLogic, weblogic.xml, de nuestra Aplicación Web. Este atributo define el intervalo de tiempo en el cual el Servidor WebLogic chequea los ficheros JSP para ver si han sido modificados. Si se selecciona a 0 (cero), las páginas son chequeadas en cada petición. Si seleciona a -1, se desactiva el chequeo y recompilación de las páginas.
    Nota:
    Los ficheros JSP se redespliegan automáticamente sólo en el Servidor de Administración. Si queremos que los JSPs sean re-desplegados en el servidores controlados dirigos por la Aplicación Web, debemos re-desplegar la Aplicación Web (ver más abajo).
  • Servlets
    Los servlets JSP se re-despliegan basándose en la selección del atributo Reload Period que definimos en el descriptor de despliegue específico de WebLogic, weblogic.xml, de nuestra Aplicación Web. Este atributo define el intervalo de tiempo en el cual el Servidor WebLogic chequea las clases Servlets para ver si han sido modificadas. Si se selecciona a 0 (cero), las clases son chequeadas en cada petición. Si seleciona a -1, el Servidor WebLogic no chequeará para ver si las clases han sido modificadas.
  • HTML y otros ficheros estáticos
    Si modificiamos un HTML u otro fichero estático, como un fichero de imagen o de texto, debemos re-desplegar la Aplicación Web para que el Servidor WebLogic pueda reconocer los cambios.

. Re-Desplegar una Aplicación Web

Usamos uno de estos tres procedimientos para re-desplegar una Aplicación Web:

  • Usando la Consola de Administración:
    1. Seleccionamos el nodo Web Application.
    2. Des-seleccionamos la caja Deployed en el panel derecho.
    3. Pulsamos Apply.
    4. Seleccionamos la caja Deployed en el panel derecho.
    5. Pulsamos Apply.
  • Modificando el fichero REDEPLOY:
    1. Creamos un subdirectorio llamado WEB-INF, bajo el directorio raíz de nuestra Aplicación Web.
    2. Creamos un fichero vacío llamado REDEPLOY y lo grabamos en el directorio WEB-INF.
    3. Para re-desplegar la Aplicación Web, modificamos el fichero REDEPLOY abriéndolo, modificando los contenidos (añadir un espacio es la forma más fácil de hacer esto), y luego grabando el fichero. De forma alternativa, en máquinas UNIX, podemos usar el comando touch sobre el fichero REDEPLOY.
  • Copiando de nuevo el fichero war en el directorio applications (sólo se aplica al despliegue automático).
Nota:
Re-desplegar una Aplicación Web, también la re-despliega a todos los servidores controlados dirigidos por esta Aplicación Web.

. Desplegar Aplicaciones Web como parte de una Aplicación Enterprise

Podemos desplegar una Aplicación Web como parte de una Aplicación Enterprise. Una Aplicación Enterprise es una unidad de despliegue J2EE que empaqueta juntas Aplicaciones Web, EJBs y Adaptadores de Recursos en una sóla unidad desplegable. Si desplegamos una Aplicación Web como parte de una Aplicación Enterprise, podemos especificar un string que se usa en lugar del nombre real de la Aplicación Web cuando el Servidor WebLogic sirve una petición para la Aplicación Web. Especificamos el nuevo nombre con el elemento <context-root> en el descriptor de despliegue application.xml para la Aplicación Enterprise.

Por ejemplo, para una Aplicación Web llamada oranges, normalmente solicitaríamos un recurso de esa Aplicación Web con una URL como esta:

http://host:port/oranges/catalog.jsp

Si la Aplicación Web oranges se empaqueta en una Aplicación Enterprise, podemos especificar un valor para el <context-root> como se ve en el siguiente ejemplo:


<module>
<wedestacar>
<web-uri>oranges.war</web-uri>
<context-root>fruit</context-root>
</wedestacar>
</module>

Entonces usaríamos la siguiente URL para acceder al mismo recurso de la Aplicación Web oranges:

http://host:port/fruit/catalog.jsp

. URIs y Aplicaciones Web

Construirmos la URL usada para acceder a una Aplicación Web desde un cliente usando el siguiente patrón:

http://hoststring/ContextPath/servletPath/pathInfo

donde:

  • hoststring
    es el nombre del host que es mapeado a un host vritual o hostname:portNumber
  • ContextPath
    es el nombre de nuestra Aplicación Web.
  • servletPath
    es un servlet que está mapeado a servletPath.
  • pathInfo
    es la porción que resta de la URL, normalmente un nombre de fichero.

Si estamos usando hosting virtual, podemos sustituir el nombre del host vrital por la porción hoststring de la URL.

. Configurar Servlets

Los Servlets se registran o configuran como una parte de una Aplicación Web. Para registrar un servlet, añadimos varias entradas al descriptor de despliegue de la Aplicación Web. La primera entrada bajo, el elemento <servlet> define el nombre del servlet y la clase compilada que ejecuta el servlet. Este elemento también contiene definiciones para los parámetros de inicialización y roles de seguridad del servlet. La segunda entrada, bajo el elemento <servlet-mapping> define el patrón URL que llama este servlet.

. Mapeo de Servlets

El mapeo de Servlets controla el modo en que accedemos a un servlet. Los siguientes ejemplo, demuestran algunas de las formas que podemos usar para mapear servlets en nuestra aplicación Web.


<servlet>
  <servlet-name>watermelon</servlet-name>
  <servlet-class>myservlets.watermelon</servlet-class>
</servlet>

<servlet>
  <servlet-name>garden</servlet-name>
  <servlet-class>myservlets.garden</servlet-class>
</servlet>

<servlet>
  <servlet-name>list</servlet-name>
  <servlet-class>myservlets.list</servlet-class>
</servlet>

<servlet>
  <servlet-name>kiwi</servlet-name>
  <servlet-class>myservlets.kiwi</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>watermelon</servlet-name>
  <url-pattern>/fruit/summer/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>garden</servlet-name>
  <url-pattern>/seeds/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>list</servlet-name>
  <url-pattern>/seedlist</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>kiwi</servlet-name>
  <url-pattern>*.abc</url-pattern>
</servlet-mapping>

URL Servlet invocado
http://host:port/mywebapp/fruit/summer/index.html watermelon
http://host:port/mywebapp/fruit/summer/index.abc watermelon
http://host:port/mywebapp/seedlist list
http://host:port/mywebapp/seedlist/index.html El Servlet por defecto, si está configurado, o un mensaje de error HTTP 404 file not found.
Si el mapeo para el servlet list había sido /seedlist*, se llamará al servlet list.
http://host:port/mywebapp/seedlist/pear.abc kiwi
Si el mapeo para el servlet list había sido /seedlist*, se llamará al servlet list.
http://host:port/mywebapp/seeds garden
http://host:port/mywebapp/seeds/index.html garden
http://host:port/mywebapp/index.abc kiwi

. Parámetros de Inicialización de Servlets

Definimos los parámetros de inicialización para los servlets en el descriptor de despliegue de la Aplicación Web, en el elemento <init-param> del elemento <servlet>, usando etiquetas <param-name> y <param-value>. Por ejemplo, el siguiente listado de configuración de los parámetros de inicialización de Servlets:


<servlet>
  <servlet-name>HelloWorld2</servlet-name>
  <servlet-class>examples.servlets.HelloWorld2</servlet-class>

  <init-param>
    <param-name>greeting</param-name>
    <param-value>Welcome</param-value>
  </init-param>

  <init-param>
    <param-name>person</param-name>
    <param-value>WebLogic Developer</param-value>
  </init-param>
</servlet>

. Configurar JSP

Desplegamos los ficheros JSP situándolos en la raíz (o en un subdirectorio bajo la raíz) de una Aplicación Web. Los parámetros de configuración adicionales para JSP están definidos en el elemento <jsp-descriptor> del descriptor de despliegue específico de WebLogic, weblogic.xml. Estos parámetros definen las siguientes funcionalidades:

  • Opciones del compilador JSP.
  • Depurado.
  • La frecuencia del chequeo que el Servidor WebLogic hace buscando JSPs actualizados que necesitan ser recompilados.
  • Codificación de caracteres

. Configurar Librerías de Etiquetas JSP

Weblogic Server, en concordancia con la especificación Servlet 2.2 proporciona la habilidad de crear y usar etiquetas JSP personalizadas. Estas etiquetas son clases Java que pueden ser llamadas desde dentro de un página JSP. Para crear etiquetas JSP personalizadas, las situamos en una librería de etiquetas y definimos su comportamiento en un descriptor de librería de etiquetas (TLD). Este TLD debe estar disponible para la Aplicación Web que contiene el JSP definiéndolo en el descriptor de despliegue de la Aplicación Web. Es una buena idea situar el fichero TLD en el directorio WEB-INF de nuestra Aplicación Web, porque este directorio nunca está disponible públicamente.

En el descriptor de despliegue de la Aplicación Web, definimos un patrón URI para la librería de etiquetas. Este patrón URI debe corresponder con al valor de la directiva taglib en nuestras páginas JSP. También definimos la localización del TLD. Por ejemplo, si la directiva taglib en la página JSP es:


<%@ taglib uri="myTaglib" prefix="taglib" %>

y el TLD está localizado en el directorio WEB-INF de nuestra Aplicación Web, podríamos crear la siguiente entrada en el descriptor de despliegue de la Aplicación Web:


<taglidestacar>
  <taglib-uri>myTaglib</taglib-uri>
  <tablig-location>WEB-INF/myTLD.tld</taglib-location>
</taglidestacar>

WebLogic Server también incluye muchas etiquetas JSP personalizadas que podemos usar en nuestras aplicaciones. Estas etiquetas realizan cacheo, facilitan la consulta de control de flujo basado en parámetros, y facilitan la iteración sobre conjuntos de objetos.

. Configurar Páginas de Bienvenida

WebLogic Server nos permite seleccionar una página que es servida por defecto si la URL solicitada es un directorio. Esta característica puede hacer nuestra site más fácil de usar, porque el usuario puede teclear una URL sin dar un nombre de fichero específico.

Las páginas de bienvenida se definen a nivel de Aplicación Web. Si nuestro servidor está hospedando varias Aplicaciones Web, necesitamos definir páginas de bienvenida separadas para cada Aplicación Web.

Para definir las páginas de bienvenida, editamos el descriptor de despliegue de la Aplicación Web, web.xml. Si no definimos nuestra página de bienvenida, el Servidor WebLogic buscará los siguientes ficheros en el siguiente orden y servirá el primero que encuentre:

  1. index.html
  2. index.htm
  3. index.jsp

. Seleccionar un Servlet por Defecto

Cada Aplicación Web tiene un Servlet por defecto. Este servlet puede ser un servlet que especifiquemos nosotros, o, si no lo especificamos, el Servidor WebLogic usa un servlet interno llamado FileServlet como servlet por defecto. Para más información puedes ver Como Resuelve las Peticiones HTTP el Servidor WebLogic.

Podemos registrar cualquier servlet como servlet por defecto. Escribir nuestro propio servlet por defecto nos permite usar nuestra propia lógica para decidir cómo manejar una petición que cae dentro del servlet por defecto.

Seleccionar un servlet por defecto reemplaza el FileServlet y debería hacerse cuidadosamente, porque FileServlet se usa para servir la mayoría de los ficheros, como ficheros de texto, HTML, imágenes, etc. Si esperamos que nuestro servlet por defecto sirva dichos ficheros, necesitaremos escribir esa funcionalidad en nuestro servlet por defecto.

Para seleccionar un servlet por defecto definido por el usuario:

  1. Definimos nuestro servlet como se describe en Configurar Servlets.
  2. Mapeamos nuestro servlet por defecto con un patrón url de “/”. Esto hará que nuestro servlet por defecto responda a todos los tipos de ficheros excepto aquellos con extensión *.htm o *.html, que son mapeados internamente a FileServlet.
    Si también queremos que nuestro servlet por defecto responda a los ficheros que terminan en *.htm o *.html, debemos mapear dichas extensiones hacia nuestro servlet por derecto, además de mapear “/”. Para más información sobre el mapeo de servlets puedes ver Configurar Servlets.
  3. Si todavía queremos que FileServlet sirva los ficheros con otras extensiones, mapeamos dichas extensiones hacia FileServlet (además de mapearlas hacia nuestro servlet por defecto). Por ejemplo, si queremos que FileServlet sirva los ficheros gif, mapeamos *.gif hacia FileServlet.

. Cómo Resuelve WebLogic Server Peticiones HTTP

Cuando WebLogic Server recibe una petición HTTP, la resuelve analizando las distintas partes de la URL y usando esta información para determinar qué aplicación Web o servidor debería manejarla. Abajo tenemos varios ejemplos de combinaciones de peticiones para Aplicaciones Web, host virtuales, servlets, JSPs y ficheros estáticos y el respuesta resultante.

Nota:
Si empaquetamos nuestra Aplicación Web como parte de una Aplicación Enterprise podemos proporcionar un nombre alternativo para una Aplicación Web que se usa para resolver la petición hacia la Aplicación Web. Puedes encontrar más información en Desplegar Aplicaciones Web como parte de una Aplicación Enterprise.

La siguiente tabla proporciona algunos ejemplos de URLs y los ficheros servidos por el Servidor WebLogic. La columna "Index Directories Checked " se refiere al atributo Index Directories que controla si se ofrece un listado de directorio si no se solicita ningún fichero específicamente. Seleccionamos Index Directories usando la Consola de Administración, sobre el nodo Web Applications, bajo la pestaña Configuration/Files.

URL Index
Directories
Checked?
Fichero servidor en la respuesta
http://host:port/apples no Fichero de bienvenida definido en la aplicación Web apples
http://host:port/apples si Listado del directorio de nivel superior de la aplicación Web apples.
http://host:port/oranges/naval no importa El Servlet mapeado con <url-pattern> de /naval en la aplicación web oranges
http://host:port/naval ni importa El Servlet mapeado con <url-pattern> de /naval en la aplicación web oranges y esta aplicación está definida como aplicación web por defecto.
http://host:port/apples/pie.jsp no importa pie.jsp, del directorio de más alto nivel de la aplicación apples.
http://host:port si Listado del directorio de nivel superior de la aplicación web por defecto.
http://host:port no Fichero de bienvenida de la aplicación web por defecto.
http://host:port/apples/myfile.html no importa myfile.html, del directorio de nivel superior de la aplicación web apples.
http://host:port/myfile.html no importa myfile.html, del directorio de nivel superior de la aplicación web por defecto.
http://host:port/apples/images/red.gif no importa red.gif, del subdirectorio images del directorio de más alto nivel de la aplicación web apples
http://host:port/myFile.html

donde myfile.html no existe en la aplicación web apples y no se ha definido un servlet por defecto
no importa Error 404
http://www.fruit.com/ no Fichero de bienvenida de la aplicación web por defecto para un host virtual con el nombre de host www.fruit.com.
http://www.fruit.com/ si Listado del directorio del nivel superior de la aplicación web por defecto de un host virtual con el nombre www.fruit.com.
http://www.fruit.com/oranges/myfile.html no importa myfile.html, de la aplicación web oranges que está dirigia a un host virtual con el nombre www.fruit.com.

. Personalizar Respuestas de Error HTTP

Podemos configurar WebLogic Server para responder con nuestras páginas Web personalizadas u otros recursos HTTP cuando ocurre un error HTTP o una excepción Java particular, en lugar de responder con las páginas de respuesta de error estándars de WebLogic Server.

Definimos las páginas de error personalizadas en el elemento <error-page> del descriptor de despliegue de la Aplicación Web (web.xml).

. Usar CGI con WebLogic Server

WebLogic Server proporciona funcionalidades para soportar nuestros scripts Common Gateway Interface (CGI). Para nuevos proyectos, sugerimos usar Servlets HTTP o JavaServer Pages.

WebLogic Server soporta todos los CGI mediante un servlet interno de WebLogic llamado CGIServlet.TouseCGI, registrando el CGIServlet en el descriptor de despliegue de la Aplicación Web.

. Configurar WebLogic Server para usar CGI

Para configurar CGI en WebLogic Server:

  1. Declaramos CGIServlet en nuestra Aplicación Web usando los elementos <servlet> y <servlet-mapping>. el nombre de la clase para el CGIServlet es weblogic.servlet.CGIServlet.
  2. Registramos los siguientes parámetros de inicialización para CGIServlet definiendo los siguientes elementos <init-param>:
    • cgiDir
      El path al directorio que contiene nuestros scripts CGI. Podemos especificar varios directorios, separado por un “;” (Windows) o un “:” (Unix). Si no especificamos cgiDir, el directorio por defecto será un directorio llamado cgi-bin bajo la raíz de la Aplicación Web.
    • extension mapping
      Mapea una extensión de fichero hacia el intérprete o ejecutable que ejecuta el script. Si el script no requiere un ejecutable, se podría omitir este parámetro de inicialización.
      Los mapeos de extensiones de <param-name> deben empezar con un asterisco seguido por un punto, seguido por la extensión de fichero, por ejemplo: *.pl.
      El <param-value> contiene el path del intérprete o ejecutable que ejecuta el script. Podemos crear varios mapeos creando elementos <init-param> para cada uno.

Entradas de ejemplo incluidas en el descriptor de despligue de la aplicación Web cuando se registra CGIServlet:


<servlet>
  <servlet-name>CGIServlet</servlet-name>
  <servlet-class>weblogic.servlet.CGIServlet</servlet-class>

  <init-param>
    <param-name>cgiDir</param-name>
    <param-value>
      /bea/wlserver6.0/config/mydomain/applications/myWebApp/cgi-bin
    </param-value>
  </init-param>

  <init-param>
    <param-name>*.pl</param-name>
    <param-value>/bin/perl.exe</param-value>
  </init-param>
</servlet>
...
<servlet-mapping>
  <servlet-name>CGIServlet</servlet-name>
  <url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>

. Solicitar un Script CGI

La URL usada para solicitar un script perl debe seguir el patrón:

http://host:port/myWebApp/cgi-bin/myscript.pl

donde:

  • host:port
    es el nombre del host y el número de puerto del Servidor WebLogic
  • cgi-bin
    es el nombre del patrón url mapeado al CGIServlet,
  • myWebApp
    es el nombre de nuestra aplicación Web
  • myscript.pl
    es el nombre del script Perl que está localizado en el directorio especificado por el parámetro de inicialización cgiDir.

. Servir Recursos del Classpath con el ClasspathServlet

Si necesitamos servir clases u otros recursos desde el CLASSPATH del sistema, o desde el directorio WEB-INF/classes de la aplicación Web, podemos usar un servlet especial llamado ClasspathServlet. Este servlet es útil para aplicaciones que usan applets o clientes RMI y requieren acceder a clases del lado del servidor. ClasspathServlet está registrado implícitamente y está disponible desde cualquier aplicación.

Hay dos formas en las que podemos usar ClasspathServlet:

  • Para servir un recurso desde el CLASSPATH del sistema, llamamos al recurso con una URL como esta:
    http://server:port/classes/my/resource/myClass.class
    
  • Para servir un recurso desde el directorio WEB-INF/classes de una aplicación Web, llamamos al recurso con una URL como esta:
    http://server:port/myWebApp/classes/my/resource/myClass.class
    

    En este caso, el recurso está localizado en el siguiente directorio, en relación a la raíz de la aplicación Web:

    WEB-INF/classes/my/resource/myClass.class
    
Aviso:
Como ClasspathServlet sirve cualquier recurso localizado en el CLASSPATH del sistema, no deberíamos situar recursos que no deberían estár disponibles públicamente en el CLASSPATH del sistema.

. Pasar Peticiones a otro Servidor WebLogic

Cuando usamos WebLogic Server como nuestro servidor Web principal, también podríamos querer configurarlo para pasar (actuar como proxy) ciertas peticiones a un servidor HTTP secundario, como Netscape Enterprise Server, Apache, o Microsoft Internet Information Server. Cualquier petición proxy es redirigida a una URL específica. Incluso podemos pasarla a otro servidor Web en una máquina diferente. Nuestras peticiones proxy se basan en la URL de la petición entrante.

El HttpProxyServlet (proporcionado como parte de la distribución) toma una petición HTTP, la redirige a la URL proxy, y envía la respuesta de vuelta al cliente a través del Servidor WebLogic. Para usar el proxy, debemos configurarlo en una Aplicación Web y desplegar esa Aplicación Web sobre el Servidor WebLogic que está redirigiendo las peticiones.

. Seleccionar un Proxy a un Servidor HTTP Secundario

Para seleccionar un proxy a un servidor HTTP secundario:

  1. Registramos el servlet proxy en nuestro descriptor de despliegue de Aplicación Web (ver Ejemplo de web.xml para usar con ProxyServlet). La aplicación Web debe ser la Aplicación Web por defecto del servidor que está respondiendo a las peticiones. El nombre de la clase para el servlet proxy es weblogic.t3.srvr.HttpProxyServlet.
  2. Definimos un parámetro de inicialización para el ProxyServlet con un <param-name> de redirectURL y un <param-value> que contenga la URL del servidor al que se deberían pasar las peticiones.
  3. Mapeamos el ProxyServlet a un <url-pattern>. Especificamente, mapeamos las extensiones de ficheros que deseamos pasar (proxy), por ejemplo *.jsp,o *.html. Usamos el elemento <servlet-mapping> en el descriptor de despliegue de la Aplicación Web.

    Si seleccionamos <url-pattern> a “/”, entonces cualquier petición que no pueda ser resuelta por el Servidor WebLogic será pasara al servidor remoto. Sin embargo, también debemos mapear específicamente las extensiones *.jsp, *.html, y *.html si queremos pasar los ficheros que terminan en estas extensiones.

  4. Desplegamos la Aplicación en el Servidor WebLogic que redirige las peticiones entrantes.

. Ejemplo de web.xml para usar con ProxyServlet

Lo siguiente es un ejemplo de un descriptor de despliegue de una Aplicación Web para usar el ProxyServlet:


<!-- DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.
//DTD Web Application 1.2//EN"
"file:///weblogic/dev/myserver/servlet2.2/WEB-INF/web-jar.dtd"
-->
<web-app>

<servlet>
  <servlet-name>ProxyServlet</servlet-name>
  <servlet-class>weblogic.t3.srvr.HttpProxyServlet</servlet-class>
    <init-param>
      <param-name>redirectURL</param-name>
      <param-value>
        tehama1:7736:7737|tehama2:7736:7737|tehama:7736:7737
      </param-value>
    </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>ProxyServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>ProxyServlet</servlet-name>
  <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>ProxyServlet</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>ProxyServlet</servlet-name>
  <url-pattern>*.html</url-pattern>
</servlet-mapping>

</web-app>

. Pasar Peticiones (proxy) a un Cluster WebLogic

El HttpClusterServlet (proporcionado con la distribución de WebLogic Server) pasa peticiones desde un servidor WebLogic a otros servidores WebLogic en un Cluster WebLogic. HttpClusterServlet proporciona balance de carga y proteción de fallos para las peticiones HTTP pasadas.

. Configurar el HttpClusterServlet

Para configurar el HttpClusterServlet:

  1. Configuramos el ejemplar de WebLogic Server que pasará las peticiones a un cluster de servidores WebLogic. Usamos la Consola de Administración:
    • Creamos una nueva Aplicación Web en nuestro dominio.
    • Creamos un nuevo Servidor en el dominio, o usamos el servidor por defecto.
    • Asignamos la aplicación Web que hemos creado como la aplicación Web por defecto para el servidor que acabamos de crear.
  2. Registramos el HttpClusterServlet en el descriptor de despliegue de la aplicación Web que hemos ceado (puedes ver un ejemplo en Ejemplo de Descriptor de Despliegue para el HttpClusterServlet). La Aplicación Web debe ser la aplicación web por defecto del servidor que está respondiendo a las peticiones. Puedes encontrar más información en Designar una Aplicación Web por Defecto.

    El nombre de la clase para HttpClusterServlet es weblogic.servlet.internal.HttpClusterServlet.

  3. Definimos los parámetros de inicialización apropiados para HttpClusterServlet. Los definimos con el elemento <init-param> en el descriptor de despliegue de la aplicación Web. Debemos definir el parámetro defaultServers, y, cuando sea apropiado, los parámetros adicionales según se definen en la siguiente tabla.
  4. Mapeamos el Proxy Servlet a un <url-pattern>. Especificamente, mapeamos las extensiones de ficheros que deseamos pasar (proxy), por ejemplo *.jsp,o *.html. Usamos el elemento <servlet-mapping> en el descriptor de despliegue de la Aplicación Web.

    Si seleccionamos <url-pattern> a “/”, entonces cualquier petición que no pueda ser resuelta por el Servidor WebLogic será pasada al servidor remoto. Sin embargo, también debemos mapear específicamente las extensiones *.jsp, *.html, y *.html si queremos pasar los ficheros que terminan en estas extensiones.

Otra forma de configurar el url-pattern es mapear un url-pattern como /foo y luego configurar el parámetro pathTrim como foo, lo que elimina foo de la URL pasada (proxy).

<param-name> <param-value> Valor por
Defecto
defaultServers (Requirido) Una lista de nombres de host y números de puertos de los servidores a los que estámos pasando las peticiones en la forma:
host1:HTTP_Port:HTTPS_Port|
host2:HTTP_Port:HTTPS_Port
(donde host1 y host2 son los nombres de host de los servidores en el cluster, HTTP_Port es el puerto donde el host está escuchando peticiones HTTP, y HTTPS_Port es el puerto donde el host escucha peticiones HTTP SSL).
Separando cada host con un carácter |.
Si selecionamos el parámetro secureProxy a ON, el puerto HTTPS usa SSL entre el Servidor WebLogic que ejecuta HttpClusterServlet y los servidores WebLogic del Cluster. Siempre debemos definir un puerto HTTPS, incluso si tenemos secureProxy a OFF.
Ninguno
secureProxy ON/OFF. Si selecciona a ON, permite SSL entre el HttpClusterServlet y los miembros de un Cluster de Servidores WebLoigc. OFF
DebugConfigInfo ON/OFF. Si se selecciona a ON, podemos consultar información de depuración del HttpClusterServlet añadiendo un parámetro ?_WebLogicBridgeConfig a cualquier petición.
Por razones de seguridad, se recomienda tener este parámetro a OFF en entornos de producción.
OFF
connectionTimeout La cantidad de tiempo, en segundos, que un socket espera entre lecturas de bloques de datos. Si el tiempo expira, se lanza una java.io.InterruptedIOException. 0 = infinito
numOfRetries Número de intentos que hace HttpClusterServlet para recuperar una conexión fallida. 5
pathTrim String a recortar del principio de la URI original. ninguna
trimExt La extensión de fichero a recortar del final de la URI. Ninguna
pathPrepend String a añadir al principio de la URL orginal, después de que se haya recortado pathTrim, y antes de que la petición sea reenviada al miembro del cluster de servidores WebLogic. Ninguna

. Ejemplo de Descriptor de Despliegue para HttpClusterServlet

Lo siguiente es un ejemplo de un descriptor de despliegue de una Aplicación Web para usar el HttpClusterServlet:


<!-- DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.
//DTD Web Application 1.2//EN"
"file:///weblogic/dev/myserver/servlet2.2/WEB-INF/web-jar.dtd"
-->

<web-app>

<servlet>
  <servlet-name>HttpClusterServlet</servlet-name>
    <servlet-class>
      weblogic.servlet.internal.HttpClusterServlet
    </servlet-class>

  <init-param>
    <param-name>defaultServers</param-name>
    <param-value>
      myserver1:7736:7737|myserver2:7736:7737|myserver:7736:7737
    </param-value>
  </init-param>

  <init-param>
    <param-name>DebugConfigInfo</param-name>
    <param-value>ON</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>HttpClusterServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>HttpClusterServlet</servlet-name>
  <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>HttpClusterServlet</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>HttpClusterServlet</servlet-name>
  <url-pattern>*.html</url-pattern>
</servlet-mapping>

</web-app>

. Configuar la Seguridad en Aplicaciones Web

Podemos asegurar una Aplicación Web usando autentificación, mediante la restricción de acceso a ciertos recursos en la Aplicación Web, o usando llamadas de seguridad a nuestro código Servlet. Se pueden usar varios reinos de seguridad.

. Configurar la Autentificación para Aplicaciones Web

Definimos la autentificación para Aplicaciones Web en el descriptor de despliegue de la Aplicación Web, usando el elemento <login-config>. En este elemento definimos los reinos de seguridad conteniendo credenciales de usuario, el método de autentificación, y la localización de los recursos para autentificación.

Para configurar la autentificación para Aplicaciones Web:

  1. Elegimos el método de autentificación. Las opciones disponibles son:
    • BASIC
      Esta autentificación usa el navegador web para mostrar una caja de diálogo username/password. Estos valores se autentifican contra el reino.
    • FORM
      La autentificación basada en formulario requiere que devolvamos un formulario HTML que contenga el nombre de usuario y la password. Los campos devueltos por los elementos del formularo deben ser: j_username y j_password, y el atributo action debe ser j_security_check. Aquí hay un ejemplo de código HTML para usar la autentificación FORM:
      
      <form method=”POST” action=”j_security_check”>
      <input type=”text” name=”j_username”>
      <input type=”password” name=”j_password”>
      </form>
      
      	

      El recurso usado para generar el formulario HTML podría ser una página HTML, un JSP o un Servlet. Definimos este recurso con el elemento <form-login-page>.

      El objeto sesión HTTP se crea cuando se sirve la página logín. Por lo tanto, el método session.isNew() devolverá FALSE cuando se llame desde páginas servidas después de que la autentificación tenga éxito.

    • CLIENT-CERT
      Usa certificados de cliente para autentificar la petición.
  2. Si elegimos la autentificación FORM, también definimos la localización de los recursos usados para generar una página HTML y un recurso que responda a una autentificación fallida.
  3. Definimos el reino usado para autentificación. Si no especificamos un reino particular, se usará el reino definido con el campo Auth Realm Name en la pestaña Web Application --> Configuration --> Other de la Consola de Adminsitración.

. Múltiples Aplicaciones Web, Cookies y Autentificación

Por defecto, WebLogic Server asigna el mismo nombre de cookie (JSESSIONID) para todas las aplicaciones Web. Cuando usamos cualquier tipo de autentificación, todas las aplicaciones Web que usan el mismo nombre de cookie usan una sóla firma para autentificación. Una vez que un usuario se ha autentificado, esa autentificación será válida para peticiones de cualquier aplicación Web que use el mismo nombre de cookie. No se le pedirá al usuario que vuelva a autentificarse.

Si queremos requerir autentificación separada para una Aplicación Web, podemos especificar un nombre de cookie distinto para la Aplicación Web. Podemos hacer esto usando el parámetro CookieName, definido en el descriptor de despliegue específico de WebLogic, weblogic.xml, en el elemento <session-descriptor>.

. Restringir el Acceso a Recursos de una Aplicación Web

Podemos aplicar restricciones a recursos específicos (servlets, JSPs, o páginas HTML) de nuestra aplicación Web. Para aplicar restricciones de seguridad:

  1. Definimos un rol que es mapeado a uno o más principales en un reino de seguridad. Definimos los roles con el elemento <security-role> en el descriptor de despliegue de la Aplicación Web. Entonces mapeamos esos roles a los principales en nuestro reino con el elemento <security-role-assignment> en el descriptor de despliegue específico de WebLogic.
  2. Definimos a qué recursos de la aplicación Web se aplican las restricciones usando el elemento <url-pattern> que está anidado dentro del elemento <web-resource-collection>. El <url-pattern> puede referirse a un directorio, un nombre de fichero o a un <servlet-mapping>.
    Para aplicacar las restricciones de seguridad a toda la aplicación Web, usamos el siguiente <url-pattern>:
    
    <url-pattern>/*</url-pattern>
    
    
  3. Definimos el método HTTP (GET o POST) a los que se aplican las restricciones usando el elemento <http-method> que está anidado dentro del elemento <web-resource-collection>.
  4. Definimos si se debería usar o no SSL para las comunicaciones entre el cliente y el servidor usando el elemento <transport-guarantee> que está anidado dentro del método <user-data-constraint>.

Código de ejemplo:


Entradas en web.xml:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>SecureOrdersEast</web-resource-name>
      <description>
        Security constraint for resources in the orders/east directory
      </description>

    <url-pattern>/orders/east/*</url-pattern>
    <http-method>POST</http-method>
    <http-method>GET</http-method>
  </web-resource-collection>

  <auth-constraint>
    <description>constraint for east coast sales</description>
    <role-name>east</role-name>
    <role-name>manager</role-name>
  </auth-constraint>

  <user-data-constraint>
    <description>SSL not required</description>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>

</security-constraint>

...

<security-role>
  <description>east coast sales</description>
  <role-name>east</role-name>
</security-role>

<security-role>
  <description>managers</description>
  <role-name>manager</role-name>
</security-role>

Entradas en weblogic.xml:

<security-role-assignment>
  <role-name>east</role-name>
  <principal-name>tom</principal-name>
  <principal-name>jane</principal-name>
  <principal-name>javier</principal-name>
  <principal-name>maria</principal-name>
</security-role-assignment>

<security-role-assignment>
  <role-name> manager </role-name>
  <principal-name>peter</principal-name>
  <principal-name>georgia</principal-name>
</security-role-assignment>

. Usar Usuarios y Roles Programáticamente en Servlets

Podemos escribir nuestros servlets para acceder programáticamente a usuarios y roles en nuestro código de servlet usando el método javax.servlet.http.HttpServletRequest.isUserInRole(String role).

El string role es mapeado al nombre suministrado en el elemento <role-name> que está anidado dentro del elemento <security-role-ref> de una declaración <servlet> en el descriptor de despliegue de la aplicación. El elemento <role-link> se mapea a un <role-name> definido en el elemento <security-role> del descriptor de despliegue de la aplicación Web.

Por ejemplo:


Código Servlet:

isUserInRole("manager");


Entradas en web.xml:

<servlet>
...
  <role-name>manager</role-name>
  <role-link>mgr</role-link>
...
</servlet>

<security-role>
  <role-name>mgr</role-name>
</security-role>

Entradas en weblogic.xml:

<security-role-assignment>
  <role-name>mgr</role-name>
  <principal-name>al</principal-name>
  <principal-name>george</principal-name>
  <principal-name>ralph</principal-name>
</security-role-ref>

. Configurar Recursos Externos de una Aplicación Web

Cuando accedemos a recursos externos, como una DataSource desde una Aplicación Web mediante JNDI, podemos mapear el nombre JNDI que buscamos en nuestro código al nombre JNDI real unido en el árbol JNDI. Este mapeo se hace usando los dos descriptores de despliegue web.xml y weblogic.xml y nos permite cambiar estos recursos sin tener que modificar el código de nuestra aplicación. Proporcionamos un nombre que se usa en nuestro código Java, el nombre del recurso que está unido al árbol JNDI, y el tipo Java del recurso, e indicamos si la seguridad del recurso se maneja programáticamente por el servlet o desde las credenciales asociadas con la petición HTTP.

Para configurar recursos externos:

  1. Introducimos el nombre del recurso en el descriptor de despliegue según lo usamos en nuestro cógido, el tipo Java, y el tipo de autorización de seguridad.
  2. Mapeamos el nombre del recurso al nombre JNDI.

El siguiente ejemplo asume que hemos definido una fuente de datos llamada accountDataSource:


Código del Servlet:

javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup
  ("myDataSource");

Entradas en web.xml:

<resource-ref>
  ...
  <res-ref-name>myDataSource</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
  ...
</resource-ref>

Entradas en weblogic.xml:

<resource-description>
  <res-ref-name>myDataSource</res-ref-name>
  <jndi-name>accountDataSource</jndi-name>
</resource-description>

. Referenciar EJBs en una Aplicación Web

Referenciamos EJBs en una aplicación Web dándoles un nombre en el descriptor de despliegue de la aplicación Web que es mapeado al nombre JNDI para el EJB que está definido en el fichero descriptor de despliegue weblogic-ejb-jar.xml.

Para configurar EJBs para usarlos en una Aplicación Web:

  1. Introducimos el nombre de referencia del EJB que usamos para buscar el EJB en nuestro código, el nombre de la clase Java de los interfaces home y remoto del EJB en el elemento <ejb-ref> del descriptor de despliegue de la Aplicación Web.
  2. Mapeamos el nombre de referencia en el elemento <ejb-reference-description> del descriptor de despliegue específico de WebLogic, weblogic.xml, al nombre JNDI definido en el fichero weblogic-ejb-jar.xml.

Si la Aplicación Web es parte de un Enterprise Application Archive (fichero *.ear), podemos referenciar un EJB por el nombre usado en el .ear con el elemento <ejb-link>.

. Configurar el Manejo de Sesión

WebLogic Server está configurado para manejar el seguimiento de sesión por defecto. No necesitamos configurar ninguna de estas propiedades para usar seguimiento de sesión. Sin embargo, configurar el modo en que WebLogic Server maneja las sesiones es una parte importante del ajuste de nuestra aplicación para un mejor rendimiento.

El ajuste depende de factores como:

  • Cuántos usuarios esperamos que usen el servlet.
  • Cuantos usuarios concurrentes esperamos que usen el servlet.
  • Cuánto durará cada sesión.
  • Cuántos datos esperamos que se almacenen por cada usuario.

. Propiedades de Sesión HTTP

Configuramos WebLogic Server para que haga seguimiento de sesión con las propiedades del descriptor de despliegue específico de WebLogic, weblogic.xml.

Puedes encontrar una lista completa de atributos de sesión en http://e-docs.bea.com/wls/docs60/programming/weblogic_xml.html#session-descriptor.

. TimeOut de Sesión

Podemos especificar un intervalo de tiempo después del cual expiran las sesiones HTTP. Cuando una sesión expira, todos los datos almacenados en la sesión son descartados. Podemos seleccionar el intervalo de una de estas formas:

  • Seleccionando el atributo TimeoutSecs del elemento <session-descriptor> de descriptor de despliegue específico de WebLogic. Este valor es en segundos.
  • Seleccionando el elemento <session-timeout> en el descriptor de despliegue de la aplicación Web. Este valor se selecciona en segundos y sobreescribe cualquier valor que pongamos en el atributo TimeoutSecs.

. Configurar Cookies de Sesión

WebLogic Server usa cookies para manejo de sesiones cuando lo soporta el navegador del cliente.

Las cookies que usa WebLogic Server para seguir la sesión son temporales por defecto y no sobreviven a la vida del navegador. Cuando un usuario cierra su navegador, las cookies se pierden y se acaba el tiempo de la sesión. Este comportamiento está en el espiritu del uso de la sesión y se recomienda que usemos las sesiones de esta forma.

Es posible configurar muchos aspectos de las cookies usadas para seguimiento de sesión con atributos definidos en el descriptor de despliegue específico de WebLogic. Puedes encontrar una lista completa de atributos relacionados con la sesión y las cookies en http://e-docs.bea.com/wls/docs60/programming/weblogic_xml.html#session-descriptor.

. Usar Cookies de Larga Vida

Para datos de usuario de larga vida en el lado del cliente, nuestra aplicación debería crear y configurar sus propias cookies en el navegador mediante el API servlet HTTP, y no deberíamos intentar usar las cookies asociadas con la sesión HTTP. Nuestra aplicación podría usar cookies para auto-login un usuairo desde una máquina particular, en cuyo caso configuraríamos una nueva cookie con un largo tiempo de caducidad. Recuerda que la cookie sólo puede ser enviada desde la máquina del cliente. Nuestra aplicación debería almacenar los datos en el servidor si debe ser accedida por el usuario desde múltiples localizaciones.

No podemos conectar directamente la edad de un cookie de navegador con la longitud de una sesión. Si una cookie expira antes de su sesión asociada, esta sesión se vuelve huerfana. Si una sesión expira antes que su cookie asociada, el servler no podrá encontrar una sesión. En este punto, se asinga una sesión cuando se llama al método getSession(). Sólo deberíamos hacer un uso temporal de las sesiones.

. Configurar la Persistencia de Sesión

Hay cuatro diferentes implementaciones de persistencia de sesión:

  • Memoria (un-sólo-servidor, no-replicado)
  • Persistencia de sistema de Ficheros
  • Persistencia JDBC
  • Replicación en memoria (en un cluster).

Las tres primeras se cubren aquí; la replicación en memoria se cubre en http://e-docs.bea.com/wls/docs60/cluster/servlet.html.

Para la replicación en memoria, fichero, y JDBC, necesitamos configurar atributos adicionales, incluyendo PersistentStoreType. Cada método tiene su propio conjunto de propiedades mostradas abajo:

. Propiedades Comunes

Podemos configurar el número de sesiones que mantenemos en memoria configurando los siguientes atributos en el descriptor de despliegue específico de WebLogic. Estos atributos sólo són aplicables si estámos usando persistencia de sesión:

  • CacheSize
    Limita el número de sesiones almacenadas que pueden estar activas en memoria en un momento dado. Si estamos esperando un alto volumen de sesiones simultáneas activas, no querremos que estas sesiones bloqueen la RAM de nuestro servidor ya que esto podría causar problemas de rendimiento con el intercambio en memoria virtual. Cuando el caché está lleno, las últimas sesiones más recientemente utilizadas se almacenan en el almacen persistente y son llamadas cuando se necesitan. Si no se usa persistencia, esta propiedad es ignorada, y no hay límite software en el número de sesiones permitidas en la memoria principal. Por defecto, el número de sesiones cacheadas es 1024. El mínimo es 16, y el máximo es Integer.MAX_VALUE. Una sesión vacía ocupa menos de 100 bytes, pero crece según se van añadiendo datos.
  • SwapIntervalSecs
    El intervalo de tiempo que espera el servidor entre la purga de las sesiones recientemente usadas del cache al almacenamiento persistente, cuando se ha alcanzado el límite cacheEntries.
    Si no se configura, esta propiedad tiene un valor por defecto de 10 segunos; el mínimo es 1 segundo, y el máximo 604800 (1 semana).
  • InvalidationIntervalSecs
    Selecciona el tiempo, en segundos, que el Servidor WebLogic espera entre hacer el chequeo de limpieza de sesiones time-out o inválidas, y el borrado de las viejas sesiones y la liberación de memoria. Seleccionamos este parámetro a un valor menor que el valor del elemento <session-timeout>. Usamos este parámetro para ajustar el Servidor WebLogic para un mejor rendimiento en sites de gran tráfico.
    El valor mínimo es cada segundo (1). El valor máximo es una vez a la semana (604.800 segundos). Si no se configura, el valor por defecto es 60 segundos.

. Usar Persistencia Basada en Memoria en un Sólo Servidor y no Replicada

Para usar este tipo de persistencia, seleccionamos la propiedad PersistentStoreType a memory. Cuando usamos el almacenamiento basado en memoria toda la información de sesión se almacena en memoria y se pierde cuando paramos e reiniciamos el Servidor WebLogic.

. Usar Persisentica Basada en Fichero

Para el almacenamiento de sesiones basado en ficheros persistentes:

  1. Seleccionamos PersistentStoreType a file.
  2. Seleccionamos el directorio donde WebLogic Server almacena las sesiones.

    Si no seleccionamos explícitamente un valor para este atributo, automáticamente se crea un directorio temporal en el Servidor WebLogic.

    Si estámos usando la persitencia basada en ficheros en un cluster, debemos seelccionar explícitamente este parámetro a un directorio compartido que sea accesible por todos los servidores del cluster. Debemos crear el directorio nosotros mismos.

. Usar Persistencia Basada en Bases de Datos

Para almacenamiento de persistencia de sesiones basado en JDBC:

  1. Seleccionamos JDB como el método de almacenamiento de persistencia seleccionando el atributo PersistentStoreType a jdbc.
  2. Seleccionamos el almacen de conexiones JDBC a utilizar para el almacenamiento persistente con el atributo PersistentStorePool. Usamos el nombre del almacen de conexioness que está definido en la Consola de Administración del Servidor WebLogic.
  3. Seleccionamos un ACL para la conexión que corresponda con los usuarios que tienen permiso.
  4. Configuramos una tabla de base de datos llamada wl_servlet_sessions para persistencia basada en JDBC. El almacen de conexiones que conecta con la base de datos necesita tener acceso de lectura/escritura para esta tabla. La siguiente tabla muestra los nombres de columnas y tipos de datos que deberíamos usar para crear esta tabla:

    Nombre de Columna Tipo
    wl_id Alfanumérico de anchura variable, hasta 100 caracteres, por ejemplo, Oracle VARCHAR2(100).
    La clave primaria debe configurarse como:
    wl_id + wl_context_path
    
    wl_context_path Alfanumérica de anchura variable, hasta 100 caracteres, por ejemplo, Oracle VARCHAR2(100).
    Esta columna se usa como parte de la clave primaria.
    wl_is_new Single char; Por ejemplo, Oracle CHAR(1)
    wl_create_time Numérico, 20 digitos; Por ejemplo Oracle NUMBER(20)
    wl_is_valid Single char; por ejemplo, Oracle CHAR(1)
    wl_session_values Large binary; Por ejemplo, Oracle LONG RAW
    wl_access_time Numérico, 20 digitos; por ejemplo, NUMBER(20)
    wl_max_inactive_interval Integer; por ejemplo, Oracle Integer.
    Número de sesiones entre peticiones de cliente antes de que la sesión sea invalidada. Un valor negativo indica que la sesión nunca será timeout.

Si estamos usando una base de datos Oracle, podemos usar la siguiente sentencia SQL para crear la tabla wl_servlet_sessions:


create table wl_servlet_sessions
  ( 
    wl_id VARCHAR2(100) NOT NULL,
    wl_context_path VARCHAR2(100) NOT NULL,
    wl_is_new CHAR(1),
    wl_create_time NUMBER(20),
    wl_is_valid CHAR(1),
    wl_session_values LONG RAW,
    wl_access_time NUMBER(20),
    wl_max_inactive_interval INTEGER,
  PRIMARY KEY (wl_id, wl_context_path) );

Podemos modificar la sentencia SQL anterior para usarla con nuestro motor de Base de Datos.

Nota:
Podemos configurar la duración máxima de la persistencia de sesión JDBC que debería esperar una conexión JDBC del almacen de conexiones antes de fallar al cargar los datos de la sesión con el atributo JDBCConnectionTimeoutSecs.

. Usar Reescritura de URL

En algunas ocasiones, un navegador podría no aceptar cookies, lo que hace imposible el seguimiento de sesión utilizando cookies. La reescritura de URL es una solución a esta situación que puede ser sustituida automáticamente cuando el Servidor WebLogic detecta que el navegador no soporta cookies. La reescritura de URL implica la codificación de la ID de la sesión en los hiper-enlaces de las páginas web que nuestro servlet devuelve al navegador. Cuando luego el usuario pulsa sobre estos enlaces, el Servidor WebLogic extrae la ID de la dirección URL y encuentra la HttpSession apropiada cuando nuestro servlet llama al método getSession().

Para activar la reescritura de URLs en el Servidor WebLogic, seleccionamos el atributo URLRewritingEnabled en el descriptor de despliegue específico de WebLogic, bajo el elemento <session-descriptor> a TRUE. (El valor por defecto de este atributo es TRUE).

. Guias de Codificación para Reescritura de URLs

Hay algunas guías generales para el modo en que nuestro código debería manejar las URLs para soportar la reescritura de URLs:

  • Evitar reescribir una URL directamente en el stream de salida, como se muestra aquí:
    
    out.println("<a href=\"/myshop/catalog.jsp\">catalog</a>");
    
    
    En su lugar, usamos el método HttpServletResponse.encodeURL(), por ejemplo:
    
    out.println("<a href=\"”
       + response.encodeURL(“myshop/catalog.jsp”)
       + “\">catalog</a>");
    
    
    Llamar al método encodeURL() determina si la URL necesita ser reescrita, y si es así, la reescribe, incluyendo el ID de sesión en la URL. El ID de sesión se añade a la URL y empieza con un punto y coma.
  • Además de las URLs que son devueltas como una respuesta al Servidor WebLogic, también codificamos las URLs que envían redirecciones. Por ejemplo:
    if (session.isNew())
       response.sendRedirect
    (response.encodeRedirectUrl(welcomeURL));
    
    WebLogic Server usa reescritura de URL cuando una sesión es nueva, incluso si el navegador acepta cookies, porque el servidor no puede decir si el navegador acepta cookies en la primera visita de una sesión.
  • Nuestro servlet puede determinar si una ID de sesión dada fue recibida desde una cookie chequeando el Boolean devuelto por el método HttpServletRequest.isRequestedSessionIdFromCookie(). Nuestra aplicación podría responder apropiadamente, o simplemente relegar en la reescritura de URL del Servidor WebLogic.

. Reescritura de URL y Wireless Access Protocol (WAP)

Si estamos escribiendo una aplicación Wap, debemos usar la reescritura de URL porque el protocolo WAP no soporta cookies. Además, algunos dispositivos WAP tienen un límite de 128 caracteres en la longitud de la URL (incluyendo parámetros), lo que limita la cantidad de datos que se pueden transmitir usando reescritura de URL. Para permitir más espacio para los parámetros, podemos límitar el tamaño de la ID de sesión que genera aleatoriamente el Servidor WebLogic especificando el número de límites con el atributo IDLength

. Usar Conjuntos de Caracteres y Datos POST

Podemos seleccionar el conjunto de caracteres que se usa para procesar los datos desde un formulario que usa el método POST. Para informar a la aplicación que procesa los datos del formulario que se está usando un conjunto de caracteres particular debemos añadir caracteres especificos "señales" a la URL usada para procesar los datos del formulario (especificado con el atributo action de ls etiqueta <form>) y luego mapear dichos caracteres a una codificación en el descriptor de despliegue de la Aplicación Web. Los datos POST normalmente se leen usando ASCII a menos que especifiquemos lo contrario usando el siguiente procedimiento.

Para procesar los datos POST en un conjunto de caracteres no ASCII:

  1. Creamos una nueva entrada en el descriptor de despliegue de la Aplicación Web: web.xml, dentro de un elemento <context-param>. Está entrada debería ir después del elemento <distributable> y antes del elemento <servlet> en el fichero web.xml. En esta entrada, el <param-name> siempre incluye el nombre de la clase weblogic.httpd.inputCharset, seguido por un punto, seguido por el string de señal. El <param-value> contiene el nombre del conjunto de caracteres HTTP. En el siguiente ejemplo, el string /rus/jo* se mapea al conjunto de caracteres windows-1251:
    
    <context-param>
    <param-name>weblogic.httpd.inputCharset./rus/jo*</param-name>
    <param-value>windows-1251</param-value>
    </context-param>
    
    
  2. Codificamos el formulario HTML para usar el string de señal cuando envíe los datos del formulario. Por ejemplo:
    
    <form action="http://some.host.com/myWebApp/rus/jo/index.html">
    ...
    </form>
    
    
    Situamos el string de señal después del nombre de la aplicación Web (también llamado path de contexto —myWebApp— en este caso) y antes de la porción de renombrado de la URL.
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados