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="-1" 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="-1" 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.

Beim Debugging wird zunächst nur auf das Netzwerk-Interface localhost gebunden. Möchte man sich auch von anderen Maschinen verbinden können, kann man das Binding ändern:

set JPDA_ADDRESS=hostname:8000

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".

Windows Service#

Der Service kann mit "service install" installiert werden. Dabei brauchen zunächst keine Parameter angegeben werden, da diese im zweiten Schritt eingegeben werden.

Der Service mit tomcat7w.exe bzw. tomcat8w.exe eingestellt werden.

Wurde der Service unter einem anderen Namen installiert, kann er durch tomcat7w //ES//<service-name> geändert werden.