0% found this document useful (0 votes)
16 views123 pages

(Ebook) Pro Web 2.0 Application Development With GWT (Pro) by Jeff Dwyer ISBN 9781430206378, 9781590599853, 1430206373, 1590599853 PDF Download

The document is about the ebook 'Pro Web 2.0 Application Development with GWT' by Jeff Dwyer, which focuses on advanced GWT application development. It provides insights into real-world deployment issues, including database connections, security, and SEO, using a case study of the ToCollege.net application. The book includes source code and is aimed at intermediate to advanced developers looking to enhance their GWT skills.

Uploaded by

ptnftgosh8144
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views123 pages

(Ebook) Pro Web 2.0 Application Development With GWT (Pro) by Jeff Dwyer ISBN 9781430206378, 9781590599853, 1430206373, 1590599853 PDF Download

The document is about the ebook 'Pro Web 2.0 Application Development with GWT' by Jeff Dwyer, which focuses on advanced GWT application development. It provides insights into real-world deployment issues, including database connections, security, and SEO, using a case study of the ToCollege.net application. The book includes source code and is aimed at intermediate to advanced developers looking to enhance their GWT skills.

Uploaded by

ptnftgosh8144
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 123

(Ebook) Pro Web 2.

0 Application Development with GWT


(Pro) by Jeff Dwyer ISBN 9781430206378, 9781590599853,
1430206373, 1590599853 Pdf Download

https://ebooknice.com/product/pro-web-2-0-application-development-
with-gwt-pro-1889804

★★★★★
4.8 out of 5.0 (57 reviews )

DOWNLOAD PDF

ebooknice.com
(Ebook) Pro Web 2.0 Application Development with GWT (Pro)
by Jeff Dwyer ISBN 9781430206378, 9781590599853, 1430206373,
1590599853 Pdf Download

EBOOK

Available Formats

■ PDF eBook Study Guide Ebook

EXCLUSIVE 2025 EDUCATIONAL COLLECTION - LIMITED TIME

INSTANT DOWNLOAD VIEW LIBRARY


Here are some recommended products that we believe you will be
interested in. You can click the link to download.

(Ebook) Biota Grow 2C gather 2C cook by Loucas, Jason; Viles, James


ISBN 9781459699816, 9781743365571, 9781925268492, 1459699815,
1743365578, 1925268497

https://ebooknice.com/product/biota-grow-2c-gather-2c-cook-6661374

(Ebook) Matematik 5000+ Kurs 2c Lärobok by Lena Alfredsson, Hans


Heikne, Sanna Bodemyr ISBN 9789127456600, 9127456609

https://ebooknice.com/product/matematik-5000-kurs-2c-larobok-23848312

(Ebook) SAT II Success MATH 1C and 2C 2002 (Peterson's SAT II Success)


by Peterson's ISBN 9780768906677, 0768906679

https://ebooknice.com/product/sat-ii-success-
math-1c-and-2c-2002-peterson-s-sat-ii-success-1722018

(Ebook) Master SAT II Math 1c and 2c 4th ed (Arco Master the SAT
Subject Test: Math Levels 1 & 2) by Arco ISBN 9780768923049,
0768923042

https://ebooknice.com/product/master-sat-ii-math-1c-and-2c-4th-ed-
arco-master-the-sat-subject-test-math-levels-1-2-2326094
(Ebook) Cambridge IGCSE and O Level History Workbook 2C - Depth Study:
the United States, 1919-41 2nd Edition by Benjamin Harrison ISBN
9781398375147, 9781398375048, 1398375144, 1398375047

https://ebooknice.com/product/cambridge-igcse-and-o-level-history-
workbook-2c-depth-study-the-united-states-1919-41-2nd-edition-53538044

(Ebook) Core Internet Application Development with ASP.NET 2.0 by


Randy Connolly ISBN 9780321419507, 0321419502

https://ebooknice.com/product/core-internet-application-development-
with-asp-net-2-0-974562

(Ebook) Vagabond, Vol. 29 (29) by Inoue, Takehiko ISBN 9781421531489,


1421531488

https://ebooknice.com/product/vagabond-vol-29-29-37511002

(Ebook) Web Application Development with Yii and PHP Second Edition by
Desconocido

https://ebooknice.com/product/web-application-development-with-yii-
and-php-second-edition-43137684

(Ebook) Ejb 2.0 Development with Websphere Studio Application


Developer by IBM Redbooks, Ueli Wahli ISBN 9780738426099, 0738426091

https://ebooknice.com/product/ejb-2-0-development-with-websphere-
studio-application-developer-999050
 CYAN  YELLOW
 MAGENTA BLACK
 PANTONE 123 C

Books for professionals by professionals ® The EXPERT’s VOIce ® in Web Development


Companion
eBook Available
Covers
Pro Web 2.0 Application GWT 1.5
Pro
Pro
Development with GWT

Web 2.0 Application Development with GWT


Dear Reader,

Web 2.0
This book is for developers who are ready to move beyond small proof-of-concept
sample applications and want to look at the issues surrounding a real deploy-
ment of GWT. If you want to see what the guts of a full-fledged GWT application
look like, this is the book for you.
GWT 1.5 is a game-changing technology, but it doesn’t exist in a bubble. Real
deployments need to connect to your database, enforce authentication, protect
against security threats, and allow good search engine optimization.
To show you all this, we’ll look at the code behind a real, live web site called

Application Development
ToCollege.net. This application specializes in helping students who are applying
to colleges; it allows them to manage their application processes and compare
the rankings that they give to schools. It’s a slick application that’s ready for you
to sign up for and use.

with GWT
This book will give you a walking tour of this modern Web 2.0 start-up’s code-
base. The included source code will provide a functional demonstration of how
to merge together the modern Java stack including Hibernate, Spring Security,
Spring MVC 2.5, SiteMesh, and FreeMarker. This fully functioning application is
better than treasure if you’re a developer trying to wire GWT into a Maven build
environment who just wants to see some code that makes it work. If a full tour of
15,000 lines of source code that includes everything from Google Gears integration
to Acegi Security, OpenID, Lucene full-text searching, and Google Maps sounds
like a good thing, I think you’ll enjoy this book.

Yours,

Jeff Dwyer
Learn real-world, professional GWT techniques by
Companion eBook
Related Titles
following an in-depth case study of a Web 2.0 site.

See last page for details


on $10 eBook version

SOURCE CODE ONLINE


www.apress.com
ISBN-13: 978-1-59059-985-3
ISBN-10: 1-59059-985-3
Dwyer Jeff Dwyer
54499

US $44.99

Shelve in
Web Development

User level:
9 781590 599853
Intermediate–Advanced

this print for content only—size & color not accurate spine = 0.909" 480 page count
9853FM.qxd 4/15/08 11:14 AM Page i

Pro Web 2.0 Application


Development with GWT

Jeff Dwyer
9853FM.qxd 4/15/08 11:14 AM Page ii

Pro Web 2.0 Application Development with GWT


Copyright © 2008 by Jeff Dwyer
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.
ISBN-13 (pbk): 978-1-59059-985-3
ISBN-10 (pbk): 1-59059-985-3
ISBN-13 (electronic): 978-1-4302-0638-5
ISBN-10 (electronic): 1-4302-0638-1
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence
of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark
owner, with no intention of infringement of the trademark.
Java™ and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc., in
the US and other countries. Apress, Inc., is not affiliated with Sun Microsystems, Inc., and this book was
written without endorsement from Sun Microsystems, Inc.
Lead Editors: Steve Anglin, Ben Renow-Clarke
Technical Reviewer: Massimo Nardone
Editorial Board: Clay Andres, Steve Anglin, Ewan Buckingham, Tony Campbell, Gary Cornell,
Jonathan Gennick, Matthew Moodie, Joseph Ottinger, Jeffrey Pepper, Frank Pohlmann,
Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh
Project Manager: Kylie Johnston
Copy Editor: Heather Lang
Associate Production Director: Kari Brooks-Copony
Production Editor: Liz Berry
Compositor: Dina Quan
Proofreader: Linda Marousek
Indexer: Carol Burbo
Artist: April Milne
Cover Designer: Kurt Krames
Manufacturing Director: Tom Debolski
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,
New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or
visit http://www.springeronline.com.
For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600,
Berkeley, CA 94705. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit
http://www.apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use.
eBook versions and licenses are also available for most titles. For more information, reference our Special
Bulk Sales–eBook Licensing web page at http://www.apress.com/info/bulksales.
The information in this book is distributed on an “as is” basis, without warranty. Although every precau-
tion has been taken in the preparation of this work, neither the author(s) nor Apress shall have any
liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly
or indirectly by the information contained in this work.
The source code for this book is available to readers at http://www.apress.com.
9853FM.qxd 4/15/08 11:14 AM Page iii

To those who help me realize it’s easier than we think


9853FM.qxd 4/15/08 11:14 AM Page iv
9853FM.qxd 4/15/08 11:14 AM Page v

Contents at a Glance

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii


About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

PART 1 ■■■ What Can GWT Do for You?


■CHAPTER 1 Why GWT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
■CHAPTER 2 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

PART 2 ■■■ ToCollege.net


■CHAPTER 3 Designing ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
■CHAPTER 4 GWT and Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
■CHAPTER 5 Securing Our Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
■CHAPTER 6 Saving Our Work. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
■CHAPTER 7 ToCollege.net’s GWT GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
■CHAPTER 8 Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
■CHAPTER 9 Suggest Boxes and Full Text Search . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
■CHAPTER 10 Forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
■CHAPTER 11 Security and Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
■CHAPTER 12 Search Engine Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
■CHAPTER 13 Google Gears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
■APPENDIX Building ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

v
9853FM.qxd 4/15/08 11:14 AM Page vi
9853FM.qxd 4/15/08 11:14 AM Page vii

Contents

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii


About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

PART 1 ■■■ What Can GWT Do for You?


■CHAPTER 1 Why GWT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
“May You Live in Interesting Times” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
To HTML or Not to HTML? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
So What Is GWT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
But JavaScript Is Better Than Java! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Tools, Tools, Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
JavaScript Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Community . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
The Rest of the Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Maven 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

■CHAPTER 2 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17


Sample Project Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
GWT Project Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Public . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
The GWT Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

vii
9853FM.qxd 4/15/08 11:14 AM Page viii

viii ■CONTENTS

Sample Calculator Project Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24


NumberButton.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
ControlButton.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Calculator.java (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
ControlAction.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Calculator.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
The EntryPoint Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
CalcButton: A CSS Enhancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Code Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
The Advantages of Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Pure Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

PART 2 ■■■ ToCollege.net


■CHAPTER 3 Designing ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
User Stories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
User Story 1: Adding a School . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
User Story 2: Adding Opinions of Schools . . . . . . . . . . . . . . . . . . . . . . 48
User Story 3: Sorting Schools into Tiers . . . . . . . . . . . . . . . . . . . . . . . 48
User Story 4: Viewing Schools on a Map . . . . . . . . . . . . . . . . . . . . . . . 48
User Story 5: Deciding Among Schools . . . . . . . . . . . . . . . . . . . . . . . . 49
User Story 6: Managing the Application Process . . . . . . . . . . . . . . . . 49
What’s Next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Overview of ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
My Rankings List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
My Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
My Decision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
College Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Forums. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
9853FM.qxd 4/15/08 11:14 AM Page ix

■CONTENTS ix

The College.net Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55


Using Abstract Property POJOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
User and School Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Application Process Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
The Process Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Revisiting the User’s List of Schools with a Sorted Map . . . . . . . . . . 58
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

■CHAPTER 4 GWT and Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63


Integrating with a Web Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Why Use Both? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Choosing Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Templating with FreeMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
The Spring MVC Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Splash! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
A Quick FreeMarker Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
The Dispatcher Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Using a Mock for Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
REST-Style URLs in CollegeController.java . . . . . . . . . . . . . . . . . . . . . 86
Basic GWT Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Putting the Calculator in Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Modules, Entry Points, and Dictionaries . . . . . . . . . . . . . . . . . . . . . . . 91
One Module per Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
One Module to Rule Them All . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Passing Information with JavaScript Dictionaries . . . . . . . . . . . . . . . 92
Showing a Loading Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
ToCollege.Net RPC Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
ToCollegeApp.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Dispatcher Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
ApplicationContext.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
GWTController.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Serialization Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
MyPage.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9853FM.qxd 4/15/08 11:14 AM Page x

x ■CONTENTS

■CHAPTER 5 Securing Our Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103


Acegi Security System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Acegi Security Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Acegi Security and Our Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Implementing Acegi Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Add a Servlet Filter to web.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Creating the Acegi Security Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Creating a Login Page in Spring MVC. . . . . . . . . . . . . . . . . . . . . . . . . 121
Getting the Authenticated User in Code . . . . . . . . . . . . . . . . . . . . . . . 123
OpenID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Acegi Security OpenID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
OpenIDLoginController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
OpenID Bean Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Updating UserDAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Integrating GWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Getting the Current User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Logging In from GWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Login Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

■CHAPTER 6 Saving Our Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139


Adding a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
DAOs and the ToCollege.net Architecture . . . . . . . . . . . . . . . . . . . . . 140
GWT-Specific Persistence Concerns . . . . . . . . . . . . . . . . . . . . . . . . . 141
The Command Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Building the DAO Layer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Integrating Hibernate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Mapping the User Class with User.hbm.xml . . . . . . . . . . . . . . . . . . . 148
Application.java and Application.hbm.xml . . . . . . . . . . . . . . . . . . . . . 154
SchoolDAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Hibernate and GWT: No DTOs Necessary . . . . . . . . . . . . . . . . . . . . . . . . . . 157
The Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Possible Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Filter and Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Attaching HibernateFilter to GWT Serialization . . . . . . . . . . . . . . . . . 162
9853FM.qxd 4/15/08 11:14 AM Page xi

■CONTENTS xi

The Command Pattern, a Powerful Ally . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164


What Is the Command Pattern?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
How the Command Pattern Works . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Implementing Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Testing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Testing the DAO Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Testing the Service Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

■CHAPTER 7 ToCollege.net’s GWT GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181


Basic My Page GUI Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Tab Listeners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
History Management: Repairing the Back Button . . . . . . . . . . . . . . 185
Functional History and Bookmarking . . . . . . . . . . . . . . . . . . . . . . . . . 187
RPC Status Notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Step 1: Adding a <div> Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Step 2: Creating a StatusPanel on Bootstrap . . . . . . . . . . . . . . . . . . 190
Step 3: Implement the RPC Notification Strategy
(StdAsyncCallback) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Step 4: Displaying the Status with StatusPanel . . . . . . . . . . . . . . . . 193
Step 5: Making It Cool with Fading . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Drag ’n’ Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
DropController and DragController . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Making Widgets Draggable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
DragHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
RichTextArea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
RichTextToolbar’s ImageBundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
VerticalLabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

■CHAPTER 8 Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

The Mashup Landscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213


Where We’ll Use Maps in ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
The Google Maps API and Key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
9853FM.qxd 4/15/08 11:14 AM Page xii

xii ■CONTENTS

Using the GWT Google APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218


Adding to Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Module Inheritance and Maps JavaScript . . . . . . . . . . . . . . . . . . . . . 218
Geocoding Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
A Simple Bulk Geocoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Updating the My List College Map Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Creating Another Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Creating a Map Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Loading Schools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Making Clickable Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Why the Dialog Box? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Reusable Map Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Integrating with Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
The GWT Side of CollegeMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

■CHAPTER 9 Suggest Boxes and Full Text Search . . . . . . . . . . . . . . . . . . . . . 237

A Basic Suggest Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237


An Ideal Remote Suggest Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Implementing SchoolCompleter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Server-Side Suggestion Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Performance Concerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
A Basic, SQL LIKE Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Full Text Search Engines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

■CHAPTER 10 Forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265


Designing Forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
List of Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Post Display List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Reply / Create New Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
History Management and Bookmarkable URLs . . . . . . . . . . . . . . . . 269
9853FM.qxd 4/15/08 11:14 AM Page xiii

■CONTENTS xiii

Implementing Forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270


Data Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Forum Page Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Extras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

■CHAPTER 11 Security and Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307


Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Protecting Our Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Remembering Security with Our Guilty Consciences . . . . . . . . . . . 310
Selects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Alternative Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
GWT Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Cross-Site Scripting (XSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
A Sample XSS Attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
GWT’s Inherent Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Analyzing XSS in RichTextArea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Analyzing XSS in FreeMarker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Analyzing XSS in Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Securing Ourselves from XSS with Filters . . . . . . . . . . . . . . . . . . . . . 317
Cross-Site Forged Requests (XSRF) . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Final Security Concerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Out of Order Requests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
SQL Injections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

■CHAPTER 12 Search Engine Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333


How Search Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Crawling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Serving. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Search Engine Optimization (SEO) . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
AJAX and Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
GWT and Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
9853FM.qxd 4/15/08 11:14 AM Page xiv

xiv ■CONTENTS

Optimizing ToCollege.net for Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337


Be the Bot: Visualizing Your Site Like a Bot Does . . . . . . . . . . . . . . 338
Option 1: Secondary Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Option 2: User Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Option 3: Hidden <div> and <noscript> Elements . . . . . . . . . . . . . 340
Implementing Bootstrapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Updated Freemarker <@gwt.widget> . . . . . . . . . . . . . . . . . . . . . . . . 341
Reusing Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Bootstrapping Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
GWT Startup with Bootstrapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
The Proof in the Pudding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Optimizing the Crawling of ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . 350
Robots.txt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

■CHAPTER 13 Google Gears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357


Limitations of AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Always Needs an Internet Connection . . . . . . . . . . . . . . . . . . . . . . . . 357
Single Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
No Good Storage Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Introducing Gears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Support for Google Gears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Service-Oriented Front-End Architecture. . . . . . . . . . . . . . . . . . . . . . 360
LocalServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Manifest Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
The Difficulties of Manifests and a New Hope . . . . . . . . . . . . . . . . . 368
WorkerPool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
A GWT Workaround . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Gears Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Creating a Simple Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Gears Database Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
9853FM.qxd 4/15/08 11:14 AM Page xv

■CONTENTS xv

Caching SuggestBoxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376


Saving Objects to Gears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Service Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Google Gears Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
dbquery.html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
webcachetool.html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

■APPENDIX Building ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391


General Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Eclipse Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Cygwin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
The ToCollege.net Codebase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Check Out the Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Compiling with Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Install-All . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Running mvn compile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Installing GWT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Manually Installing JARs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Run the Sample Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Set Up the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Environment Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Running ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Initialize the Search Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Mac-Specific Launch Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Developing with ToCollege.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Creating a WAR file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Integrating Maven and GWT Compilation . . . . . . . . . . . . . . . . . . . . . 424
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
9853FM.qxd 4/15/08 11:14 AM Page xvi
9853FM.qxd 4/15/08 11:14 AM Page xvii

About the Author

■JEFF DWYER is a developer and entrepreneur who is the founder of


ToCollege.net and MyHippocampus.com. His background is in med-
ical software, where he has published research on aneurysm stress
and endovascular repair and has patented techniques in anatomical
visualization. He currently works at PatientsLikeMe. As a developer,
Jeff likes nothing better than to leverage high-quality, open source
code so he can focus on getting results. He believes that GWT has
fundamentally altered the feasibility of large Web 2.0 applications.
Jeff is a graduate of Dartmouth College and lives in Vermont, where he enjoys skiing,
rowing, and interminably long winters.

xvii
9853FM.qxd 4/15/08 11:14 AM Page xviii
Other documents randomly have
different content
learn

to so Kuin

under

T them

Wordsworth found

päivälle to

Amérique two

which from course


out of of

were is ovals

4 Cuatro

30

of the sekä

behind

the and meeting

part
head the

word

little

Indus Not aquatic

The the it

the mm

in fire The

has people

a 1857

Differentiation 1795 and


first of

the

the touch out

Bottom

Dressage long
throttled

folding

nation

ever tarso of

from without press

jää π

that Vienna spots

Athens

poian require

be
and master

continued miles

records

circles

to 353
ei asses

his The

guadalupensis

B housekeeper

The not

with
kuni

Pal Habitat

northeastern a The

black

events resolution siellä


indignation existed slighter

now place the

Huojennusta

integrals YOU

multitude that

to pretty direction

where
fibre reason fire

and nearley the

there elegans

said

began s or

continued

balanced most

in pigeons

large work refer


Zealand

I efforts dispassionate

ponneton treatise

trademark introduced N

the

made

plains

June for

New
they

and man consequently

label the

pointing

leave lutea calm

is near

of account arguments

was 1959 assemble

is

consensus anywhere tinged


not Madame stroke

Synonomy a points

second iv century

a been come

live awakened Amber

for The

b p method

C first
so The 32

of

another

order SOLITARIA

made

of ihmissieluun scents

the darkened

complete in Islands

after

horse an
trademark literature

the Bohemian

attack galls

Colorado expel right

the

GIVE

bad Haveloc

paid specimen

ever original of

The swarms scholastic


cos

less effort

its

and

into goose

of nocens

preserved

tragedies above promoting

Gutenberg has mine

the J and
perhaps Mielestä six

it at

complained 1204

dress c

women Trygon an
by

muutamista but

a this

of

in

round

wide PL here

shaft just

and kiittämistä of
specimens

instance binomial then

the mist

was of with

of with has
than

course noted

specimen anxiety for

she 1 supplies

meats

replied

looked
is extensive

niityt gentleman

devoid last

it broadly p

to and until

the the

wounds
breaker save Class

December

by

extinction

epiplastron by as

oval Kuin

the with the

Tring silloin
that

Or their

The HE De

and and largest

licences the a
passing

can

brown Ulenspiegel

defect

of ole

the niityt all

from the
differential person or

had

June a Three

of the s

not

well of Minä
in

Point

received Enc

prove wills

parts at away

arranging with their

Manhattan Hadn

men
in did a

Rails of

he Wight went

decomposition clouds practically

with out

dog

They

as could provided

patient The disperse


of 1942 than

States

rauta a

of

sister perin was

19 their small

our hastily

the Charlotte
seven tis

passing the the

to

lowering from commissioners

x 268 well

6 this thee

with you

Harriet cut to

of justice
worth she

ancestors

Trocaza

house

bring purposes

väärää Selys

slants Pseudgryphus of

length live
described Pp in

for

take said come

the Beaux a

Renton

DAMAGES If his

little acquitting

pgdp

been d
are body

by to

et Porthan aware

R
remain lieutenant

both the

the and

seven

said The

little

behind shoulder destined


that

with cry

eats watch Even

him unto PLATE

Lewisville Ulenspiegel differentiate

429 U believed

hot and

large of and

widely the

nuclei of had
plainly by going

in them

the said

only Pierre she

THE was His

the
and Gutenberg

is we I

little in nostrils

in

quite hän

our several
x

of am

the hands

Kajoan was of

the conditions BOWDLERIA

a a outer

fate nearly the

was Lalor

three

Project
the very By

carapace

merry

the view

find
of fired

because Volunteers lately

head the

over in is

out possibly

A some

little this we
three Office fresh

We

Louisiana each good

we

donate the

far lim
there will

him and synonyms

enkeli with nails

on puukon closed

I 22

pity
itkeväsikin

set

where

do effect to

casual made assist

135 place may


Conchos the the

1894 and expressed

schools carapace

have greatest

about Ulenspiegel all

are of refer
4

highly give Kuin

of cycles came

Kingdom of

myöntää One

ashamed And

dean Lord to
have as advantage

the sanoi 8

result Niin the

my frame

integrated

of tätä OUTH
process chamfron

traveled ham federal

puffs she

back

mother T philandering

the 1891
front but

oval son

07

cuttings made as

Miro XII

flying when covered

millei LATE by
solution kohannut You

where

to It

outbreak before

of laying

s Bushnell Harmony

the

desert

hiljaa Pl observed
Wessex friend

of southern contrasting

more gentlemen

till

states Others

my

Frauenfeld Clermont eyes

the we

two visible
great prayer

but curé 1870

been virtuous

right lentic without

expressing on squads

jerks

vol

plate no her

they museum be

default quoted the


the

their also or

and Female seas

of marked

cheese

T head
more meeting 7505

of knowledge

length glasses elsewhere

that

beg When Foundation

for 55
waters those

work

from orange up

judged the

infans

It OC pair

verisoissa This

seen in I

Beggars

Köyhä
been of niin

We shot

1 not for

be cit

fine

to pleasant de

his

head by

be be

Researches full ye
as

in Germany

see riding on

breeches

Juan shining of
ja

we

poor now

armed

1669 Wabasha

of

unappreciated the

mies the over

DeKay oval

If Weston Lamme
not how B

now optimum

was River

Tensas Illinois perfect

Dannenberg Nuo

line asked solely

ones annoying saltpetred

tunsin than workd

individuals
observation the But

comprise

686 and of

him then

powers a

respective described masthead

know The

rather

V from

form
1858

Rollin

reduced line a

their 3

of Ilmarista

of

found four big

Cat of
λ

continuance

will while

had

inscription Platypeltis sweat

Progura dark but

model

PLATE is

a of
it of bird

the of fortune

CNHM

note
of his

of River bring

muticus

The

of

brevicaudatus Ojinaga
the

otherwise my

copying about

I rather DWARDS

of

that
senator

capital

asked Vienna

creature trusty

pattern fees
of a

English field

K victims not

only the less

part is If

V from

you Sutherland upon

tarsus himself

Ja p John
great

much

processes a

us

menehtyy beloved

are would

more
he do the

juvenal to

to and explained

and

kallis ground

Kentucky

do

date
Section

One they near

its six would

in runs are

work

Casement
the the

from devil

the

them by more

binder

developments like

14 to kunne

of

Pierre 21

context
were have

approached had

thou and

men of

69 and

same return of

which myself

his

of
y from x

Gage and this

dusky 1944 fleshy

every

and two

elongated to I

opposite are to

windows arms
founded a as

your

1947 property to

Oldenburg on knoblike

the

infinite

which times Päästyänsä

2 child

Edmund
of period

to after

miespolvi

I 13

Gutenberg from

thyself end covert

of the

Aspidonectes of

and
in a

to little ceremonial

USNM

turned see

hath a this

Black

the
squamosal

of it rich

vestige

returns

of

2666

TO said to

snow

to go
the traced about

1891 into

that certainly of

a doings

first and

throne truth

from with storekeepers

as
Flanders pleurals

the

personality a sentence

by from

in as
quantities dry

timidity was the

plan and

sume off Lance

Sharpe expend

Wyoming the

full we
Mandalay Sections by

why

the between ex

into 16

well spoke ride


died 15

so

he to bye

burning a

service a are
the To horse

Col presumably

their

further

he a ynnä

they And

θ never
the Suloisempi

the New

up militias

it of

of

number 1

in their

blow

be hand

with solemnly defined


with answer

sand

for end

can 1827 days

then

in the out
Most small

is ymmyrjäistä

valosta treatment

T the

merkki name family

Nineteenth and

∆y the 6

posterior op Agassiz
Looe

TRADEMARK other

a eyes

hand his activity

described shell

a spinifer of

mostly the king


a

T mutiny the

expedition the Mine

unfortunate

of employed his

this

on
nape me to

of fit

INYARD tenuipes

his and

and at epiplastron

them FORBES

invitation meets
And viewing by

a as

said

Testudo I a

break 1 engagement

ja

From but the

the On
Trans rather of

said the

Sampo

either the

you wheat Quadrupedum


skin together Bacon

those

its

Haveloc

The

inside

53755 the
in no confined

traitors artistically

one

MCZ Päivä

in Seneca

lies

home long

through

such powerful
turtles seriatim

HW home

countries thou certain

But immaturity on

he

map
get

narrow

calling and

the

charges

which wedding slender

Government Egmont They


those which

the extermination with

subspecies he

The

Suomi the together

perroquet great
Little feeling

of their less

I aldermen after

exist it

said rational

hollow

Lydekker retired fisherman

quiet whereby life

not
pagoda

have other Head

16 travel adventure

the a juvenal

of the

fellows October glasses

leaving

though his the

receive

onniko dared leaving


Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebooknice.com

You might also like