Apache Tomcat 7 User Guide [JAVA][Apache Guide]
%5BJAVA%5D%5BApache%20Tomcat%207%20User%20Guide%5D
%5BJAVA%5D%5BApache%20Tomcat%207%20User%20Guide%5D
%5BJAVA%5D%5BApache%20Tomcat%207%20User%20Guide%5D
%5BJAVA%5D%5BApache%20Tomcat%207%20User%20Guide%5D
%5BJAVA%5D%5BApache%20Tomcat%207%20User%20Guide%5D
User Manual:
Open the PDF directly: View PDF
.
Page Count: 47
| Download | |
| Open PDF In Browser | View PDF |
Apache Tomcat 7 User Guide by The Apache Software Foundation Fultus ™ Books Apache Tomcat 7 User Guide by The Apache Software Foundation ISBN-10: 1-59682-271-6 ISBN-13: 978-1-59682-271-9 Copyright © 1999-2011, Apache Software Foundation Cover design and book layout by Fultus Corporation Fultus Corporation is not affiliated with The Apache Software Foundation Published by Fultus Corporation Publisher Web: Linbrary - Linux Library: Online Bookstore: email: www.fultus.com www.linbrary.com store.fultus.com production@fultus.com This work is licensed under the Apache License, Version 2.0. To view a copy of this license, visit http://www.apache.org/licenses/LICENSE-2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation., in the U.S. and other countries. All product names and services identified throughout this manual are trademarks or registered trademarks of their respective companies. The authors and publisher have made every effort in the preparation of this book to ensure the accuracy of the information. However, the information contained in this book is offered without warranty, either express or implied. Neither the author nor the publisher nor any dealer or distributor will be held liable for any damages caused or alleged to be caused either directly or indirectly by this book. Table of Contents Table of Contents Abstract ............................................................................................................................................... 14 Chapter 1. Introduction .................................................................................................................... 15 1.1. Introduction ............................................................................................................................. 15 1.2. Terminology............................................................................................................................. 15 1.3. Directories and Files ............................................................................................................... 15 1.4. Configuring Tomcat................................................................................................................ 16 1.5. Where to Go for Help ............................................................................................................. 16 Chapter 2. Tomcat Setup.................................................................................................................. 18 2.1. Introduction ............................................................................................................................. 18 2.2. Windows .................................................................................................................................. 18 2.3. Unix daemon ........................................................................................................................... 19 Chapter 3. First webapp ................................................................................................................... 21 3.1. Preface....................................................................................................................................... 21 3.2. Introduction ............................................................................................................................. 21 3.2.1. Overview ........................................................................................................................... 21 3.2.2. Links ................................................................................................................................... 21 3.3. Installation................................................................................................................................ 22 3.3.1. JDK ..................................................................................................................................... 22 3.3.2. Tomcat ............................................................................................................................... 22 3.3.3. Ant ...................................................................................................................................... 23 3.3.4. CVS ..................................................................................................................................... 23 3.4. Deployment ............................................................................................................................. 23 3.4.1. Background ....................................................................................................................... 23 3.4.2. Standard Directory Layout ............................................................................................. 24 3.4.3. Shared Library Files ......................................................................................................... 25 3.4.4. Shared Library Files ......................................................................................................... 25 3.4.5. Web Application Deployment Descriptor .................................................................... 25 3.4.6. Tomcat Context Descriptor ............................................................................................. 26 3.4.7. Deployment With Tomcat............................................................................................... 26 3.5. Source Organization ............................................................................................................... 27 3.5.1. Directory Structure .......................................................................................................... 27 3.5.1.1. External Dependencies ................................................................................ 29 3 Apache Tomcat 7 User Guide 3.5.2. Source Code Control ....................................................................................................... 30 3.5.3. BUILD.XML Configuration File..................................................................................... 31 3.6. Development Processes ......................................................................................................... 32 3.6.1. One-Time Setup of Ant and Tomcat for Development .............................................. 33 3.6.2. Create Project Source Code Directory ........................................................................... 33 3.6.3. Edit Source Code and Pages ........................................................................................... 35 3.6.4. Build the Web Application ............................................................................................. 35 3.6.5. Test Your Web Application ............................................................................................ 36 3.6.6. Creating a Release ............................................................................................................ 37 3.7. Sample Application ................................................................................................................ 37 Chapter 4. Tomcat Web Application Deployment ..................................................................... 38 4.1. Introduction ............................................................................................................................. 38 4.2. Installation ............................................................................................................................... 38 4.3. A word on Contexts................................................................................................................ 39 4.4. Deployment on Tomcat startup ............................................................................................ 39 4.5. Deploying on a running Tomcat server ............................................................................... 40 4.6. Deploying using the Tomcat Manager ................................................................................ 41 4.7. Deploying using the Client Deployer Package................................................................... 41 Chapter 5. Manager App HOW-TO .............................................................................................. 43 5.1. Introduction ............................................................................................................................. 43 5.2. Configuring Manager Application Access .......................................................................... 44 5.3. Supported Manager Commands .......................................................................................... 45 5.3.1. Deploy A New Application Remotely .......................................................................... 46 5.3.2. Deploy A New Application from a Local Path............................................................ 47 5.3.2.1. Deploy a version of a previously deployed webapp ...............................48 5.3.2.2. Deploy a Directory or WAR by URL..........................................................48 5.3.2.3. Deploy a Directory or War from the Host appBase .................................48 5.3.2.4. Deploy using a Context configuration ".xml" file..................................... 48 5.3.2.5. Deployment Notes ........................................................................................49 5.3.2.6. Deploy Response ...........................................................................................49 5.3.3. List Currently Deployed Applications.......................................................................... 50 5.3.4. Reload An Existing Application .................................................................................... 51 5.3.5. List OS and JVM Properties ............................................................................................ 51 5.3.6. List Available Global JNDI Resources .......................................................................... 52 5.3.7. Session Statistics ............................................................................................................... 52 5.3.8. Start an Existing Application ......................................................................................... 53 5.3.9. Stop an Existing Application .......................................................................................... 53 5.3.10. Undeploy an Existing Application .............................................................................. 54 5.3.11. Finding memory leaks................................................................................................... 55 4 Table of Contents 5.3.12. Server Status ................................................................................................................... 55 5.4. Executing Manager Commands With Ant .......................................................................... 56 5.4.1. Tasks output capture ....................................................................................................... 58 5.5. Using the JMX Proxy Servlet ................................................................................................. 61 5.5.1. What is JMX Proxy Servlet .............................................................................................. 61 5.5.2. JMX Query command ...................................................................................................... 61 5.5.3. JMX Set command ............................................................................................................ 61 Chapter 6. Realm Configuration HOW-TO ................................................................................. 63 6.1. Quick Start................................................................................................................................ 63 6.2. Overview .................................................................................................................................. 63 6.2.1. What is a Realm? .............................................................................................................. 63 6.2.2. Configuring a Realm........................................................................................................ 64 6.3. Common Features ................................................................................................................... 65 6.3.1. Digested Passwords ......................................................................................................... 65 6.3.2. Example Application ....................................................................................................... 66 6.3.3. Manager Application ....................................................................................................... 66 6.3.4. Realm Logging.................................................................................................................. 67 6.4. Standard Realm Implementations ........................................................................................ 67 6.4.1. JDBCRealm........................................................................................................................ 67 6.4.1.1. Introduction .................................................................................................. 67 6.4.1.2. Quick Start ..................................................................................................... 67 6.4.1.3. Realm Element Attributes ........................................................................... 68 6.4.1.4. Example ......................................................................................................... 68 6.4.1.5. Additional Notes .......................................................................................... 69 6.4.2. DataSourceRealm ............................................................................................................. 69 6.4.2.1. Introduction .................................................................................................. 69 6.4.2.2. Quick Start ..................................................................................................... 70 6.4.2.3. Realm Element Attributes ........................................................................... 70 6.4.2.4. Example ......................................................................................................... 70 6.4.2.5. Additional Notes .......................................................................................... 71 6.4.3. JNDIRealm ........................................................................................................................ 71 6.4.3.1. Introduction .................................................................................................. 71 6.4.3.2. Quick Start ..................................................................................................... 74 6.4.3.3. Realm Element Attributes ........................................................................... 74 6.4.3.4. Example ......................................................................................................... 75 6.4.3.5. Additional Notes .......................................................................................... 77 6.4.4. UserDatabaseRealm ......................................................................................................... 78 6.4.4.1. Introduction .................................................................................................. 78 5 Apache Tomcat 7 User Guide 6.4.4.2. Realm Element Attributes ............................................................................78 6.4.4.3. User File Format ............................................................................................78 6.4.4.4. Example ..........................................................................................................78 6.4.4.5. Additional Notes ...........................................................................................79 6.4.5. MemoryRealm .................................................................................................................. 79 6.4.5.1. Introduction ...................................................................................................79 6.4.5.2. Realm Element Attributes ............................................................................79 6.4.5.3. User File Format ............................................................................................79 6.4.5.4. Additional Notes ...........................................................................................80 6.4.6. JAASRealm ....................................................................................................................... 80 6.4.6.1. Introduction ...................................................................................................80 6.4.6.2. Quick Start......................................................................................................81 6.4.6.3. Realm Element Attributes ............................................................................82 6.4.6.4. Example ..........................................................................................................82 6.4.6.5. Additional Notes ...........................................................................................82 6.4.7. CombinedRealm............................................................................................................... 83 6.4.7.1. Introduction ...................................................................................................83 6.4.7.2. Realm Element Attributes ............................................................................83 6.4.7.3. Example ..........................................................................................................83 6.4.8. LockOutRealm.................................................................................................................. 83 6.4.8.1. Introduction ...................................................................................................83 6.4.8.2. Realm Element Attributes ............................................................................84 6.4.8.3. Example ..........................................................................................................84 Chapter 7. Security Manager HOW-TO ....................................................................................... 85 7.1. Background.............................................................................................................................. 85 7.2. Permissions .............................................................................................................................. 85 7.2.1. Standard Permissions ...................................................................................................... 86 7.2.2. Tomcat Custom Permissions .......................................................................................... 86 7.3. Configuring Tomcat With A SecurityManager .................................................................. 87 7.3.1. Policy File Format ............................................................................................................ 87 7.3.2. The Default Policy File .................................................................................................... 87 7.3.3. Starting Tomcat With A SecurityManager ................................................................... 92 7.4. Configuring Package Protection in Tomcat ........................................................................ 92 7.4.1. The Default Properties File ............................................................................................. 92 7.5. Troubleshooting ...................................................................................................................... 93 Chapter 8. JNDI Resources HOW-TO .......................................................................................... 94 8.1. Introduction ............................................................................................................................. 94 6 Table of Contents 8.2. web.xml configuration ........................................................................................................... 94 8.3. context.xml configuration ...................................................................................................... 95 8.4. Global configuration ............................................................................................................... 96 8.5. Using resources ....................................................................................................................... 96 8.6. Tomcat Standard Resource Factories ................................................................................... 96 8.6.1. Generic JavaBean Resources ........................................................................................... 97 8.6.1.1. Introduction .................................................................................................. 97 8.6.1.2. Create Your JavaBean Class ........................................................................ 97 8.6.1.3. Declare Your Resource Requirements ....................................................... 98 8.6.1.4. Code Your Application's Use Of This Resource ...................................... 98 8.6.1.5. Configure Tomcat's Resource Factory....................................................... 98 8.6.2. UserDatabase Resources ................................................................................................. 99 8.6.2.1. Introduction .................................................................................................. 99 8.6.2.2. Create/edit the XML file ............................................................................. 99 8.6.2.3. Declare Your Resource ................................................................................ 99 8.6.2.4. Configure the Realm .................................................................................. 100 8.6.3. JavaMail Sessions ........................................................................................................... 100 8.6.3.1. Introduction ................................................................................................ 100 8.6.3.2. Declare Your Resource Requirements ..................................................... 100 8.6.3.3. Code Your Application's Use Of This Resource .................................... 101 8.6.3.4. Configure Tomcat's Resource Factory..................................................... 101 8.6.3.5. Install the JavaMail libraries ..................................................................... 102 8.6.3.6. Restart Tomcat ............................................................................................ 102 8.6.3.7. Example Application ................................................................................. 102 8.6.4. JDBC Data Sources ......................................................................................................... 102 8.6.4.1. Introduction ................................................................................................ 102 8.6.4.2. Install Your JDBC Driver ........................................................................... 103 8.6.4.3. Declare Your Resource Requirements ..................................................... 103 8.6.4.4. Code Your Application's Use Of This Resource .................................... 104 8.6.4.5. Configure Tomcat's Resource Factory..................................................... 104 8.7. Adding Custom Resource Factories ................................................................................... 107 8.7.1. Write A Resource Factory Class ................................................................................... 107 8.7.2. Declare Your Resource Requirements......................................................................... 109 8.7.3. Code Your Application's Use Of This Resource ........................................................ 109 8.7.4. Configure Tomcat's Resource Factory......................................................................... 109 Chapter 9. JNDI Datasource HOW-TO ....................................................................................... 111 9.1. Introduction ........................................................................................................................... 111 7 Apache Tomcat 7 User Guide 9.2. Database Connection Pool (DBCP) Configurations ......................................................... 111 9.2.1. Installation ...................................................................................................................... 112 9.2.2. Preventing dB connection pool leaks .......................................................................... 112 9.2.3. MySQL DBCP Example ................................................................................................ 113 9.2.3.1. Introduction .................................................................................................113 9.2.3.2. MySQL configuration .................................................................................113 9.2.3.3. Context configuration.................................................................................114 9.2.3.4. web.xml configuration ...............................................................................114 9.2.3.5. Test code .......................................................................................................115 9.2.4. Oracle 8i, 9i & 10g .......................................................................................................... 116 9.2.4.1. Introduction .................................................................................................116 9.2.4.2. Context configuration.................................................................................116 9.2.4.3. web.xml configuration ...............................................................................116 9.2.4.4. Code example ..............................................................................................117 9.2.5. PostgreSQL ..................................................................................................................... 117 9.2.5.1. Introduction .................................................................................................117 9.2.5.2. Required files ...............................................................................................117 9.2.5.3. Resource configuration ..............................................................................117 9.2.5.4. web.xml configuration ...............................................................................118 9.2.5.5. Accessing the datasource ...........................................................................118 9.3. Non-DBCP Solutions ............................................................................................................ 118 9.4. Oracle 8i with OCI client ..................................................................................................... 118 9.4.1. Introduction .................................................................................................................... 118 9.4.2. Putting it all together ..................................................................................................... 119 9.5. Common Problems ............................................................................................................... 119 9.5.1. Intermittent dB Connection Failures ........................................................................... 120 9.5.2. Random Connection Closed Exceptions..................................................................... 120 9.5.3. Context versus GlobalNamingResources ................................................................... 121 9.5.4. JNDI Resource Naming and Realm Interaction ........................................................ 121 Chapter 10. Class Loader HOW-TO ............................................................................................ 122 10.1. Overview .............................................................................................................................. 122 10.2. Class Loader Definitions .................................................................................................... 122 10.3. XML Parsers and Java ........................................................................................................ 125 10.4. Running under a security manager.................................................................................. 125 Chapter 11. Jasper 2 JSP Engine How To ................................................................................... 126 11.1. Introduction ......................................................................................................................... 126 11.2. Configuration ...................................................................................................................... 126 11.3. Known issues....................................................................................................................... 129 8 Table of Contents 11.4. Production Configuration .................................................................................................. 129 11.5. Web Application Compilation .......................................................................................... 129 Chapter 12. SSL Configuration HOW-TO.................................................................................. 132 12.1. Quick Start............................................................................................................................ 132 12.2. Introduction to SSL ............................................................................................................. 132 12.3. SSL and Tomcat ................................................................................................................... 133 12.4. Certificates............................................................................................................................ 133 12.5. General Tips on Running SSL ........................................................................................... 134 12.6. Configuration....................................................................................................................... 135 12.6.1. Prepare the Certificate Keystore ................................................................................ 135 12.6.2. Edit the Tomcat Configuration File ........................................................................... 136 12.7. Installing a Certificate from a Certificate Authority ...................................................... 139 12.7.1. Create a local Certificate Signing Request (CSR) ..................................................... 139 12.7.2. Importing the Certificate ............................................................................................. 139 12.8. Troubleshooting .................................................................................................................. 140 12.9. Using the SSL for session tracking in your application ................................................. 141 12.10. Miscellaneous Tips and Bits ............................................................................................ 142 Chapter 13. SSI How To................................................................................................................. 143 13.1. Introduction ......................................................................................................................... 143 13.2. Installation............................................................................................................................ 143 13.3. Servlet Configuration ......................................................................................................... 144 13.4. Filter Configuration ............................................................................................................ 144 13.5. Directives.............................................................................................................................. 145 13.6. Variables ............................................................................................................................... 146 Chapter 14. CGI How To ............................................................................................................... 148 14.1. Introduction ......................................................................................................................... 148 14.2. Installation............................................................................................................................ 148 14.3. Configuration....................................................................................................................... 148 Chapter 15. Proxy Support HOW-TO.......................................................................................... 150 15.1. Introduction ......................................................................................................................... 150 15.2. Apache 1.3 Proxy Support ................................................................................................. 150 15.3. Apache 2.0 Proxy Support ................................................................................................. 152 Chapter 16. MBean Descriptor How To ...................................................................................... 153 16.1. Introduction ......................................................................................................................... 153 16.2. Adding MBean descriptions .............................................................................................. 153 Chapter 17. Default Servlet Reference ........................................................................................ 154 17.1. What is the DefaultServlet ................................................................................................. 154 17.2. Where is it declared?........................................................................................................... 154 17.3. What can I change? ............................................................................................................. 154 9 Apache Tomcat 7 User Guide 17.4. How do I customize directory listings? ........................................................................... 156 17.5. How do I secure directory listings?.................................................................................. 158 Chapter 18. Clustering/Session Replication HOW-TO ........................................................... 159 18.1. For the impatient................................................................................................................. 159 18.2. Cluster Basics....................................................................................................................... 161 18.3. Overview .............................................................................................................................. 161 18.4. Cluster Information ............................................................................................................ 162 18.5. Bind session after crash to failover node ......................................................................... 163 18.6. Configuration Example ...................................................................................................... 164 18.7. Cluster Architecture ........................................................................................................... 169 18.8. How it Works ...................................................................................................................... 170 18.9. Monitoring your Cluster with JMX .................................................................................. 172 18.10. FAQ ..................................................................................................................................... 173 Chapter 19. Load Balancer HOW-TO .......................................................................................... 174 19.1. Using the JK 1.2.x native connector .................................................................................. 174 19.2. Using Apache HTTP Server 2.x with mod_proxy .......................................................... 174 Chapter 20. Connectors How To .................................................................................................. 175 20.1. Introduction ......................................................................................................................... 175 20.2. HTTP..................................................................................................................................... 175 20.3. AJP ........................................................................................................................................ 175 Chapter 21. Monitoring and Managing Tomcat........................................................................ 176 21.1. Introduction ......................................................................................................................... 176 21.2. Enabling JMX Remote ........................................................................................................ 176 21.3. Manage Tomcat with JMX remote Ant Tasks ................................................................. 177 21.4. JMXAccessorOpenTask - JMX open connection task .................................................... 179 21.5. JMXAccessorGetTask: get attribute value Ant task ....................................................... 180 21.6. JMXAccessorSetTask: set attribute value Ant task ........................................................ 181 21.7. JMXAccessorInvokeTask: invoke MBean operation Ant task ...................................... 181 21.8. JMXAccessorQueryTask: query MBean Ant task........................................................... 183 21.9. JMXAccessorCreateTask: remote create MBean Ant task ............................................. 184 21.10. JMXAccessorUnregisterTask: remote unregister MBean Ant task ............................ 185 21.11. JMXAccessorCondition: express condition ................................................................... 185 21.12. JMXAccessorEqualsCondition: equals MBean Ant condition .................................... 186 Chapter 22. Logging in Tomcat .................................................................................................... 188 22.1. Introduction ......................................................................................................................... 188 22.1.1. Java logging API — java.util.logging ........................................................................ 189 22.1.2. Servlets logging API .................................................................................................... 189 22.1.3. Console .......................................................................................................................... 189 22.1.4. Access logging .............................................................................................................. 190 10 Table of Contents 22.2. Using java.util.logging (default) ....................................................................................... 190 22.2.1. Documentation references .......................................................................................... 193 22.2.2. Considerations for productive usage ........................................................................ 193 22.3. Using Log4j .......................................................................................................................... 193 Chapter 23. Apache Portable Runtime (APR) based Native library for Tomcat ................. 197 23.1. Introduction ......................................................................................................................... 197 23.2. Installation............................................................................................................................ 197 23.2.1. Windows ....................................................................................................................... 197 23.2.2. Linux .............................................................................................................................. 198 23.3. APR Components................................................................................................................ 198 23.4. APR Lifecycle Listener Configuration ............................................................................. 199 23.4.1. AprLifecycleListener.................................................................................................... 199 23.5. APR Connectors Configuration ........................................................................................ 199 23.5.1. HTTP/HTTPS ............................................................................................................... 199 23.5.2. AJP .................................................................................................................................. 199 Chapter 24. Virtual Hosting and Tomcat .................................................................................... 200 24.1. Assumptions ........................................................................................................................ 200 24.2. server.xml ............................................................................................................................. 200 24.3. Webapps Directory ............................................................................................................. 200 24.4. Configuring Your Contexts ............................................................................................... 201 24.4.1. General........................................................................................................................... 201 24.4.2. context.xml - approach #1........................................................................................... 201 24.4.3. context.xml - approach #2........................................................................................... 201 24.4.4. Further Information ..................................................................................................... 201 Chapter 25. Advanced IO and Tomcat ........................................................................................ 202 25.1. Introduction ......................................................................................................................... 202 25.2. Comet support ..................................................................................................................... 202 25.2.1. CometEvent................................................................................................................... 202 25.2.2. CometFilter.................................................................................................................... 204 25.2.3. Example code ................................................................................................................ 204 25.2.4. Comet timeouts ............................................................................................................ 207 25.3. Asynchronous writes .......................................................................................................... 207 Chapter 26. Additional Components........................................................................................... 208 26.1. Introduction ......................................................................................................................... 208 26.2. Downloading ....................................................................................................................... 208 26.3. Building ................................................................................................................................ 208 26.4. Components list................................................................................................................... 208 26.4.1. Full commons-logging implementation.................................................................... 208 26.4.2. Web Services support (JSR 109) ................................................................................. 209 11 Apache Tomcat 7 User Guide 26.4.3. JMX Remote Lifecycle Listener .................................................................................. 209 Chapter 27. Apache Tomcat - Using Tomcat libraries with Maven ...................................... 210 27.1. Using Tomcat libraries With Maven ................................................................................ 210 27.1.1. Tomcat Snapshots ........................................................................................................ 210 27.1.2. Tomcat Releases ........................................................................................................... 210 Chapter 28. Security Considerations ........................................................................................... 211 28.1. Introduction ......................................................................................................................... 211 28.2. Non-Tomcat settings .......................................................................................................... 211 28.3. Default web applications ................................................................................................... 212 28.4. Security manager ................................................................................................................ 212 28.5. server.xml............................................................................................................................. 212 28.5.1. General .......................................................................................................................... 212 28.5.2. Server ............................................................................................................................. 213 28.5.3. Listeners ........................................................................................................................ 213 28.5.4. Connectors .................................................................................................................... 213 28.5.5. Host ................................................................................................................................ 214 28.5.6. Context .......................................................................................................................... 214 28.5.7. Valves ............................................................................................................................ 215 28.5.8. Realms ........................................................................................................................... 215 28.5.9. Manager......................................................................................................................... 216 28.6. System Properties ............................................................................................................... 216 28.7. CATALINA_BASE/conf/web.xml .................................................................................. 216 28.8. General ................................................................................................................................. 217 Chapter 29. Windows service HOW-TO .................................................................................... 218 29.1. Tomcat7 service application .............................................................................................. 218 29.2. Tomcat7w monitor application......................................................................................... 218 29.3. Command line arguments ................................................................................................. 218 29.4. Command line parameters ................................................................................................ 219 29.5. Installing services................................................................................................................ 221 29.6. Updating services ............................................................................................................... 221 29.7. Removing services .............................................................................................................. 221 29.8. Debugging services............................................................................................................. 221 Chapter 30. Windows Authentication How-To......................................................................... 222 30.1. Overview .............................................................................................................................. 222 30.2. Built-in Tomcat support ..................................................................................................... 222 30.2.1. Domain Controller ....................................................................................................... 223 30.2.2. Tomcat instance............................................................................................................ 223 30.2.3. Web application ........................................................................................................... 225 30.2.4. Client.............................................................................................................................. 225 12 Table of Contents 30.2.5. References...................................................................................................................... 225 30.3. Third party libraries ............................................................................................................ 226 30.3.1. Waffle ............................................................................................................................. 226 30.3.2. Spring Security - Kerberos Extension ........................................................................ 226 30.3.3. SPNEGO project at SourceForge ................................................................................ 226 30.4. Reverse proxies.................................................................................................................... 227 30.4.1. Microsoft IIS .................................................................................................................. 227 30.4.2. Apache httpd ................................................................................................................ 227 Chapter 31. The Tomcat JDBC Connection Pool....................................................................... 228 31.1. Introduction ......................................................................................................................... 228 31.2. How to use ........................................................................................................................... 230 31.2.1. Additional features ...................................................................................................... 230 31.2.2. Inside the Apache Tomcat Container ........................................................................ 231 31.2.3. Standalone ..................................................................................................................... 231 31.2.4. JMX ................................................................................................................................. 231 31.3. Attributes.............................................................................................................................. 231 31.3.1. JNDI Factory and Type................................................................................................ 231 31.3.2. Common Attributes ..................................................................................................... 232 31.3.3. Tomcat JDBC Enhanced Attributes ........................................................................... 234 31.4. Advanced usage .................................................................................................................. 237 31.4.1. JDBC interceptors ......................................................................................................... 237 31.4.2. JDBC interceptors ......................................................................................................... 237 31.4.3. org.apache.tomcat.jdbc.pool.JdbcInterceptor........................................................... 237 31.4.4. org.apache.tomcat.jdbc.pool.interceptor.ConnectionState ..................................... 238 31.4.5. org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer ................................ 238 31.4.6. org.apache.tomcat.jdbc.pool.interceptor.StatementDecoratorInterceptor ........... 238 31.4.7. org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport.................................. 238 31.4.8. org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx ........................... 238 31.4.9. org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer......................... 239 31.5. Code Example...................................................................................................................... 239 31.5.1. Plain Ol' Java ................................................................................................................. 239 31.5.2. As a Resource ................................................................................................................ 240 31.5.3. Asynchronous Connection Retrieval......................................................................... 241 31.5.4. Interceptors ................................................................................................................... 241 31.5.5. Getting the actual JDBC connection .......................................................................... 243 31.6. Building ................................................................................................................................ 243 31.6.1. Building from source ................................................................................................... 244 Linbrary™ Advertising Club (LAC)............................................................................................ 245 Your Advertising Here ................................................................................................................ 253 13 Apache Tomcat 7 User Guide Abstract Welcome to the Apache Tomcat 7.0 User Guide! Apache Tomcat version 7.0 implements the Servlet 3.0 and JavaServer Pages 2.2 specifications from the Java Community Process 1, and includes many additional features that make it a useful platform for developing and deploying web applications and web services. 1 http://www.jcp.org/ 14 Chapter 1. Introduction Chapter 1. Introduction 1.1. Introduction For administrators and web developers alike, there are some important bits of information you should familiarize yourself with before starting out. This document serves as a brief introduction to some of the concepts and terminology behind the Tomcat container. As well, where to go when you need help. 1.2. Terminology In the course of reading these documents, you'll run across a number of terms; some specific to Tomcat, and others defined by the Servlet 1 or JSP 2 specifications. • Context - In a nutshell, a Context is a web application. • Term2 - This is it. • Term3 - This is it! 1.3. Directories and Files Throughout the docs, you'll notice there are numerous references to $CATALINA_HOME. This represents the root of your Tomcat installation. When we say, "This information can be found in your $CATALINA_HOME/README.txt file" we mean to look at the README.txt file at the root of your Tomcat install. Optionally, Tomcat may be configured for multiple instances by defining $CATALINA_BASE for each instance. If multiple instances are not configured, $CATALINA_BASE is the same as $CATALINA_HOME. These are some of the key tomcat directories: • 1 2 /bin - Startup, shutdown, and other scripts. The *.sh files (for Unix systems) are functional duplicates of the *.bat files (for Windows systems). Since the Win32 command-line lacks certain functionality, there are some additional files in here. http://java.sun.com/products/servlet/ http://java.sun.com/products/jsp/ 15 Apache Tomcat 7 User Guide • /conf - Configuration files and related DTDs. The most important file in here is server.xml. It is the main configuration file for the container. • /logs - Log files are here by default. • /webapps - This is where your webapps go. 1.4. Configuring Tomcat This section will acquaint you with the basic information used during the configuration of the container. All of the information in the configuration files is read at startup, meaning that any change to the files necessitates a restart of the container. 1.5. Where to Go for Help While we've done our best to ensure that these documents are clearly written and easy to understand, we may have missed something. Provided below are various web sites and mailing lists in case you get stuck. As Tomcat 7 is a new release of Tomcat, keep in mind that some of the issues and solutions vary between the major versions of Tomcat (6.x versus 7.x). As you search around the web, there will be some documentation that is not relevant to Tomcat 7, but 6.x, 5.x or earlier versions. Doing 3.x or 4.x things to 7 will probably not work in most cases as the server.xml files are very different. • Current document - most documents will list potential hangups. Be sure to fully read the relevant documentation as it will save you much time and effort. There's nothing like scouring the web only to find out that the answer was right in front of you all along! • Tomcat FAQ 3 • Tomcat WIKI 4 • Tomcat FAQ at jGuru 5 • Tomcat mailing list archives - numerous sites archive the Tomcat mailing lists. Since the links change over time, clicking here will search Google 6. • The TOMCAT-USER mailing list, which you can subscribe to here 7. If you don't get a reply, then there's a good chance that your question was probably answered in the http://wiki.apache.org/tomcat/FAQ http://wiki.apache.org/tomcat/ 5 http://www.jguru.com/faq/home.jsp?topic=Tomcat 6 http://www.google.com/search?q=tomcat+mailing+list+archives 3 4 16 Chapter 1. Introduction list archives or one of the FAQs. Although questions about web application development in general are sometimes asked and answered, please focus your questions on Tomcat-specific issues. • The TOMCAT-DEV mailing list, which you can subscribe to here 8. This list is reserved for discussions about the development of Tomcat itself. Questions about Tomcat configuration, and the problems you run into while developing and running applications, will normally be more appropriate on the TOMCAT-USER list instead. And, if you think something should be in the docs, by all means let us know on the TOMCAT-DEV list. 7 8 http://tomcat.apache.org/lists.html http://tomcat.apache.org/lists.html 17 Apache Tomcat 7 User Guide Chapter 2. Tomcat Setup 2.1. Introduction This document introduces several ways to set up Tomcat for running on different platforms. Please note that some advanced setup issues are not covered here: the full distribution (ZIP file or tarball) includes a file called RUNNING.txt which discusses these issues. We encourage you to refer to it if the information below does not answer some of your questions. 2.2. Windows Installing Tomcat on Windows can be done easily using the Windows installer. Its interface and functionality is similar to other wizard based installers, with only a few items of interest. • Installation as a service: Tomcat will be installed as a Windows NT/2k/XP service no matter what setting is selected. Using the checkbox on the component page sets the service as "auto" startup, so that Tomcat is automatically started when Windows starts. For optimal security, the service should be run as a separate user, with reduced permissions (see the Windows Services administration tool and its documentation). • Java location: The installer will use the registry or the JAVA_HOME environment variable to determine the base path of a Java SE 6 JRE. • Tray icon: When Tomcat is run as a service, there will not be any tray icon present when Tomcat is running. Note that when choosing to run Tomcat at the end of installation, the tray icon will be used even if Tomcat was installed as a service. • Refer to the Windows service HOW-TO (see Chapter 29, page 218) for information on how to manage Tomcat as Windows NT service. The installer will create shortcuts allowing starting and configuring Tomcat. It is important to note that the Tomcat administration web application can only be used when Tomcat is running. 18 Chapter 2. Tomcat Setup 2.3. Unix daemon Tomcat can be run as a daemon using the jsvc tool from the commons-daemon project. Source tarballs for jsvc are included with the Tomcat binaries, and need to be compiled. Building jsvc requires a C ANSI compiler (such as GCC), GNU Autoconf, and a JDK. Before running the script, the JAVA_HOME environment variable should be set to the base path of the JDK. Alternately, when calling the ./configure script, the path of the JDK may be specified using the --with-java parameter, such as ./configure --with-java=/usr/java. Using the following commands should result in a compiled jsvc binary, located in the $CATALINA_HOME/bin folder. This assumes that GNU TAR is used, and that CATALINA_HOME is an environment variable pointing to the base path of the Tomcat installation. Please note that you should use the GNU make (gmake) instead of the native BSD make on FreeBSD systems. cd $CATALINA_HOME/bin tar xvfz commons-daemon-native.tar.gz cd commons-daemon-1.0.x-native-src/unix ./configure make cp jsvc ../.. cd ../.. Tomcat can then be run as a daemon using the following commands. cd $CATALINA_HOME ./bin/jsvc -cp ./bin/bootstrap.jar:./bin/tomcat-juli.jar \ -outfile ./logs/catalina.out -errfile ./logs/catalina.err \ org.apache.catalina.startup.Bootstrap You may also need to specify -jvm server if the JVM defaults to using a server VM rather than a client VM. This has been observed on OSX. jsvc has other useful parameters, such as -user which causes it to switch to another user after the daemon initialization is complete. This allows, for example, running Tomcat as a non privileged user while still being able to use privileged ports. Note that if you use this option and start Tomcat as root, you'll need to disable the org.apache.catalina.security.SecurityListener check that prevents Tomcat starting when running as root. jsvc --help will return the full jsvc usage information. In particular, the -debug option is useful to debug issues running jsvc. The file $CATALINA_HOME/bin/commons-daemon-1.0.x-nativesrc/unix/native/Tomcat5.sh can be used as a template for starting Tomcat automatically at boot time from /etc/init.d. The file is currently setup for running Tomcat 5.5.x, so it will be necessary to edit it a little. 19 Apache Tomcat 7 User Guide Note that the Commons-Daemon JAR file must be on your runtime classpath to run Tomcat in this manner. The Commons-Daemon JAR file is in the Class-Path entry of the bootstrap.jar manifest, but if you get a ClassNotFoundException or a NoClassDefFoundError for a Commons-Daemon class, add the Commons-Daemon JAR to the -cp argument when launching jsvc. 20 Chapter 3. First webapp Chapter 3. First webapp 3.1. Preface This manual includes contributions from many members of the Tomcat Project developer community. The following authors have provided significant content: • Craig R. McClanahan (craigmcc@apache.org) 3.2. Introduction 3.2.1. Overview Congratulations! You've decided to (or been told to) learn how to build web applications using servlets and JSP pages, and picked the Tomcat server to use for your learning and development. But now what do you do? This manual is a primer covering the basic steps of using Tomcat to set up a development environment, organize your source code, and then build and test your application. It does not discuss architectures or recommended coding practices for web application development, or provide in depth instructions on operating the development tools that are discussed. References to sources of additional information are included in the following subsections. The discussion in this manual is aimed at developers who will be using a text editor along with command line tools to develop and debug their applications. As such, the recommendations are fairly generic -- but you should easily be able to apply them in either a Windows-based or Unix-based development environment. If you are utilizing an Interactive Development Environment (IDE) tool, you will need to adapt the advice given here to the details of your particular environment. 3.2.2. Links The following links provide access to selected sources of online information, documentation, and software that is useful in developing web applications with Tomcat. 21 Apache Tomcat 7 User Guide • http://java.sun.com/products/jsp/ - JavaServer Pages (JSP) Specification, Version 2.0. Describes the programming environment provided by standard implementations of the JavaServer Pages (JSP) technology. In conjunction with the Servlet API Specification (see below), this document describes what a portable API page is allowed to contain. Specific information on scripting (Chapter 6), tag extensions (Chapter 7), and packaging JSP pages (Appendix A) is useful. The Javadoc API Documentation is included in the specification, and with the Tomcat download. • http://java.sun.com/products/servlet/download.html - Servlet API Specification, Version 3.0. Describes the programming environment that must be provided by all servlet containers conforming to this specification. In particular, you will need this document to understand the web application directory structure and deployment file (Chapter 9), methods of mapping request URIs to servlets (Chapter 11), container managed security (Chapter 12), and the syntax of the web.xml Web Application Deployment Descriptor (Chapter 13). The Javadoc API Documentation is included in the specification, and with the Tomcat download. • http://java.sun.com/j2ee/blueprints/ - Sun BluePrints (tm) Design Guidelines for J2EE. Comprehensive advice and examples on application design for the Java2 Enterprise Edition (J2EE) platform, which includes servlets and JSP pages. The chapters on servlet and JSP design are useful even when your application does not require other J2EE platform components. • TODO -- Add more entries here! 3.3. Installation In order to use Tomcat for developing web applications, you must first install it (and the software it depends on). The required steps are outlined in the following subsections. 3.3.1. JDK Tomcat 7.0 was designed to run on Java SE 6. Compatible JDKs for many platforms (or links to where they can be found) are available at http://www.oracle.com/technetwork/java/javase/downloads/index.html. 3.3.2. Tomcat Binary downloads of the Tomcat server are available from http://tomcat.apache.org/. This manual assumes you are using the most recent release of Tomcat 7. Detailed instructions for downloading and installing Tomcat are available here (see Chapter 2, Tomcat Setup page 18). In the remainder of this manual, example shell scripts assume that you have set an environment variable CATALINA_HOME that contains the pathname to the directory in which 22 Chapter 3. First webapp Tomcat has been installed. Optionally, if Tomcat has been configured for multiple instances, each instance will have its own CATALINA_BASE configured. 3.3.3. Ant Binary downloads of the Ant build tool are available from http://ant.apache.org/. This manual assumes you are using Ant 1.8 or later. The instructions may also be compatible with other versions, but this has not been tested. Download and install Ant. Then, add the bin directory of the Ant distribution to your PATH environment variable, following the standard practices for your operating system platform. Once you have done this, you will be able to execute the ant shell command directly. 3.3.4. CVS Besides the required tools described above, you are strongly encouraged to download and install a source code control system, such as the Concurrent Version System (CVS), to maintain historical versions of the source files that make up your web application. Besides the server, you will also need appropriate client tools to check out source code files, and check in modified versions. Detailed instructions for installing and using source code control applications is beyond the scope of this manual. However, CVS server and client tools for many platforms (along with documentation) can be downloaded from http://www.cvshome.org/. 3.4. Deployment 3.4.1. Background Before describing how to organize your source code directories, it is useful to examine the runtime organization of a web application. Prior to the Servlet API Specification, version 2.2, there was little consistency between server platforms. However, servers that conform to the 2.2 (or later) specification are required to accept a Web Application Archive in a standard format, which is discussed further below. A web application is defined as a hierarchy of directories and files in a standard layout. Such a hierarchy can be accessed in its "unpacked" form, where each directory and file exists in the filesystem separately, or in a "packed" form known as a Web ARchive, or WAR file. The former format is more useful during development, while the latter is used when you distribute your application to be installed. The top-level directory of your web application hierarchy is also the document root of your application. Here, you will place the HTML files and JSP pages that comprise your application's user interface. When the system administrator deploys your application into a 23 Apache Tomcat 7 User Guide particular server, he or she assigns a context path to your application (a later section of this manual describes deployment on Tomcat). Thus, if the system administrator assigns your application to the context path /catalog, then a request URI referring to /catalog/index.html will retrieve the index.html file from your document root. 3.4.2. Standard Directory Layout To facilitate creation of a Web Application Archive file in the required format, it is convenient to arrange the "executable" files of your web application (that is, the files that Tomcat actually uses when executing your app) in the same organization as required by the WAR format itself. To do this, you will end up with the following contents in your application's "document root" directory: • *.html, *.jsp, etc. - The HTML and JSP pages, along with other files that must be visible to the client browser (such as JavaScript, stylesheet files, and images) for your application. In larger applications you may choose to divide these files into a subdirectory hierarchy, but for smaller apps, it is generally much simpler to maintain only a single directory for these files. • /WEB-INF/web.xml - The Web Application Deployment Descriptor for your application. This is an XML file describing the servlets and other components that make up your application, along with any initialization parameters and container-managed security constraints that you want the server to enforce for you. This file is discussed in more detail in the following subsection. • /WEB-INF/classes/ - This directory contains any Java class files (and associated resources) required for your application, including both servlet and non-servlet classes, that are not combined into JAR files. If your classes are organized into Java packages, you must reflect this in the directory hierarchy under /WEBINF/classes/. For example, a Java class named com.mycompany.mypackage.MyServlet would need to be stored in a file named /WEB-INF/classes/com/mycompany/mypackage/MyServlet.class. • /WEB-INF/lib/ - This directory contains JAR files that contain Java class files (and associated resources) required for your application, such as third party class libraries or JDBC drivers. When you install an application into Tomcat (or any other 2.2/2.3-compatible server), the classes in the WEB-INF/classes/ directory, as well as all classes in JAR files found in the WEB-INF/lib/ directory, are made visible to other classes within your particular web application. Thus, if you include all of the required library classes in one of these places (be sure to check licenses for redistribution rights for any third party libraries you utilize), you will simplify the installation of your web application -- no adjustment to the system class path (or installation of global library files in your server) will be necessary. 24 Chapter 3. First webapp Much of this information was extracted from Chapter 9 of the Servlet API Specification, version 2.3, which you should consult for more details. 3.4.3. Shared Library Files Like most servlet containers, Tomcat also supports mechanisms to install library JAR files (or unpacked classes) once, and make them visible to all installed web applications (without having to be included inside the web application itself. The details of how Tomcat locates and shares such classes are described in the Class Loader HOW-TO (see Chapter 10, page 122) documentation. The location commonly used within a Tomcat installation for shared code is $CATALINA_HOME/lib. JAR files placed here are visible both to web applications and internal Tomcat code. This is a good place to put JDBC drivers that are required for both your application or internal Tomcat use (such as for a JDBCRealm). Out of the box, a standard Tomcat installation includes a variety of pre-installed shared library files, including: • • The Servlet 3.0 and JSP 2.1 APIs that are fundamental to writing servlets and JavaServer Pages. An XML Parser compliant with the JAXP (version 1.2) APIs, so your application can perform DOM-based or SAX-based processing of XML documents. 3.4.4. Shared Library Files Like most servlet containers, Tomcat also supports mechanisms to install library JAR files (or unpacked classes) once, and make them visible to all installed web applications (without having to be included inside the web application itself. The details of how Tomcat locates and shares such classes are described in the Class Loader HOW-TO (see Chapter 10, page 122) documentation. The location commonly used within a Tomcat installation for shared code is $CATALINA_HOME/lib. JAR files placed here are visible both to web applications and internal Tomcat code. This is a good place to put JDBC drivers that are required for both your application or internal Tomcat use (such as for a JDBCRealm). Out of the box, a standard Tomcat installation includes a variety of pre-installed shared library files, including: • • The Servlet 3.0 and JSP 2.1 APIs that are fundamental to writing servlets and JavaServer Pages. An XML Parser compliant with the JAXP (version 1.2) APIs, so your application can perform DOM-based or SAX-based processing of XML documents. 3.4.5. Web Application Deployment Descriptor As mentioned above, the /WEB-INF/web.xml file contains the Web Application Deployment Descriptor for your application. As the filename extension implies, this file is an XML 25 Apache Tomcat 7 User Guide document, and defines everything about your application that a server needs to know (except the context path, which is assigned by the system administrator when the application is deployed). The complete syntax and semantics for the deployment descriptor is defined in Chapter 13 of the Servlet API Specification, version 2.3. Over time, it is expected that development tools will be provided that create and edit the deployment descriptor for you. In the meantime, to provide a starting point, a basic web.xml file 1 is provided. This file includes comments that describe the purpose of each included element. NOTE - The Servlet Specification includes a Document Type Descriptor (DTD) for the web application deployment descriptor, and Tomcat enforces the rules defined here when processing your application's /WEB-INF/web.xml file. In particular, you must enter your descriptor elements (such as, , and in the order defined by the DTD (see Section 13.3). 3.4.6. Tomcat Context Descriptor A /META-INF/context.xml file can be used to define Tomcat specific configuration options, such as loggers, data sources, session manager configuration and more. This XML file must contain one Context element, which will be considered as if it was the child of the Host element corresponding to the Host to which the The Tomcat configuration documentation contains information on the Context element. 3.4.7. Deployment With Tomcat The description below uses the variable name $CATALINA_BASE to refer the base directory against which most relative paths are resolved. If you have not configured Tomcat for multiple instances by setting a CATALINA_BASE directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, the directory into which you have installed Tomcat. In order to be executed, a web application must be deployed on a servlet container. This is true even during development. We will describe using Tomcat to provide the execution environment. A web application can be deployed in Tomcat by one of the following approaches: • Copy unpacked directory hierarchy into a subdirectory in directory $CATALINA_BASE/webapps/. Tomcat will assign a context path to your application based on the subdirectory name you choose. We will use this technique in the build.xml file that we construct, because it is the quickest and easiest approach during development. Be sure to restart Tomcat after installing or updating your application. 1 http://tomcat.apache.org/tomcat-7.0-doc/appdev/web.xml.txt 26 Chapter 3. First webapp • Copy the web application archive file into directory $CATALINA_BASE/webapps/. When Tomcat is started, it will automatically expand the web application archive file into its unpacked form, and execute the application that way. This approach would typically be used to install an additional application, provided by a third party vendor or by your internal development staff, into an existing Tomcat installation. NOTE - If you use this approach, and wish to update your application later, you must both replace the web application archive file AND delete the expanded directory that Tomcat created, and then restart Tomcat, in order to reflect your changes. • Use the Tomcat "Manager" web application to deploy and undeploy web applications. Tomcat includes a web application, deployed by default on context path /manager, that allows you to deploy and undeploy applications on a running Tomcat server without restarting it. See the administrator documentation (TODO: hyperlink) for more information on using the Manager web application. • Use "Manager" Ant Tasks In Your Build Script. Tomcat includes a set of custom task definitions for the Ant build tool that allow you to automate the execution of commands to the "Manager" web application. These tasks are used in the Tomcat deployer. • Use the Tomcat Deployer. Tomcat includes a packaged tool bundling the Ant tasks, and can be used to automatically precompile JSPs which are part of the web application before deployment to the server. Deploying your app on other servlet containers will be specific to each container, but all containers compatible with the Servlet API Specification (version 2.2 or later) are required to accept a web application archive file. Note that other containers are NOT required to accept an unpacked directory structure (as Tomcat does), or to provide mechanisms for shared library files, but these features are commonly available. 3.5. Source Organization 3.5.1. Directory Structure The description below uses the variable name $CATALINA_BASE to refer the base directory against which most relative paths are resolved. If you have not configured Tomcat for multiple instances by setting a CATALINA_BASE directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, the directory into which you have installed Tomcat. A key recommendation of this manual is to separate the directory hierarchy containing your source code (described in this section) from the directory hierarchy containing your deployable application (described in the preceding section). Maintaining this separation has the following advantages: 27 Apache Tomcat 7 User Guide • The contents of the source directories can be more easily administered, moved, and backed up if the "executable" version of the application is not intermixed. • Source code control is easier to manage on directories that contain only source files. • The files that make up an installable distribution of your application are much easier to select when the deployment hierarchy is separate. As we will see, the ant development tool makes the creation and processing of such directory hierarchies nearly painless. The actual directory and file hierarchy used to contain the source code of an application can be pretty much anything you like. However, the following organization has proven to be quite generally applicable, and is expected by the example build.xml configuration file that is discussed below. All of these components exist under a top level project source directory for your application: • docs/ - Documentation for your application, in whatever format your development team is using. • src/ - Java source files that generate the servlets, beans, and other Java classes that are unique to your application. If your source code is organized in packages (highly recommended), the package hierarchy should be reflected as a directory structure underneath this directory. • web/ - The static content of your web site (HTML pages, JSP pages, JavaScript files, CSS stylesheet files, and images) that will be accessible to application clients. This directory will be the document root of your web application, and any subdirectory structure found here will be reflected in the request URIs required to access those files. • web/WEB-INF/ - The special configuration files required for your application, including the web application deployment descriptor (web.xml, defined in the Servlet Specification 2), tag library descriptors for custom tag libraries you have created, and other resource files you wish to include within your web application. Even though this directory appears to be a subdirectory of your document root, the Servlet Specification prohibits serving the contents of this directory (or any file it contains) directly to a client request. Therefore, this is a good place to store configuration information that is sensitive (such as database connection usernames and passwords), but is required for your application to operate successfully. During the development process, two additional directories will be created on a temporary basis: 2 http://java.sun.com/products/servlet 28 Chapter 3. First webapp • build/ - When you execute a default build (ant), this directory will contain an exact image of the files in the web application archive for this application. Tomcat allows you to deploy an application in an unpacked directory like this, either by copying it to the $CATALINA_BASE/webapps directory, or by installing it via the "Manager" web application. The latter approach is very useful during development, and will be illustrated below. • dist/ - When you execute the ant dist target, this directory will be created. It will create an exact image of the binary distribution for your web application, including an license information, documentation, and README files that you have prepared. Note that these two directories should NOT be archived in your source code control system, because they are deleted and recreated (from scratch) as needed during development. For that reason, you should not edit any source files in these directories if you want to maintain a permanent record of the changes, because the changes will be lost the next time that a build is performed. 3.5.1.1. External Dependencies What do you do if your application requires JAR files (or other resources) from external projects or packages? A common example is that you need to include a JDBC driver in your web application, in order to operate. Different developers take different approaches to this problem. Some will encourage checking a copy of the JAR files you depend on into the source code control archives for every application that requires those JAR files. However, this can cause significant management issues when you use the same JAR in many applications - particular when faced with a need to upgrade to a different version of that JAR file. Therefore, this manual recommends that you NOT store a copy of the packages you depend on inside the source control archives of your applications. Instead, the external dependencies should be integrated as part of the process of building your application. In that way, you can always pick up the appropriate version of the JAR files from wherever your development system administrator has installed them, without having to worry about updating your application every time the version of the dependent JAR file is changed. In the example Ant build.xml file, we will demonstrate how to define build properties that let you configure the locations of the files to be copied, without having to modify build.xml when these files change. The build properties used by a particular developer can be customized on a per-application basis, or defaulted to "standard" build properties stored in the developer's home directory. In many cases, your development system administrator will have already installed the required JAR files into the lib directory of Tomcat. If this has been done, you need to take 29 Apache Tomcat 7 User Guide no actions at all - the example build.xml file automatically constructs a compile classpath that includes these files. 3.5.2. Source Code Control As mentioned earlier, it is highly recommended that you place all of the source files that comprise your application under the management of a source code control system like the Concurrent Version System (CVS). If you elect to do this, every directory and file in the source hierarchy should be registered and saved -- but none of the generated files. If you register binary format files (such as images or JAR libraries), be sure to indicate this to your source code control system. We recommended (in the previous section) that you should not store the contents of the build/ and dist/ directories created by your development process in the source code control system. An easy way to tell CVS to ignore these directories is to create a file named .cvsignore (note the leading period) in your top-level source directory, with the following contents: build dist build.properties The reason for mentioning build.properties here will be explained in the Development Processes section (see Section 3.6, page 32). Detailed instructions for your source code control environment are beyond the scope of this manual. However, the following steps are followed when using a command-line CVS client: • • • • • To refresh the state of your source code to that stored in the the source repository, go to your project source directory, and execute cvs update -dP. When you create a new subdirectory in the source code hierarchy, register it in CVS with a command like cvs add {subdirname}. When you first create a new source code file, navigate to the directory that contains it, and register the new file with a command like cvs add {filename}. If you no longer need a particular source code file, navigate to the containing directory and remove the file. Then, deregister it in CVS with a command like cvs remove {filename}. While you are creating, modifying, and deleting source files, changes are not yet reflected in the server repository. To save your changes in their current state, go to the project source directory and execute cvs commit. You will be asked to write a brief description of the changes you have just completed, which will be stored with the new version of any updated source file. 30 Chapter 3. First webapp CVS, like other source code control systems, has many additional features (such as the ability to tag the files that made up a particular release, and support for multiple development branches that can later be merged). See the links and references in the Introduction (see Section 3.2, page 21) for more information. 3.5.3. BUILD.XML Configuration File We will be using the ant tool to manage the compilation of our Java source code files, and creation of the deployment hierarchy. Ant operates under the control of a build file, normally called build.xml, that defines the processing steps required. This file is stored in the top-level directory of your source code hierarchy, and should be checked in to your source code control system. Like a Makefile, the build.xml file provides several "targets" that support optional development activities (such as creating the associated Javadoc documentation, erasing the deployment home directory so you can build your project from scratch, or creating the web application archive file so you can distribute your application. A well-constructed build.xml file will contain internal documentation describing the targets that are designed for use by the developer, versus those targets used internally. To ask Ant to display the project documentation, change to the directory containing the build.xml file and type: ant -projecthelp To give you a head start, a basic build.xml file 3 is provided that you can customize and install in the project source directory for your application. This file includes comments that describe the various targets that can be executed. Briefly, the following targets are generally provided: • • • 3 clean - This target deletes any existing build and dist directories, so that they can be reconstructed from scratch. This allows you to guarantee that you have not made source code modifications that will result in problems at runtime due to not recompiling all affected classes. compile - This target is used to compile any source code that has been changed since the last time compilation took place. The resulting class files are created in the WEBINF/classes subdirectory of your build directory, exactly where the structure of a web application requires them to be. Because this command is executed so often during development, it is normally made the "default" target so that a simple ant command will execute it. all - This target is a short cut for running the clean target, followed by the compile target. Thus, it guarantees that you will recompile the entire application, to ensure that you have not unknowingly introduced any incompatible changes. http://tomcat.apache.org/tomcat-7.0-doc/appdev/build.xml.txt 31 Apache Tomcat 7 • • User Guide javadoc - This target creates Javadoc API documentation for the Java classes in this web application. The example build.xml file assumes you want to include the API documentation with your app distribution, so it generates the docs in a subdirectory of the dist directory. Because you normally do not need to generate the Javadocs on every compilation, this target is usually a dependency of the dist target, but not of the compile target. dist - This target creates a distribution directory for your application, including any required documentation, the Javadocs for your Java classes, and a web application archive (WAR) file that will be delivered to system administrators who wish to install your application. Because this target also depends on the deploy target, the web application archive will have also picked up any external dependencies that were included at deployment time. For interactive development and testing of your web application using Tomcat, the following additional targets are defined: • install - Tell the currently running Tomcat to make the application you are developing immediately available for execution and testing. This action does not require Tomcat to be restarted, but it is also not remembered after Tomcat is restarted the next time. • reload - Once the application is installed, you can continue to make changes and recompile using the compile target. Tomcat will automatically recognize changes made to JSP pages, but not to servlet or JavaBean classes - this command will tell Tomcat to restart the currently installed application so that such changes are recognized. • remove - When you have completed your development and testing activities, you can optionally tell Tomcat to remove this application from service. Using the development and testing targets requires some additional one-time setup that is described on the next page. 3.6. Development Processes Although application development can take many forms, this manual proposes a fairly generic process for creating web applications using Tomcat. The following sections highlight the commands and tasks that you, as the developer of the code, will perform. The same basic approach works when you have multiple programmers involved, as long as you have an appropriate source code control system and internal team rules about who is working on what parts of the application at any given time. The task descriptions below assume that you will be using CVS for source code control, and that you have already configured access to the appropriate CVS repository. Instructions for 32 Chapter 3. First webapp doing this are beyond the scope of this manual. If you are using a different source code control environment, you will need to figure out the corresponding commands for your system. 3.6.1. One-Time Setup of Ant and Tomcat for Development In order to take advantage of the special Ant tasks that interact with the Manager web application, you need to perform the following tasks once (no matter how many web applications you plan to develop). • • Configure the Ant custom tasks. The implementation code for the Ant custom tasks is in a JAR file named $CATALINA_HOME/lib/catalina-ant.jar, which must be copied in to the lib directory of your Ant installation. Define one or more Tomcat users. The Manager web application runs under a security constraint that requires a user to be logged in, and have the security role managerscript assigned to him or her. How such users are defined depends on which Realm you have configured in Tomcat's conf/server.xml file -- see the Realm Configuration HOW-TO (Chapter 6, page 63) for more information. You may define any number of users (with any username and password that you like) with the manager-script role. 3.6.2. Create Project Source Code Directory The first step is to create a new project source directory, and customize the build.xml and build.properties files you will be using. The directory structure is described in the previous section (see Section 3.5, Source Organization page 27), or you can use the Sample Application (see Section 3.7, page 37) as a starting point. Create your project source directory, and define it within your CVS repository. This might be done by a series of commands like this, where {project} is the name under which your project should be stored in the CVS repository, and {username} is your login username: cd {my home directory} mkdir myapp <-- Assumed "project source directory" cd myapp mkdir docs mkdir src mkdir web mkdir web/WEB-INF cvs import -m "Initial Project Creation" {project} \ {username} start Now, to verify that it was created correctly in CVS, we will perform a checkout of the new project: cd .. mv myapp myapp.bu cvs checkout {project} 33 Apache Tomcat 7 User Guide Next, you will need to create and check in an initial version of the build.xml script to be used for development. For getting started quickly and easily, base your build.xml on the basic build.xml file 4, included with this manual, or code it from scratch. cd {my home directory} cd myapp emacs build.xml <-- if you want a real editor :-) cvs add build.xml cvs commit Until you perform the CVS commit, your changes are local to your own development directory. Committing makes those changes visible to other developers on your team that are sharing the same CVS repository. The next step is to customize the Ant properties that are named in the build.xml script. This is done by creating a file named build.properties in your project's top-level directory. The supported properties are listed in the comments inside the sample build.xml script. At a minimum, you will generally need to define the catalina.home property defining where Tomcat is installed, and the manager application username and password. You might end up with something like this: # Context path to install this application on app.path=/hello # Tomcat 7 installation directory catalina.home=/usr/local/apache-tomcat-7.0 # Manager webapp username and password manager.username=myusername manager.password=mypassword In general, you will not want to check the build.properties file in to the CVS repository, because it is unique to each developer's environment. Now, create the initial version of the web application deployment descriptor. You can base web.xml on the basic web.xml file 5, or code it from scratch. cd {my home directory} cd myapp/web/WEB-INF emacs web.xml cvs add web.xml cvs commit Note that this is only an example web.xml file. The full definition of the deployment descriptor file is in the Servlet Specification 6. 4 5 http://tomcat.apache.org/tomcat-7.0-doc/appdev/build.xml.txt http://tomcat.apache.org/tomcat-7.0-doc/appdev/web.xml.txt 34 Chapter 3. First webapp 3.6.3. Edit Source Code and Pages The edit/build/test tasks will generally be your most common activities during development and maintenance. The following general principles apply. As described in Source Organization (see Section 3.5, page 27), newly created source files should be located in the appropriate subdirectory, under your project source directory. Whenever you wish to refresh your development directory to reflect the work performed by other developers, you will ask CVS to do it for you: cd {my home directory} cd myapp cvs update -dP To create a new file, go to the appropriate directory, create the file, and register it with CVS. When you are satisfied with it's contents (after building and testing is successful), commit the new file to the repository. For example, to create a new JSP page: cd {my home directory} cd myapp/web <-- Ultimate destination is document root emacs mypage.jsp cvs add mypage.jsp ... build and test the application ... cvs commit Java source code that is defined in packages must be organized in a directory hierarchy (under the src/ subdirectory) that matches the package names. For example, a Java class named com.mycompany.mypackage.MyClass.java should be stored in file src/com/mycompany/mypackage/MyClass.java. Whenever you create a new subdirectory, don't forget to register it with CVS. To edit an existing source file, you will generally just start editing and testing, then commit the changed file when everything works. Although CVS can be configured to required you to "check out" or "lock" a file you are going to be modifying, this is generally not used. 3.6.4. Build the Web Application When you are ready to compile the application, issue the following commands (generally, you will want a shell window open that is set to the project source directory, so that only the last command is needed): cd {my home directory} cd myapp <-- Normally leave a window open here ant 6 http://java.sun.com/products/servlet 35 Apache Tomcat 7 User Guide The Ant tool will be execute the default "compile" target in your build.xml file, which will compile any new or updated Java code. If this is the first time you compile after a "build clean", it will cause everything to be recompiled. To force the recompilation of your entire application, do this instead: cd {my home directory} cd myapp ant all This is a very good habit immediately before checking in changes, to make sure that you have not introduced any subtle problems that Javac's conditional checking did not catch. 3.6.5. Test Your Web Application To test your application, you will want to install it under Tomcat. The quickest way to do that is to use the custom Ant tasks that are included in the sample build.xml script. Using these commands might follow a pattern like this: • Start Tomcat if needed. If Tomcat is not already running, you will need to start it in the usual way. • Compile your application. Use the ant compile command (or just ant, since this is the default). Make sure that there are no compilation errors. • Install the application. Use the ant install command. This tells Tomcat to immediately start running your app on the context path defined in the app.path build property. Tomcat does NOT have to be restarted for this to take effect. • Test the application. Using your browser or other testing tools, test the functionality of your application. • Modify and rebuild as needed. As you discover that changes are required, make those changes in the original source files, not in the output build directory, and re-issue the ant compile command. This ensures that your changes will be available to be saved (via cvs commit) later on -- the output build directory is deleted and recreated as necessary. • Reload the application. Tomcat will recognize changes in JSP pages automatically, but it will continue to use the old versions of any servlet or JavaBean classes until the application is reloaded. You can trigger this by executing the ant reload command. • Remove the application when you re done. When you are through working on this application, you can remove it from live execution by running the ant remove command. Do not forget to commit your changes to the source code repository when you have completed your testing! 36 Chapter 3. First webapp 3.6.6. Creating a Release When you are through adding new functionality, and you've tested everything (you DO test, don't you :-), it is time to create the distributable version of your web application that can be deployed on the production server. The following general steps are required: • Issue the command ant all from the project source directory, to rebuild everything from scratch one last time. • Use the cvs tag command to create an identifier for all of the source files utilized to create this release. This allows you to reliably reconstruct a release (from sources) at a later time. • Issue the command ant dist to create a distributable web application archive (WAR) file, as well as a JAR file containing the corresponding source code. • Package the contents of the dist directory using the tar or zip utility, according to the standard release procedures used by your organization. 3.7. Sample Application The example app has been packaged as a war file and can be downloaded here 7 (Note: make sure your browser doesn't change file extension or append a new one). The easiest way to run this application is simply to move the war file to your CATALINA_HOME/webapps directory. Tomcat will automatically expand and deploy the application for you. You can view it with the following URL (assuming that you're running tomcat on port 8080 as is the default): http://localhost:8080/sample If you just want to browse the contents, you can unpack the war file with the jar command. jar -xvf sample.war 7 http://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war 37 Linbrary™ Advertising Club (LAC) Advertising Linux Documentation Project - Machtelt Garrels http://www.tldp.org Version TLDP Title Edition paperback eBook (pdf) paperback eBook (pdf) http://www.linbrary.com/linux-tldp/ Introduction to Linux (Third Edition) Bash Guide for Beginners (Second Edition) ISBN- 10 ISBN- 13 1-59682-199-X 1-59682-200-7 1-59682-201-5 1-59682-202-3 978-1-59682-199-6 978-1-59682-200-9 978-1-59682-201-6 978-1-59682-202-3 Advertising Fedora Project Official Documentation http://docs.fedoraproject.org Version Fedora 15 Fedora 14 Fedora 13 Title Fedora 15 Installation Guide Fedora 15 Deployment Guide Fedora 14 Installation Guide Fedora 14 User Guide Fedora 14 Security Guide Fedora 13 Installation Guide Fedora 13 User Guide Fedora 13 Security Guide Fedora 13 SE Linux User Guide Fedora 13 Virtualization Guide Edition paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) http://www.linbrary.com/fedora/ ISBN- 10 1-59682-231-7 1-59682-236-8 1-59682-232-5 1-59682-237-6 1-59682-228-7 1-59682-233-3 1-59682-229-5 1-59682-234-1 1-59682-230-9 1-59682-235-X 1-59682-212-0 1-59682-217-1 1-59682-213-9 1-59682-218-X 1-59682-214-7 1-59682-219-8 1-59682-215-5 1-59682-220-1 1-59682-216-3 1-59682-221-X ISBN- 13 978-1-59682-231-3 978-1-59682-236-8 978-1-59682-232-0 978-1-59682-237-5 978-1-59682-228-3 978-1-59682-233-7 978-1-59682-229-0 978-1-59682-234-4 978-1-59682-230-6 978-1-59682-235-1 978-1-59682-212-2 978-1-59682-217-7 978-1-59682-213-9 978-1-59682-218-4 978-1-59682-214-6 978-1-59682-219-1 978-1-59682-215-3 978-1-59682-220-7 978-1-59682-216-0 978-1-59682-221-4 Advertising Fedora Project Official Documentation http://docs.fedoraproject.org Version Fedora 12 Fedora 11 Title Fedora 12 Installation Guide Fedora 12 User Guide Fedora 12 Security Guide Fedora 12 SE Linux User Guide Fedora 12 Virtualization Guide Fedora 11 Installation Guide Fedora 11 User Guide Fedora 11 Security Guide Fedora 11 SE Linux User Guide Edition paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) http://www.linbrary.com/fedora/ ISBN- 10 1-59682-179-5 1-59682-184-1 1-59682-180-9 1-59682-185-X 1-59682-181-7 1-59682-186-8 1-59682-182-5 1-59682-187-6 1-59682-183-3 1-59682-188-4 1-59682-142-6 1-59682-146-9 1-59682-143-4 1-59682-147-7 1-59682-144-2 1-59682-148-5 1-59682-145-0 1-59682-149-3 ISBN- 13 978-1-59682-179-8 978-1-59682-184-2 978-1-59682-180-4 978-1-59682-185-9 978-1-59682-181-1 978-1-59682-186-6 978-1-59682-182-8 978-1-59682-187-3 978-1-59682-183-5 978-1-59682-188-0 978-1-59682-142-2 978-1-59682-146-0 978-1-59682-143-9 978-1-59682-147-7 978-1-59682-144-6 978-1-59682-148-4 978-1-59682-145-3 978-1-59682-149-1 Advertising Ubuntu Official Documentation http://www.ubuntu.com Version Ubuntu 11.04 Ubuntu 10.10 Title Edition ISBN- 10 ISBN- 13 Ubuntu 11.04 Installation Guide Ubuntu 11.04 Unity Desktop Guide Ubuntu 11.04 Classic Desktop Guide Ubuntu 11.04 Server Guide Ubuntu 11.04 Packaging Guide Ubuntu 10.10 Installation Guide Ubuntu 10.10 Desktop Guide Ubuntu 10.10 Server Guide paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) 1-59682-257-0 1-59682-262-7 1-59682-258-9 1-59682-263-5 1-59682-259-7 1-59682-264-3 1-59682-260-0 1-59682-265-1 1-59682-261-9 1-59682-266-X 1-59682-238-4 1-59682-242-2 1-59682-239-2 1-59682-243-0 1-59682-240-6 1-59682-244-9 978-1-59682-257-3 978-1-59682-262-7 978-1-59682-258-0 978-1-59682-263-4 978-1-59682-259-7 978-1-59682-264-1 978-1-59682-260-3 978-1-59682-265-8 978-1-59682-261-0 978-1-59682-266-5 978-1-59682-238-2 978-1-59682-242-9 978-1-59682-239-9 978-1-59682-243-6 978-1-59682-240-5 978-1-59682-244-3 http://www.linbrary.com/ubuntu/ Advertising Ubuntu Official Documentation http://www.ubuntu.com Version Ubuntu 10.04 LTS Ubuntu 9.10 Ubuntu 9.04 Title Edition ISBN- 10 ISBN- 13 Ubuntu 10.04 LTS Installation Guide Ubuntu 10.04 LTS Desktop Guide Ubuntu 10.04 LTS Server Guide Ubuntu 10.04 LTS Packaging Guide Ubuntu 9.10 Installation Guide Ubuntu 9.10 Desktop Guide Ubuntu 9.10 Server Guide Ubuntu 9.10 Packaging Guide Ubuntu 9.04 Installation Guide Ubuntu 9.04 Desktop Guide Ubuntu 9.04 Server Guide Ubuntu 9.04 Packaging Guide paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) 1-59682-203-1 1-59682-207-4 1-59682-204-X 1-59682-208-2 1-59682-205-8 1-59682-209-0 1-59682-206-6 1-59682-210-4 1-59682-171-X 1-59682-175-2 1-59682-172-8 1-59682-176-0 1-59682-173-6 1-59682-177-9 1-59682-174-4 1-59682-178-7 1-59682-150-7 1-59682-154-X 1-59682-151-5 1-59682-155-8 1-59682-152-3 1-59682-156-6 1-59682-153-1 1-59682-157-4 978-1-59682-203-0 978-1-59682-207-8 978-1-59682-204-7 978-1-59682-208-5 978-1-59682-205-4 978-1-59682-209-2 978-1-59682-206-1 978-1-59682-210-8 978-1-59682-171-2 978-1-59682-175-0 978-1-59682-172-9 978-1-59682-176-7 978-1-59682-173-6 978-1-59682-177-4 978-1-59682-174-3 978-1-59682-178-1 978-1-59682-150-7 978-1-59682-154-5 978-1-59682-151-4 978-1-59682-155-2 978-1-59682-152-1 978-1-59682-156-9 978-1-59682-153-8 978-1-59682-157-6 http://www.linbrary.com/ubuntu/ Advertising PostgreSQL Official Documentation http://www.postgresql.org Version PostgreSQL 9.0 PostgreSQL 8.04 Title Edition ISBN- 10 ISBN- 13 PostgreSQL 9.0 Volume I. The SQL Language PostgreSQL 9.0 Volume II. Server Administration PostgreSQL 9.0 Volume III. Server Programming PostgreSQL 9.0 Volume IV. Reference PostgreSQL 9.0 Volume V. Internals & Appendixes PostgreSQL 8.04 Volume I. The SQL Language PostgreSQL 8.04 Volume II. Server Administration PostgreSQL 8.04 Volume III. Server Programming PostgreSQL 8.04 Volume IV. Reference paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback 1-59682-246-5 1-59682-251-1 1-59682-247-3 1-59682-252-X 1-59682-248-1 1-59682-253-8 1-59682-249-X 1-59682-254-6 1-59682-250-3 1-59682-255-4 1-59682-158-2 1-59682-163-9 1-59682-159-0 1-59682-164-7 1-59682-160-4 1-59682-165-5 1-59682-161-2 1-59682-166-3 1-59682-162-0 978-1-59682-246-7 978-1-59682-251-1 978-1-59682-247-4 978-1-59682-252-8 978-1-59682-248-1 978-1-59682-253-5 978-1-59682-249-8 978-1-59682-254-2 978-1-59682-250-4 978-1-59682-255-9 978-1-59682-158-3 978-1-59682-163-7 978-1-59682-159-0 978-1-59682-164-4 978-1-59682-160-6 978-1-59682-165-1 978-1-59682-161-3 978-1-59682-166-8 978-1-59682-162-0 eBook (pdf) 1-59682-167-1 978-1-59682-167-5 PostgreSQL 8.04 Volume V. Internals & Appendixes http://www.linbrary.com/postgresql/ Advertising The Apache Software Foundation Official Documentation http://www.apache.org Version Apache Web Server 2.2 Title Edition ISBN- 10 ISBN- 13 Apache HTTP Server 2.2 Vol.I. Server Administration Apache HTTP Server 2.2 Vol.II. Security & Server Programs Apache HTTP Server 2.2 Vol.III. Modules (A-H) Apache HTTP Server 2.2 Vol.IV. Modules (I-V) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) paperback eBook (pdf) 1-59682-191-4 1-59682-195-7 1-59682-192-2 1-59682-196-5 1-59682-193-0 1-59682-197-3 1-59682-194-9 1-59682-198-1 978-1-59682-191-0 978-1-59682-195-8 978-1-59682-192-7 978-1-59682-196-5 978-1-59682-193-4 978-1-59682-197-2 978-1-59682-194-1 978-1-59682-198-9 http://www.linbrary.com/apache-http/ Version Apache Tomcat 7 Title Edition ISBN- 10 ISBN- 13 Apache Tomcat 7 User Guide paperback eBook (pdf) 1-59682-271-6 1-59682-272-4 978-1-59682-271-9 978-1-59682-272-6 http://www.linbrary.com/tomcat/ Version Subversion 1.6 Title Edition ISBN- 10 ISBN- 13 Subversion 1.6 Version Control with Subversion paperback eBook (pdf) 1-59682-169-8 1-59682-170-1 978-1-59682-169-9 978-1-59682-170-5 http://www.linbrary.com/subversion/ Your Advertising Here More Books Coming Soon!!! Please Feel Free to Contact Us at production@fultus.com
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.6 Linearized : Yes Author : The Apache Software Foundation Company : Create Date : 2011:09:13 20:04:22-07:00 Modify Date : 2011:09:23 17:35:19-07:00 Source Modified : D:20110914025404 Has XFA : No Tagged PDF : No XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04 Metadata Date : 2011:09:23 17:35:19-07:00 Creator Tool : Acrobat PDFMaker 9.1 for Word Document ID : uuid:756f102d-d6a1-411b-a175-50ef38e2db0c Instance ID : uuid:e64473ae-1275-47fe-af2f-6cae74c69d25 Subject : 56 Format : application/pdf Title : Apache Tomcat 7 User Guide Creator : The Apache Software Foundation Producer : Adobe PDF Library 9.0 Page Layout : SinglePage Page Mode : UseOutlines Page Count : 47EXIF Metadata provided by EXIF.tools