this print for content only—size & color not accurate spine = 0.82" 352 page count EMPOWERING PRODUCTIVITY FOR THE JAVA ™ DEVELOPER Pro Apache Tomcat 6 Dear Reader, The lightweight, open source Apache Tomcat 6 servlet container is the refer- ence implementation of the latest JSP ™ 2.1 and Servlet 2.5 specifications, which means it’s the first server to provide the new specifications’ features. This also makes it an incredibly popular choice as a web server—it has reached a significant level of maturity by being adopted by companies and organizations from around the world. Pro Apache Tomcat 6 provides accurate, detailed information on how to work with Tomcat’s enterprise-class features out of the box for busy system administrators and others using Tomcat 6. Though you will explore the theory of Java-based, multi-tiered systems with reference to Tomcat’s place in them, you won’t waste time revisiting JSP or servlet coding skills. Instead, you’ll learn how to obtain, install, and administer Tomcat 6. You’ll see how Tomcat 6’s built-in features allow you to configure clustering, load balancing, and shared hosting to enhance its reliability and performance. You’ll also learn how to effectively integrate Tomcat 6 with other popular and necessary systems, including the Apache web server 1.3 and 2.0, Microsoft’s IIS web server, MySQL databases, and LDAP and ODBC data sources. Pro Apache Tomcat 6 is full of invaluable information that will help you get up to speed on managing Tomcat 6 as quickly as possible. Yours, Matthew Moodie and Kunal Mittal Kunal Mittal, author of Pro Apache Beehive BEA WebLogic Server 8.1 Unleashed US $39.99 Shelve in Java Programming User level: Intermediate–Advanced Moodie, Mittal, Ed. Pro Apache Tomcat 6 THE EXPERT’S VOICE ® IN JAVA ™ TECHNOLOGY Matthew Moodie Edited by Kunal Mittal Pro Apache Tomcat 6 CYAN MAGENTA YELLOW BLACK PANTONE 123 CV ISBN-13: 978-1-59059-785-9 ISBN-10: 1-59059-785-0 9 781590 597859 53999 Companion eBook Available Companion eBook See last page for details on $10 eBook version Effectively deploy Tomcat 6 to maximize your JSP ™ and servlet-based web applications. Matthew Moodie, author of Pro Apache Tomcat 5/5.5 Pro Apache Ant www.apress.com java.apress.com SOURCE CODE ONLINE THE APRESS JAVA ™ ROADMAP Pro JSP ™ 2, 4th Edition Pro JSF ™ and Ajax: Building Rich Internet Components Beginning Java ™ EE 5: From Novice to Professional Pro Apache Tomcat 6 Pro Apache Tomcat 6 Matthew Moodie Edited by Kunal Mittal 785000FM.qxd 2/28/07 11:23 AM Page i Pro Apache Tomcat 6 Copyright © 2007 by Matthew Moodie All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN-13 (pbk): 978-1-59059-785-9 ISBN-10 (pbk): 1-59059-785-0 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. Java™ and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc., in the US and other countries. Apress, Inc., is not affiliated with Sun Microsystems, Inc., and this book was writ- ten without endorsement from Sun Microsystems, Inc. Lead Editor: Steve Anglin Editor: Kunal Mittal Technical Reviewer: Scott Davis Editorial Board: Steve Anglin, Ewan Buckingham, Gary Cornell, Jason Gilmore, Jonathan Gennick, Jonathan Hassell, James Huddleston, Chris Mills, Matthew Moodie, Dominic Shakeshaft, Paul Sarknas, Jim Sumser, Matt Wade Project Manager: Beth Christmas Copy Edit Manager: Nicole Flores Copy Editor: Heather Lang Assistant Production Director: Kari Brooks-Copony Production Editor: Kelly Gunther Compositor: Kinetic Publishing Services, LLC Proofreader: Elizabeth Berry Indexer: Toma Mulligan Artist: Kinetic Publishing Services, LLC Cover Designer: Kurt Krames Manufacturing Director: Tom Debolski Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail orders-ny@springer-sbm.com, or visit http://www.springeronline.com. For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail info@apress.com, or visit http://www.apress.com. The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is available to readers at http://www.apress.com in the Source Code/Download section. 785000FM.qxd 2/28/07 11:23 AM Page ii To Laura 785000FM.qxd 2/28/07 11:23 AM Page iii 785000FM.qxd 2/28/07 11:23 AM Page iv Contents at a Glance About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv About the Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi ■CHAPTER 1 Introducing Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ■CHAPTER 2 Installing Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 ■CHAPTER 3 Examining Tomcat’s Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 ■CHAPTER 4 Working with Tomcat’s Configuration Files. . . . . . . . . . . . . . . . . . . . . . 35 ■CHAPTER 5 Administering Web Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 ■CHAPTER 6 Using Tomcat’s Administration Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 ■CHAPTER 7 Configuring Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 ■CHAPTER 8 Understanding Tomcat’s Class Loaders . . . . . . . . . . . . . . . . . . . . . . . . 133 ■CHAPTER 9 Using Tomcat’s Connectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 ■CHAPTER 10 Connecting to Databases Using JDBC . . . . . . . . . . . . . . . . . . . . . . . . . 167 ■CHAPTER 11 Working with User Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 ■CHAPTER 12 Securing Tomcat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 ■CHAPTER 13 Implementing Shared Tomcat Hosting . . . . . . . . . . . . . . . . . . . . . . . . . 253 ■CHAPTER 14 Testing Tomcat’s Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 ■APPENDIX Installing MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 ■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 v 785000FM.qxd 2/28/07 11:23 AM Page v 785000FM.qxd 2/28/07 11:23 AM Page vi Contents About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv About the Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi ■CHAPTER 1 Introducing Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Understanding the Web Today. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Looking Beyond CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Introducing Java on the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Adding to Servlets: JavaServer Pages . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Introducing Servlet Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Looking at Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 What’s New in Tomcat 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Understanding Tomcat’s Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Top-Level Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 The Connector Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 The Container Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 The Nested Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 ■CHAPTER 2 Installing Tomcat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Installing Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Installing Java on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Installing Java on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Installing Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Installing Tomcat on Windows Using the Installer . . . . . . . . . . . . . . . 15 Installing Tomcat on Windows Using the Zipped File. . . . . . . . . . . . . 20 Installing Tomcat on Linux or Mac OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Viewing the Default Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Running Tomcat with the Server Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Installing Ant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Installing Tomcat from Source. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 vii 785000FM.qxd 2/28/07 11:23 AM Page vii Troubleshooting and Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 The Tomcat Window Disappears. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 The Port Number Is in Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 ■CHAPTER 3 Examining Tomcat’s Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Looking at CATALINA_HOME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 The bin Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 The conf Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 The logs Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 The lib Directory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 The temp Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 The webapps Directory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 The work Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Understanding Web Application Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Web Application Context. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 The WEB-INF Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 The META-INF Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 ■CHAPTER 4 Working with Tomcat’s Configuration Files . . . . . . . . . . . . . . . 35 Examining Tomcat’s Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Using catalina.policy for Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Using catalina.properties to Configure Tomcat’s Class Loaders . . . . . . . . 39 Using server.xml to Configure Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Configuring a Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Configuring Global Naming Resources. . . . . . . . . . . . . . . . . . . . . . . . . 42 Configuring a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Configuring a Connector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Configuring an Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Tomcat Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Configuring a Realm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Configuring a Host. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Configuring a Valve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Configuring a Listener. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Configuring an Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Understanding Authentication and the tomcat-users. xml File . . . . . . . . . 64 ■CONTENTSviii 785000FM.qxd 2/28/07 11:23 AM Page viii Configuring Web Application Defaults with web.xml. . . . . . . . . . . . . . . . . . 64 Default Servlet Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Matching URLs: Servlet Mappings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Configuring Session Timeout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Configuring MIME Mappings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Configuring Welcome Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Changing Service Options on Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 ■CHAPTER 5 Administering Web Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Configuring Contexts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Configuring Default Contexts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 The Context Element. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Configuring a Parameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Configuring a Resource Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Examining a Web Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Mapping URLs to Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Examining the WEB-INF Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Examining the web.xml File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 <distributable> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 <context-param> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 <filter> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 <filter-mapping>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 <servlet> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 <servlet-mapping>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 <session-config> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 <mime-mapping>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 <welcome-file-list> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 <error-page> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 <resource-env-ref> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 <resource-ref> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 <security-constraint>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 <login-config>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 <security-role> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 ■CONTENTS ix 785000FM.qxd 2/28/07 11:23 AM Page ix [...]... replacements have been built on top of the Apache server (www .apache. org) because of Apache s popular modular application programming interface (API) Developers can use the API to extend Apache s functionality with persistent programs, thus it’s ideal for creating programs that create dynamic content Apache loads modules into its memory when it starts and passes the appropriate HTTP requests to them as needed... which was a complete redesign of the Tomcat architecture and which had a new code base The Tomcat 4.x series is the RI of the Servlet 2.3 and JSP 1.2 specifications Tomcat 5.x was the next version of Tomcat and is the RI of the Servlet 2.4 and JSP 2.0 specifications Note that two branches of Tomcat 5.x exist: Tomcat 5.0.x and Tomcat 5.5.x Tomcat 5.5.x branched at Tomcat 5.0.27 and is a refactored version... 146 The Apache JServ Protocol 146 Worker Implementations 147 Integrating Tomcat with Apache 1.3 Using mod_jk 147 Integrating Tomcat with IIS 153 Configuring Distributed Networks with Tomcat 158 Understanding Tomcat Load Balancing ... integrated with the Apache web server In 1999, Sun Microsystems donated the Java Web Server code to the ASF, and the two projects merged to create Tomcat Version 3.x was the first Tomcat series and was directly descended from the original code that Sun Microsystems provided to the ASF It’s still available and is the RI of the Servlet 2.2 and JSP 1.1 specifications In 2001, the ASF released Tomcat 4.0, which... new copy of the external program So, if only a small number of users request a CGI program simultaneously, it’s not too big of a problem However, it’s a different story if hundreds or thousands of users request the resource simultaneously Every copy of the program requires a share of the server’s processing 1 7850ch01FINAL.qxd 2 2/28/07 10:33 AM Page 2 CHAPTER 1 ■ INTRODUCING TOMCAT power, which is rapidly... outside of a container such as Tomcat Tomcat 6 is also the first container to support the Java Server Faces 1.2 specification In my experience with Tomcat 6, I have noticed it is a little faster (during startup and shutdown) than its predecessor It also seems to have a slightly smaller memory footprint Throughout this book, as we talk about the different aspects of Tomcat 6, you will notice that not a... 1.1 The alternative is the Apache JServ Protocol (AJP) connector, which is a connector for linking with Apache to use its Secure Sockets Layer (SSL) and static content-processing capabilities I’ll discuss each of these in Chapter 9 The Container Components The container components receive the requests from the top-level components as appropriate They then deal with the request process and return the response... the request In this way, you can see the progression of the request from the top-level components down the hierarchy of components 7850ch01FINAL.qxd 2/28/07 10:33 AM Page 7 CHAPTER 1 ■ INTRODUCING TOMCAT If Tomcat is used as a stand-alone server, the defined engine is the default However, if Tomcat is configured to provide servlet support with a web server providing the static pages, the default engine... Tomcat 6.x version This version is the new RI for the Servlet 2.5 and JSP 2.1 specifications What’s New in Tomcat 6 Tomcat 6 is built using several new features, such as generics, introduced in Java 5 The key new elements from the Tomcat 5 release are support for the latest Java Server Pages (JSP) 2.1 specification (JSR 245) and the Java Servlet 2.5 specification (JSR 154) In addition to JSP 2.1, Tomcat. .. container to operate at all Tomcat, the subject of this book, is the reference implementation (RI) servlet container, which means that Tomcat s first priority is to be fully compliant with the Servlet and JSP specifications published by Sun Microsystems However, this isn’t to say that Tomcat isn’t worthy of use in production systems Indeed, many commercial installations use Tomcat An RI has the added . Apache Tomcat 6 Pro Apache Tomcat 6 Matthew Moodie Edited by Kunal Mittal 785000FM.qxd 2/28/07 11:23 AM Page i Pro Apache Tomcat 6 Copyright © 2007 by Matthew. version Effectively deploy Tomcat 6 to maximize your JSP ™ and servlet-based web applications. Matthew Moodie, author of Pro Apache Tomcat 5/5.5 Pro Apache Ant www.apress.com java.apress.com