| Contents at a Glance | 5 |
|---|
| Contents | 6 |
|---|
| Foreword | 11 |
|---|
| About the Author | 13 |
|---|
| About the Technical Reviewer | 14 |
|---|
| About the Illustrator | 15 |
|---|
| Acknowledgments | 16 |
|---|
| Introduction | 17 |
|---|
| An Overview of This Book | 18 |
| Obtaining This Book s Source Code | 18 |
| Obtaining Updates for This Book | 19 |
| Contacting the Author | 19 |
| Setting the Table | 20 |
|---|
| An Introduction to Ajax, RPC, and Modern RIAs | 21 |
| A Brief History of Web Development: The Classic Model | 21 |
| What s So Wrong with the Classic Web? | 29 |
| Enter Ajax | 32 |
| Why Is Ajax a Paradigm Shift? On the Road to RIAs | 36 |
| The Flip Side of the Coin | 41 |
| Let s Get to the Good Stuff: Our First Ajax Code, the Manual Way | 43 |
| Cutting IN the Middle Man: Ajax Libraries to Ease Our Pain | 51 |
| Alternatives to Ajax | 54 |
| Hmm, Are We Forgetting Something? What Could It Be? Oh Yeah, DWR! | 57 |
| Summary | 58 |
| Getting to Know DWR | 60 |
| First Things First: Why DWR at All? | 60 |
| DWR: RPC on Steroids for the Web | 62 |
| DWR Architectural Overview | 64 |
| Getting Ready for the Fun: Your DWR Development Environment | 66 |
| A Simple Webapp to Get Us Started | 69 |
| Adding DWR to the Mix | 78 |
| The DWR Test/ Debug Page | 82 |
| Configuring DWR Part 1: web. xml | 84 |
| Configuring DWR Part 2: dwr. xml | 87 |
| Interacting with DWR on the Client | 98 |
| Interacting with DWR on the Server | 105 |
| DWR Configuration and Other Concepts: The engine. js File | 107 |
| A Quick Look at util. js, the DWR Utility Package | 109 |
| Summary | 111 |
| Advanced DWR | 112 |
| Locking the Doors: Security in DWR | 112 |
| When Perfection Is Elusive: Error Handling in DWR Applications | 118 |
| Help from Elsewhere: Accessing Other URLs | 124 |
| Turning the Tables: Reverse Ajax | 126 |
| Don t Go It Alone: Integration with Frameworks and Libraries | 134 |
| Something Old, Something New: Annotations | 139 |
| Summary | 142 |
| The Projects | 143 |
|---|
| InstaMail: An Ajax-Based Webmail Client | 144 |
| Application Requirements and Goals | 144 |
| Dissecting InstaMail | 145 |
| Suggested Exercises | 202 |
| Summary | 203 |
| Share Your Knowledge: DWiki, the DWR- Based Wiki | 204 |
| Application Requirements and Goals | 204 |
| Dissecting DWiki | 212 |
| Suggested Exercises | 272 |
| Summary | 273 |
| Remotely Managing Your Files: DWR File Manager | 274 |
| Application Requirements and Goals | 274 |
| Dissecting Fileman | 285 |
| Suggested Exercises | 341 |
| Summary | 341 |
| Enter the Enterprise: A DWR- Based Report Portal | 343 |
| Application Requirements and Goals | 343 |
| Dissecting RePortal | 355 |
| Suggested Exercises | 430 |
| Summary | 431 |
| DWR for Fun and Profit ( a DWR Game!) | 433 |
| Application Requirements and Goals | 433 |
| Dissecting InMemoria | 437 |
| Suggested Exercises | 470 |
| Summary | 470 |
| Timekeeper: DWR Even Makes Project Management Fun! | 471 |
| Application Requirements and Goals | 471 |
| Dissecting Timekeeper | 477 |
| Suggested Exercises | 534 |
| Summary | 535 |
| Index | 536 |