Top Ten Tomcat Configuration Tips

Für alle, die mit dem Tomcat neu in die Webprogrammierung mit JSPs und Servlets einsteigen wollen, habe ich hier einen Link-Tipp.

Unter OnJava.com – Top Ten Tomcat Configuration Tips findet Ihr 10 hilfreiche Tipps für eine sinnvolle und gute Konfiguration eines Tomcat-Servers.

Die Top Ten beinhalten unter anderem:
- Configuring Virtual Hosts
- Configuring Basic Authentication
- Configuring Single Sign-On
- Configuring Customized User Directories
- Using CGI Scripts with Tomcat
- Changing Tomcat’s JSP Compiler
- Restricting Access to Specific Hosts

Einige Tipps konnte auch ich noch gebrauchen…obwohl ich mit dem Tomcat schon einige Zeit arbeite.

.htaccess für den Tomcat

Heute bin ich auf ein Problem gestoßen, als ich den Zugriff auf eine Tomcat-Webapplikation per Passwort schützen wollte. Also dachte ich mir, dass dies bestimmt ähnlich wie beim Apache-Webserver mittels einer .htaccess-Datei zu verwirklichen ist.

Aber so leicht war dies leider nicht, denn dies funktioniert so nicht. Also entweder einen Apache davor hängen und mit mod_jk verbinden, dass der Apache sich um die Authentifizierung kümmern kann, oder dies im Tomcat selber machen.

Auf der Seite von Martin Schädler habe ich die Lösung für dieses Problem gefunden. Die User- und Passwort-Abfrage lässt sich am Besten im Tomcat mittels eines SecurityConstraints in der web.xml verwirklichen.

Hier ein kleines Beispiel:


  <web-app>
    ...
    </servlet-mapping>
    <security-constraint> 
        <web-resource-collection>
            <web-resource-name>web</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>secure</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>interner Bereich</realm-name>
    </login-config>
  </web-app>

Zusätzlich muß in der tomcat-users.xml die Rolle internalarea definieren werden und mit einem oder mehreren Usern verknüpft werden….


  <role rolename="secure"/>
  <user username="user" password="pw" roles="secure"/>

Und schon hat man einen gesicherten Bereich in seiner Webapplikation realisiert. ;-)

Quelle: Martin Schädler’s – Tomcat-Tipps

Serverabsturz nach Tomcat-Redeployment

Viele von uns, die mit J2EE-Servern, und vor allem dem Tomcat zu tun haben, kennen das Problem. Nachdem zum Beispiel während der Entwicklung die Webapplikation mehrfach redeployed wurde, kommt es desöfteren zu einer OutOfMemory-Exception und der Server schmiert schliesslich ab.

Ursache hierfür ist oft die Verwendung von Cache-Mechanismen und Singleton-Mustern, denn diese Klassen und Objekte werden auch nach dem Redeployment noch oft von außen referenziert. Zu den vermutlichen Übeltätern gehören zum Beispiel Libraries wie: DOM4J, JDBC-DriverManager, Jakarta Commons Logging, Log4J, oder auch Sun’s KeepAliveCache.

Einige dieser verdächtigen Libraries erfahren bereits im Tomcat 5.5 eine Sonderbehandlung, allerdings konnte hiermit das Problem noch nicht ausreichend gelöst werden.

Einen sehr interessanten Artikel und weitere Infos zu diesem immer noch sehr aktuellen Thema findet Ihr hier: Memory leaks where the classloader cannot be garbage collected

Database Connection Pooling mit Tomcat

Für mich ist dies zwar inzwischen Routine, aber vielleicht kann ich, ja mit diesem Hinweis jemandem anderen weiterhelfen.

Auf der OnJava-Seite wurde ein sehr interessanter Artikel zum Thema Database Connection Pooling mit Tomcat veröffentlicht. Hierbei geht der Autor detailiert auf den Database Connection Pooling (DBCP)-Mechanismus und die damit verbundenen Vorteile ein.

Außerdem wird eine Datenbank-Konfiguration mit dem Database Connection Pooling (DBCP) von Anfang bis zum Ende durchgegangen.

Hier ein Beispiel:

<Context path="/testapp" docBase="testapp" debug="0" 
reloadable="true" crossContext="true">

<Resource name="jdbc/mySqlTest" auth="Container"
   type="javax.sql.DataSource" removeAbandoned="true"
   removeAbandonedTimeout="30" maxActive="50"
   maxIdle="20" maxWait="10000" 
   username="myUser" password="myPassword"
   driverClassName="com.mysql.jdbc.Driver"
   url="jdbc:mysql://localhost/mySqlTest"/>

</Context>

Weitere Infos findet Ihr hier:
Database Connection Pooling with Tomcat