Advanced Java Services | Parameter mit Scriptlets 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 pageContext-Objekts<br/> mit Hilfe der Methode getServletContext(). <br/><br/> <% ServletContext servletContext = pageContext.getServletContext(); Enumeration<String> contextEnum = servletContext.getInitParameterNames(); for(;contextEnum.hasMoreElements();) { String key = contextEnum.nextElement(); String value = servletContext.getInitParameter(key); out.println("key = " + key + "<br/>" ); out.println("value = " + value + "<br/>" ); } out.println("</b><br/>" ); %> </p>
<p style="font-weight:bold"> Auslesen der init-param Einträge in der web.xml mit Hilfe des pageContext-Objekts<br/> mit Hilfe der Methode getServletConfig(). Gelesen werden beide web.xml In Eclipse ist dies<br/> C:\eclipse-workspaces\java\_ejb\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\web.xml <br/><br/> <% ServletConfig servletConfig = pageContext.getServletConfig(); Enumeration<String> configEnum = servletConfig.getInitParameterNames(); for(;configEnum.hasMoreElements();) { String key = configEnum.nextElement(); String value = servletConfig.getInitParameter(key); out.println("key = " + key + "<br/>" ); out.println("value = " + value + "<br/>" ); } out.println("</b><br/>" ); %> </p>