(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