Apache Tomcat ist ein Java Application-Server, der leichtgewichtig und leistungsvoll ist.

Windows Service#

Wurde Tomcat als Windows Service installiert, können die Parameter im Nachhinein verändert werden mit dem GUI-Programm tomcat7w.exe.

Server-Configuration#

Dafür ist die Datei server.xml zuständig. Diese ist durch die eingebaute "Anleitung" etwas unübersichtlich, eine einfach Version ist hier:

Tomcat 7#

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
	<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off"/>
	<Listener className="org.apache.catalina.core.JasperListener"/>
	<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
	<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
	<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

	<GlobalNamingResources>
		<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase"
			factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml"/>
	</GlobalNamingResources>

	<Service name="Catalina">
		<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"/>
		<Engine name="Catalina" defaultHost="localhost">
			<Realm className="org.apache.catalina.realm.LockOutRealm">
				<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
			</Realm>

			<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">
				<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
					prefix="localhost_" suffix=".log" pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
			</Host>
		</Engine>
	</Service>
</Server>

Tomcat 8#

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<!-- 	<Listener className="org.apache.catalina.startup.VersionLoggerListener" /> -->
	<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off"/>
	<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
	<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
	<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

	<GlobalNamingResources>
		<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase"
			factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml"/>
	</GlobalNamingResources>

	<Service name="Catalina">
		<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"/>
		<Engine name="Catalina" defaultHost="localhost">
			<Realm className="org.apache.catalina.realm.LockOutRealm">
				<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
			</Realm>

			<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">
				<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
					prefix="localhost_" suffix=".log" pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
			</Host>
		</Engine>
	</Service>
</Server>

Debugging#

Der Server kann statt mit "catalina start" mit
catalina jpda start

gestartet werden, dann wird auf Port 8000 das Java-Debugging akzeptiert.

Der Server kann auch beim Start auf Suspend geschaltet werden, damit er auf den Debugger wartet, wenn man die Environment-Variable mit

set JPDA_SUSPEND=y

setzt.

URL Encoding#

Per Default macht codiert und decodiert Tomcat URLs nicht in UTF-8, daher kann es Probleme mit Umlauten geben. Das kann man korrigieren, indem man dem Connector das Encoding hinzufügt mit dem Attribut URIEncoding="UTF-8".