Advanced   Java   Services Servlet Basics II Back Next Up Home


Aufbau einer Webanwendung

Webanwendungen werden unterhalb des Verzeichnisses webapps angelegt. Das Bild zeigt den Standardaufbau einer Webapplikation an Hand des Verzeichnisses mit dem Namen myWebapp. Die class-Dateien müssen in einem eigenen Verzeichnis mit dem Namen classes liegen. Ein Unterverzeichnis hierin ist automatisch ein Package. Es kann auch mehrere Packages geben. Es empfiehlt sich Packages einzurichten obwohl sie für Servlets nicht zwindend notwendig sind. Das Verzeichnis lib ist optional. Hier werden servletspezifische Javaarchive gelagert, hier ist es die Datei log4j-x.x.xx.jar mit der man zum Debuggen Meldungen in eine log-Datei schreiben kann. Dieses Tool wird von der Apache Software Foundation zur Verfügung gestellt. Im Verzeichnis WEB-INF liegt die Konfigurierungsdatei web.xml und hier die zu log4j gehörende properties-Datei, mit der man log4j konfiguriert.

webapp-aufbau.jpg





web.xml

Die web.xml dient zur Konfigurierung der einzelnen Servlets, die der Servletcontainer bei einer Anfrage startet. Jede Webapplication hat eine eigene web.xml-Datei. Mit Hilfe dieser Datei können Daten an das Servlet übermittelt werden. Dabei können context-Parameter von jedem Servlet ausgelesen werden, init-Parameter jedoch nur von einem speziellen Servlet, da sie im Servlettag selbst vereinbart werden.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
       id="WebApp_ID"
       version="3.0">

  <display-name>HelloWorld-Servlet</display-name>

  <!-- init-Parameter stehen immerhalb eines servlet-tags -->
  <servlet>
    <servlet-name>MyFirstServlet</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
    <init-param>
      <param-name>log4j-file</param-name>
      <param-value>WEB-INF/log4j.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyFirstServlet</servlet-name>
    <url-pattern>/hello.php</url-pattern>
  </servlet-mapping>

   <!-- in context-param kann nur ein key value paar stehen -->
   <context-param>
      <param-name>key1</param-name>
      <param-value>max</param-value>
    </context-param>

   <context-param>
      <param-name>key2</param-name>
      <param-value>straub</param-value>
   </context-param>

</web-app>

Auslesen der Initparameter

init-Parameter sind key-value Paare, die im Servlettag gesetzt werden. Sie können nur ausgelesen werden, ein Servlet kann sie nicht im Code setzen. In der oben stehenden web.xml werden sie dazu verwendet, die Propertiesdatei von log4j ausfindig zu machen.

out.println("<b>Alle init-Parameter aus der web.xml:<br/>");
ServletConfig config = this.getServletConfig();
Enumeration<String> initEnum = config.getInitParameterNames();
while(initEnum.hasMoreElements())
{
   String key = initEnum.nextElement();
   String value = config.getInitParameter(key);
   out.println("key = " + key + "<br/>" );
   out.println("value = " + value + "<br/>" );
}
out.println("</b><br/>" );

Auslesen/Setzen der Contextparameter

context-Parameter stehen unabhängig von einem Servleteintrag in der web.xml. Man kan sie auch im Servletcode setzen, dann werden sie allerdings nicht in der web.xml gespeichert, sondern intern im Objekt ServletContext. Zum Auslesen holt man sich ein Objekt vom Typ ServletContext und verwendet dann die Methode getInitParameterNames(). Der Name ist etwas unglücklich gewählt, da man ihn leicht mit der gleichlautenden Methode von Servletconfig verwechseln kann.

out.println("<b>Alle context-Parameter über ServletContext aus der web.xml:<br/>");
ServletContext context = this.getServletContext();
// Setzen
context.setInitParameter("mykey", "myvalue");
Enumeration<String> contextEnum = context.getInitParameterNames();
for(;contextEnum.hasMoreElements();)
{
   String key = contextEnum.nextElement();
   String value = context.getInitParameter(key);
   out.println("key = " + key + "<br/>" );
   out.println("value = " + value + "<br/>" );
}
out.println("</b><br/>" );


Auslesen/Setzen von Attrributen

Attribute sind key-value Paare die man in einem Servlet über den ServletContext setzten kann. Sie werden intern im Objekt ServletContext gespeichert. Das besondere an Attributen ist, daß zwar die keys Strings sind, aber die Werte beliebige Objekte sein können. Beim Start eines Servlets durch den ServletContainer werden bereits Attribute durch diesen gesetzt.

out.println("<b>Alle Attribute über ServletContext:<br/>");
ServletContext context = this.getServletContext();
// Setzen
context.setAttribute("att1", new Integer(44));
context.setAttribute("att2", new Integer(67));
Enumeration<String> attributeEnum = context.getAttributeNames();
for(;attributeEnum.hasMoreElements();)
{
   String key = attributeEnum.nextElement();
   Object value = context.getAttribute(key);
   out.println("key = " + key + "<br/>" );
   out.println("value = " + value + "<br/><br/>" );
}
out.println("</b><br/>" );

Die von Tomcat gesetzten Attrribute

Hier die Attribute, die Tomcat beim Start eines Servlets setzt. Die Werte, die mit Hexziffern enden sind Javaobjekte!

key = org.apache.tomcat.InstanceManager
value = org.apache.catalina.core.DefaultInstanceManager@1534d8c

key = org.apache.catalina.jsp_classpath
value = /C:/server/Tomcat/webapps/HelloWorld/WEB-INF/classes/;/C:/server/Tomcat/webapps/HelloWorld/WEB-INF/lib/log4j-1.2.17.jar;...

key = org.apache.tomcat.util.scan.MergedWebXml
value = Servlet-01-HelloWorld param1 max param2 straub Servlet_01_HelloWorld...

key = javax.servlet.context.tempdir
value = C:\server\Tomcat\work\Catalina\localhost\HelloWorld

key = org.apache.catalina.resources
value = org.apache.naming.resources.ProxyDirContext@1ee3472

key = org.apache.tomcat.JarScanner
value = org.apache.tomcat.util.scan.StandardJarScanner@1b55ca5

key = org.apache.jasper.compiler.TldLocationsCache
value = org.apache.jasper.compiler.TldLocationsCache@1d5930f

xxx





xxx


















top Back Next Up Home