CopyrightPrefaceWho Should Read This Book?OrganizationA Few Words on Development EnvironmentsAcknowledgments Chapter 1. Introduction Section 1.1. On Tools Section 1.2. On Open Source Section 1.3. The Apache Software Foundation and the Jakarta Project Section 1.4. On Application Development Section 1.5. Further Reading Chapter 2. Ant Section 2.1. Introduction to Ant Section 2.2. Dependencies Section 2.3. Sets of Files as Task Arguments Section 2.4. Global Variables Section 2.5. Paths Section 2.6. Properties Section 2.7. Command-Line Arguments Section 2.8. Built-In Tasks Section 2.9. Creating New Tasks Section 2.10. Beyond This Book Section 2.11. Summary Chapter 3. Eclipse Section 3.1. Getting Started with Eclipse Section 3.2. Using Ant with Eclipse Section 3.3. Beyond This Book Section 3.4. Summary Chapter 4. Testing with JUnit Section 4.1. An Introduction to Automated Testing Section 4.2. JUnitA Testing Framework Section 4.3. More on JUnit Section 4.4. How and What to Test Section 4.5. Integrating JUnit with Ant Section 4.6. Summary Chapter 5. Testing Web Sites with HTTPUnit Section 5.1. An Introduction to HTTPUnit Section 5.2. A More Sophisticated Example Section 5.3. Testing with ServletRunner Section 5.4. Beyond This Book Section 5.5. Summary Chapter 6. Further Web Testing with Jakarta Cactus Section 6.1. An Introduction to Cactus Section 6.2. Writing and Running Cactus Tests Section 6.3. Using Cactus with Eclipse Section 6.4. Beyond This Book Section 6.5. Summary Chapter 7. Stress Testing with Jakarta JMeter Section 7.1. Using JMeter Section 7.2. Distributed Testing Section 7.3. More Sophisticated Test Plans Section 7.4. Using JMeter with Ant Section 7.5. How to Stress Test Section 7.7. Summary Chapter 8. Simplifying Bean Development with BeanUtils Section 8.1. Introduction to BeanUtils Section 8.2. Simple Properties Section 8.3. Indexed Properties Section 8.4. Mapped Properties Section 8.5. Nested Properties Section 8.6. Converters Section 8.7. Adding New Converters Section 8.8. Dynamic Beans Section 8.9. Enhancing DynaBeans Section 8.10. Summary Chapter 9. Traversing Hierarchical Data with JXPath Section 9.1. Introduction to XPath Section 9.2. Using JXPath Section 9.3. Setting Values Section 9.4. Creating New Structures Section 9.5. A Few Notes on Defining New Contexts Section 9.6. Summary Chapter 10. Chapter Database Tools Section 10.1. Hsqldb Section 10.1.1. Extending Hsqldb Section 10.2. Pooling Connections with DBCP Section 10.3. Mapping Databases to Objects with OJB Section 10.3.1. Defining the Database and Objects Section 10.3.2. Defining the Object-Relational Mapping Section 10.4. Using OJB Section 10.5. Retrieving Data Section 10.6. More Sophisticated Queries Section 10.7. Lazy Evaluation Section 10.8. Related Tools Section 10.9. Hiding Persistence from Applications Section 10.10. Beyond This Book Section 10.11. Summary Endnotes Chapter 11. Logging Section 11.1. The Java.util.logging Package Section 11.2. Log4j Section 11.3. Beyond This Book Section 11.4. Summary Chapter 12. Configuring Program Options Section 12.1. Jakarta CLI Section 12.2. Jakarta Digester Section 12.3. Beyond This Book Section 12.4. Summary Chapter 13. Working with Text 1: Regular Expressions Section 13.1. Regular Expressions Section 13.2. ORO Regular Expressions Section 13.3. Jakarta Regexp Section 13.4. The JDK1.4 Pattern Matching Classes Section 13.5. Beyond This Book Section 13.6. Summary Chapter 14. Working with Text 2: Searching Section 14.1. Creating Indices Section 14.2. Using Indices Section 14.3. Indexing Web Pages Section 14.4. Beyond This Book Section 14.5. Summary Chapter 15. Creating Office Documents with POI Section 15.1. Poifs Section 15.2. Excel Section 15.3. Creating Spreadsheets Section 15.4. Templating Section 15.5. Word Section 15.6. Beyond This Book Section 15.7. Summary Chapter 16. Scripting Section 16.1. Running BeanShell Section 16.2. The BeanShell Language Section 16.3. Functions Section 16.4. Implementing Interfaces Section 16.5. Full Java Compatibility Section 16.6. Calling BeanShell from Java Section 16.7. Motivation for Scripting Section 16.8. Beyond This Book Section 16.9. Summary Chapter 17. Tomcat Section 17.1. Starting Tomcat Section 17.2. A Tour of Tomcat Section 17.3. Creating a Web Application Section 17.3.1. The web.xml File Section 17.4. Security Section 17.4.1. Authentication Section 17.5. Realms Section 17.6. Encryption and Server Validation Section 17.7. Client Certificates Section 17.8. Certificate-Based Authentication Section 17.9. Global Resources Section 17.10. Web-Based Management and Administration Section 17.11. Beyond This Book Section 17.12. Summary Chapter 18. The Standard Tag Library Section 18.1. Tag Libraries Section 18.2. Tags with Bodies Section 18.3. Dynamic Attributes in Tags Section 18.4. Displaying Expressions Section 18.5. Formatting Output Section 18.6. Iteration in a Page Section 18.7. Conditionally Including Sections of a Page Section 18.8. Browser Detection Section 18.9. Combining Tags Section 18.10. Selecting between Multiple Choices Section 18.11. The SQL Tags Section 18.12. The XML Tags Section 18.13. Beyond This Book Section 18.14. Summary Chapter 19. Struts Section 19.1. Some Common Controller Tasks Section 19.2. Struts: An Application Toolkit Section 19.3. Using Struts Section 19.4. Simplifying Form Beans with the Validator Section 19.5. Eliminating Form Beans Section 19.6. The Pros and Cons of Struts Section 19.7. Beyond This Book Section 19.8. Summary Chapter 20. Cocoon Section 20.1. Building and Configuring Cocoon Section 20.2. Using Cocoon Section 20.3. Accessing Databases Section 20.4. Writing to Databases Section 20.5. The Pros and Cons of Cocoon Section 20.6. Beyond This Book Section 20.7. SummaryAppendix AA.1 Dynamic ProxiesIndex