Auslagerung von statischen und JSP-Dateien im WebSphere Application Server

rrichter
e-Spirit employee
0 1 297

Ausgangssituation

In einer FirstSpirit-Architektur, in der das Live-System durch einen Application Server (z.B. JBoss, IBM Websphere) oder eine Servlet Engine (z.B. Tomcat oder Jetty) repräsentiert wird, werden Inhalte in Form von JSP-Seiten, welche Personalisierungsinformationen oder sonstige dynamische Funktionen enthalten, gemeinsam mit statischen Dateien (Bildern, CSS, Javascript und sonstigen Medien), veröffentlicht.

Zumindest die JSP-Dateien müssen demnach im Kontext einer Webanwendung innerhalb des Live-Servers aufrufbar sein.

Dies lässt sich zum einen dadurch bewerkstelligen, dass man die JSP-Dateien direkt in ein ausgepacktes .war-Verzeichnis der Webanwendung veröffentlicht oder ein außerhalb der Webanwendung liegendes Deployment-Verzeichnis über einen symbolischen Link in die Webanwendung hineinlinkt, falls der Server/die Servlet-Engine bzw. das Betriebssystem dies erlaubt.


Im WebSphere Application Server existiert seit der Version 6.0 eine dritte Möglichkeit. Der WAS erlaubt es nämlich, über die Konfiguration eines sogenannten extendedDocumentRoot, beliebige außerhalb einer Webanwendung liegende Verzeichnisse als Ablageort für statische und dynamische Ressourcen zu definieren.

Die Konfiguration eines extendedDocumentRoot für eine Webanwendung erweitert das Dokumentenstammverzeichnis der Webanwendung um einen oder mehrere Verzeichnispfade jeweils für statische oder JSP-Dateien.

Ist der Parameter extendedDocumentRoot beispielsweise auf den Wert /opt/extDocRootDir gesetzt, so wird zur Beantwortung einer Anfrage der Form http://<server>:<port>/kontextstammverzeichnis/index.jsp die Datei index.jsp zusätzlich im Verzeichnis /opt/extDocRootDir gesucht, falls sie nicht innerhalb der Webanwendung gefunden wird.

Die Konfigurationsänderungen, die notwendig sind, um das Kontextstammverzeichnis einer Webanwendung um eine oder mehrere Verzeichnispfade zu erweitern, werden im Folgenden beschrieben.

Konfiguration des extendedDocumentRoot für statische Dateien

Zum Konfigurieren einer Anwendung mit einem erweiterten Dokumentstammverzeichnis fügen Sie das Attribut extendedDocumentRoot der Datei ibm-web-ext.xmi oder ibm-web-ext.xml der Anwendung als Dateiserviceattribut hinzu.

Der Wert dieses Attributs ist eine durch Kommas begrenzte Liste mit Verzeichnissen, die als Stammverzeichnisposition für die statischen Dateien dienen.

Der folgende Eintrag ist ein Beispiel aus der Datei ibm-web-ext.xmi:

<fileServingAttributes xmi:id="FileServingAttribute_1" name="extendedDocumentRoot" value="/opt/extDocRootDir"/>

Hierbei ist der Wert für „xmi:id“ beliebig, muss aber innerhalb der Datei ibm-web-ext.xmi eindeutig sein.

Das folgende Beispiel zeigt den Eintrag in der Datei ibm-web-ext.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-ext

xmlns="http://websphere.ibm.com/xml/ns/javaee"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"

      version="1.0">

<file-serving-attribute name="extendedDocumentRoot" value="/opt/extDocRootDir" />

   […]

        <enable-file-serving value="true"/>

   […]
</web-ext>

Wichtig ist in dieser Variante, dass das file-serving über den Parameter enable-file-serving aktiviert worden ist.

Innerhalb der xmi-Variante muss der webappext-Tag um das Attribut fileServingEnabled="true" erweitert werden.

Die folgenden Beispiele basieren auf den vorherigen Einträgen, in dem das Attribut auf den Wert /opt/extDocRootDir gesetzt ist:

  • Eine Anforderung für die Ressource http://<server>:<port>/kontextstammverzeichnis/sample.html erfordert, dass sich die Datei sample.html in der Verzeichnisstruktur/opt/extDocRootDir/sample.html befindet.
  • Eine Anforderung für die Ressource http://<server>:<port>/kontextstammverzeichnis/myDir/sample.gif erfordert, dass sich die Datei sample.gif in der Verzeichnisstruktur/opt/extDocRootDir/myDir/sample.gif befindet.

Konfiguration des extendedDocumentRoot für JSP-Dateien

Zum Konfigurieren einer Anwendung mit einem erweiterten Dokumentstammverzeichnis, aus dem JSP-Dateien bereitgestellt werden, fügen Sie das Attribut extendedDocumentRoot der Datei ibm-web-ext.xmi oder ibm-web-ext.xml als JSP-Attribut hinzu.

Der Wert dieses Attributs ist eine (ggf. durch Kommata separierte) Liste mit Verzeichnissen, die als Stammverzeichnisposition für die JSP-Dateien dienen.

Der folgende Eintrag ist ein Beispiel aus der Datei ibm-web-ext.xmi:

<jspAttributes xmi:id="JSPAttribute_1" name="extendedDocumentRoot" value="/opt/extDocRootDir"/>

Das folgende Beispiel zeigt den Eintrag in der Datei ibm-web-ext.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-ext

xmlns="http://websphere.ibm.com/xml/ns/javaee"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"

      version="1.0">

   […]
   <jsp-attribute name="extendedDocumentRoot" value="/opt/extDocRootDir" />

   […]
<enable-file-serving value="true"/>

   […]
</web-ext>

Definition als WebSphere Variable

Um die Konfiguration zu erleichtern, bietet es sich an, das extendedDocumentRoot für Webanwendungen, die über FirstSpirit mit Inhalten versorgt werden, als WebSphere-Variable mit dem beispielhaften Namen FIRSTSPIRIT_CONTENT_ROOT auszulagern. Dieses Verzeichnis kann (bzw. diese Verzeichnisse können) dann als Deployment-Ziel für Veröffentlichungsaufträge aus FirstSpirit definiert werden.

Wichtig: Die Auslagerung als Variable ist erst ab Websphere Application Server Version 7.0.0.7 möglich, in kleineren Versionen des WebSphere Application Servers muss das extendedDocumentRoot explizit gesetzt werden.

In diesem Fall ergibt sich eine Konfigurationsvariante der folgenden Art:

ibm-web-ext.xmi:

<jspAttributes xmi:id="JSPAttribute_1" name="extendedDocumentRoot" value="${FIRSTSPIRIT_CONTENT_ROOT}"/>
<fileServingAttributes xmi:id="FileServingAttribute_1" name="extendedDocumentRoot" value="${FIRSTSPIRIT_CONTENT_ROOT}"/>

ibm-web-ext.xml:

<jsp-attribute name="extendedDocumentRoot" value="${FIRSTSPIRIT_CONTENT_ROOT}"/>
<file-serving-attribute name="extendedDocumentRoot" value="${FIRSTSPIRIT_CONTENT_ROOT}"/>
<enable-file-serving value=”true”/>

Schließlich definiert man die Variable FIRSTSPIRIT_CONTENT_ROOT für die passenden Geltungsbereiche im Bereich „Umgebung > WebSphere-Variablen“ in der Administrationsoberfläche des WebSphere Application Servers.

FSCONTENTROOT.jpg

Spezialfall FirstSpirit Portalintegration

Für den Spezialfall, dass es sich bei der Webanwendung um das sogenannte CIW-Portlet oder auch FirstSpirit Anzeige-Portlet (Bestandteil des FirstSpirit Content Integrators for WebSphere (CIW)) handelt, ist diese Variable ab der Version 3.1.0 des CIW-Portlets vorkonfiguriert. In allen kleineren Versionen (insbesondere der 2.x-Linie für den WebSphere Portal Server 6.x) muss der Pfad für die FirstSpirit-Dateien explizit manuell in der dort enthaltenen ibm-web-ext.xmi konfiguriert und so das Kontextstammverzeichnis um externe Verzeichnisse zur Auslagerung der statischen und JSP-Dateien erweitert werden. Hierbei ist immer zu beachten, dass in allen Versionen < 7.0.0.7 des WAS das Auslagern in eine Variable nicht unterstützt wird.

Wichtig:
Ab der Version 8.5.5.1 des WebSphere Application Servers muss für die Auslieferung von statischen Dateien (fileServing) die folgende Custom Property am WebContainer der Webanwendung explizit gesetzt werden:


com.ibm.ws.webcontainer.allowPrivAccessGetResource=true

Weiterführende Infos:

http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Fin...

http://pic.dhe.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Fin...

http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.0.0/com.ibm.websphere.nd.iseries.doc/info/ise...

Tags (4)
1 Comment