Advanced Java Services | Parameter mit JSTL aus der web.xml auslesen |
init-Parameter sind Teil eines Servleteintrags, während context-Parameter in einem eigenständigen Contexteintrag stehen, der direkt unter dem Tag <webapp> angesiedelt ist. Das kann zum Beispiel so aussehen:
<web-app> ... ... <servlet> <servlet-name>FooServlet</servlet-name> <jsp-file>/HelloWorld3-Log4j.jsp</jsp-file> <init-param> <param-name>mail</param-name> <param-value>workslikeacharm</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>FooServlet</servlet-name> <!-- <url-pattern>/xyz.do</url-pattern> --> <url-pattern>/HelloWorld3-Log4j.jsp</url-pattern> </servlet-mapping> ... ... <context-param> <param-name>log4j-file</param-name> <param-value>WEB-INF/log4j.properties</param-value> </context-param> ... ... </web-app>
Weiter sind einer Java Server Page zwei verschiedene web.xml-Dateien zugeordnet. Es gibt eine web.xml im webapp-Verzeichnis, in dem auch die Java Server Page selbst liegt. Zum anderen gibt es im Verzeichnis <TomcatHome>\conf. eine web.xml, die zur Konfiguration aller java Server Pages dient. Man kann nicht ohne weiteres alle Parameter aus den beiden web.xml Dateien auslesen.
context-Parameter werden immer aus der zur JSP gehörenden web.xml im webapp-Verzeichnis ausgelesen. Die im Verzeichnis <TomcatHome>\conf liegende web.xml wird beim Starten des Servers immer neu erzeugt und enthält keine context-Parameter. Eigene Einträge sind daher sinnlos.
init-Parameter werden immer aus der im Verzeichnis <TomcatHome>\conf liegenden web.xml ausgelesen. Es werden die Parameter aus dem Servleteintrag mit dem Namen jsp ausgelesen. In Tomcat sieht dieser Eintrag folgendermaßen aus:
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>
Es ist auch möglich, init-Parameter aus der zur Webapplikation gehörenden web.xml auszulesen, dazu muß aber diese web.xml einen Servleteintrag enthalten. Ein solcher Eintrag kann etwa folgendermaßen aussehen:
<servlet> <servlet-name>FooServlet</servlet-name> <jsp-file>/HelloWorld.jsp</jsp-file> <init-param> <param-name>myname</param-name> <param-value>myvalue</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>FooServlet</servlet-name> <url-pattern>/HelloWorld.jsp</url-pattern> </servlet-mapping>
Wichtig dabei ist, daß die in den rot eingefärbten Teilen angegebenen Dateien mit der tatsächlichen JSP-Datei übereinstimmen. Der Name des Servlets ist ein interner Name und völlig beliebig. Außerdem darf im Servlettag keine .class-Datei eingetragen werden.
<p style="font-weight:bold"> Auslesen der context-param Einträge in der web.xml mit Hilfe des impliziten Objekts initParam </p> <ul> <c:forEach items='${initParam}' var='parameter'> <li>Name: <c:out value='${parameter.key}'/></li> <li>Value: <c:out value='${parameter.value}'/></li> </c:forEach> </ul>
<p style="font-weight:bold"> Auslesen der init-param Einträge in der web.xml mit Hilfe des impliziten Objekts pageContext </p> <c:set var="servletConfig" value="${pageContext.getServletConfig()}"/> <c:set var="initEnumeration" value="${servletConfig.getInitParameterNames()}"/> <c:forEach var="key" items="${initEnumeration}"> <c:set var="value" value="${servletConfig.getInitParameter(key)}"/> <c:out value="key: ${key}"/><br/> <c:out value="value: ${value}"/><br/> </c:forEach>