About the Authors |
|
xi | |
About the Technical Reviewer |
|
xiii | |
Acknowledgments |
|
xv | |
Preface |
|
xvii | |
Chapter 1 What We Do Wrong: Web Antipatterns Explained |
|
1 | (38) |
|
|
3 | (2) |
|
Challenges of Web Application Development |
|
|
5 | (4) |
|
An Introduction to Patterns and Antipatterns |
|
|
9 | (21) |
|
Antipatterns, JOS Frameworks, and Economics |
|
|
30 | (4) |
|
|
34 | (2) |
|
|
36 | (3) |
Chapter 2 Struts Fundamentals |
|
39 | (56) |
|
The JavaEdge Application Architecture |
|
|
40 | (3) |
|
Using Struts to Implement the MVC Pattern |
|
|
43 | (23) |
|
Constructing the Presentation Tier |
|
|
66 | (25) |
|
|
91 | (4) |
Chapter 3 Form Presentation and Validation with Struts |
|
95 | (58) |
|
Problems with Form Validation |
|
|
95 | (5) |
|
Implementing Form Validation with Struts |
|
|
100 | (26) |
|
The Struts HTML Tag Library |
|
|
126 | (18) |
|
ActionForm Best Practices |
|
|
144 | (6) |
|
|
150 | (3) |
Chapter 4 Managing Business Logic with Struts |
|
153 | (58) |
|
Business Logic Antipatterns and Struts |
|
|
154 | (10) |
|
Separating Business Logic from Struts |
|
|
164 | (2) |
|
Implementing the Design Patterns |
|
|
166 | (30) |
|
Handling Exceptions in the Action Class |
|
|
196 | (12) |
|
|
208 | (3) |
Chapter 5 Architecting the Data Access Tier with ObjectRelationalBridge |
|
211 | (64) |
|
Developing a Data Access Strategy |
|
|
212 | (3) |
|
The JavaEdge Data Access Model |
|
|
215 | (12) |
|
Using an 0/R Mapping Tool |
|
|
227 | (3) |
|
About ObjectRelationalBridge (OJB) |
|
|
230 | (24) |
|
|
254 | (14) |
|
|
268 | (4) |
|
|
272 | (3) |
Chapter 6 Building Flexible Front-Ends with the Tiles Framework |
|
275 | (34) |
|
What Is the Tiles Framework? |
|
|
277 | (1) |
|
Enabling Struts Version 1.1 to Use Tiles |
|
|
278 | (5) |
|
Your First Tiles Template |
|
|
283 | (3) |
|
What Are Tiles Definitions? |
|
|
286 | (2) |
|
Tiles Definitions: A JSP-Based Approach |
|
|
288 | (5) |
|
Anatomy of the tiles-defs.xml File |
|
|
293 | (9) |
|
Mapping Tiles Definitions to Action Forwards |
|
|
302 | (3) |
|
|
305 | (4) |
Chapter 7 Dynamic Forms and the Struts Validator Framework |
|
309 | (40) |
|
Introducing Dynamic Forms |
|
|
310 | (12) |
|
The Jakarta Commons Validator Framework |
|
|
322 | (8) |
|
Use the Validator Within an ActionForm Class |
|
|
330 | (3) |
|
Writing Your Own Validation Rules |
|
|
333 | (13) |
|
|
346 | (3) |
Chapter 8 Speeding Struts Development with XDoclet |
|
349 | (34) |
|
|
351 | (2) |
|
|
353 | (5) |
|
The Available XDoclet Tags |
|
|
358 | (2) |
|
Anatomy of an XDoclet Tag |
|
|
360 | (2) |
|
Integrating Ant and XDoclet |
|
|
362 | (4) |
|
|
366 | (15) |
|
|
381 | (2) |
Chapter 9 Logging and Debugging |
|
383 | (48) |
|
|
384 | (1) |
|
Simple Web Application Logging |
|
|
385 | (2) |
|
|
387 | (1) |
|
|
387 | (6) |
|
|
393 | (3) |
|
|
396 | (11) |
|
|
407 | (1) |
|
|
408 | (4) |
|
Capturing Struts Debug Messages |
|
|
412 | (3) |
|
Integrating Logging into JavaEdge |
|
|
415 | (9) |
|
Debugging Struts Applications Using JBoss and Eclipse |
|
|
424 | (6) |
|
|
430 | (1) |
Chapter 10 Velocity Template Engine |
|
431 | (38) |
|
What Is a Template Engine? |
|
|
431 | (2) |
|
|
433 | (1) |
|
Velocity and VelocityContext Classes |
|
|
434 | (1) |
|
Velocity Template Language |
|
|
435 | (22) |
|
|
457 | (9) |
|
Best Practices for Velocity Use |
|
|
466 | (1) |
|
|
467 | (2) |
Chapter 11 Extending the Struts Framework |
|
469 | (36) |
|
Extending Action and ActionForm |
|
|
470 | (8) |
|
Extending RequestProcessor |
|
|
478 | (6) |
|
Creating Configuration Beans |
|
|
484 | (2) |
|
Revisiting RequestProcessor |
|
|
486 | (5) |
|
|
491 | (11) |
|
|
502 | (3) |
Appendix A JavaEdge Setup and Installation |
|
505 | (10) |
|
|
505 | (5) |
|
|
510 | (4) |
|
|
514 | (1) |
Appendix B Struts Development Tools |
|
515 | (38) |
|
|
516 | (3) |
|
|
519 | (3) |
|
|
522 | (6) |
|
|
528 | (7) |
|
|
535 | (5) |
|
|
540 | (6) |
|
|
546 | (1) |
|
|
546 | (6) |
|
|
552 | (1) |
Index |
|
553 | |