How to Set Maximum Difference Odoo 18 POSCeline George
Ad
Struts 2 Design and Programming A Tutorial 2nd Edition Budi Kurniawan
1. Struts 2 Design and Programming A Tutorial 2nd
Edition Budi Kurniawan download pdf
https://ebookultra.com/download/struts-2-design-and-programming-a-
tutorial-2nd-edition-budi-kurniawan/
Discover thousands of ebooks and textbooks at ebookultra.com
download your favorites today!
2. Here are some recommended products for you. Click the link to
download, or explore more at ebookultra.com
Java for the Web with Servlets JSP and EJB A Developer s
Guide to J2EE Solutions First Edition. Edition Budi
Kurniawan
https://ebookultra.com/download/java-for-the-web-with-servlets-jsp-
and-ejb-a-developer-s-guide-to-j2ee-solutions-first-edition-edition-
budi-kurniawan/
STL Tutorial and Reference Guide C Programming With the
Standard Template Library 2 (Draft) Edition David R.
Musser
https://ebookultra.com/download/stl-tutorial-and-reference-guide-c-
programming-with-the-standard-template-library-2-draft-edition-david-
r-musser/
Practical Apache Struts 2 Web 2 0 Projects 1st Edition Ian
Roughley
https://ebookultra.com/download/practical-apache-
struts-2-web-2-0-projects-1st-edition-ian-roughley/
Data Analysis A Bayesian Tutorial 2nd Edition Devinderjit
Sivia
https://ebookultra.com/download/data-analysis-a-bayesian-tutorial-2nd-
edition-devinderjit-sivia/
3. Kotlin Coroutines by Tutorial Mastering Coroutines in
Kotlin and Android 2nd Edition Raywenderlich Tutorial Team
https://ebookultra.com/download/kotlin-coroutines-by-tutorial-
mastering-coroutines-in-kotlin-and-android-2nd-edition-raywenderlich-
tutorial-team/
An Introduction to Programming Using Alice 2 2 2nd Edition
Charles W. Herbert
https://ebookultra.com/download/an-introduction-to-programming-using-
alice-2-2-2nd-edition-charles-w-herbert/
Scripting Cultures Architectural Design and Programming
Architectural Design 1st Edition Mark Burry
https://ebookultra.com/download/scripting-cultures-architectural-
design-and-programming-architectural-design-1st-edition-mark-burry/
Programming Wireless Devices with the Java 2 Platform 2nd
Edition Roger Riggs
https://ebookultra.com/download/programming-wireless-devices-with-the-
java-2-platform-2nd-edition-roger-riggs/
Practical Guide to ICP MS A Tutorial for Beginners 2nd
Edition Robert Thomas
https://ebookultra.com/download/practical-guide-to-icp-ms-a-tutorial-
for-beginners-2nd-edition-robert-thomas/
5. Struts 2 Design and Programming A Tutorial 2nd Edition
Budi Kurniawan Digital Instant Download
Author(s): Budi Kurniawan
ISBN(s): 9780980331608, 0980331609
Edition: 2nd
File Details: PDF, 10.35 MB
Year: 2008
Language: english
6. Struts 2 Design and Programming: A Tutorial
by Budi Kurniawan
Publisher: BrainySoftware
Pub Date: January 25, 2008
Print ISBN-10: 0-9803316-0-9
Print ISBN-13: 978-0-9803316-0-8
Pages: 576
Overview
Offering both theoretical explanations and real-world applications, this in-depth guide
covers the 2.0 version of Struts, revealing how to design, build, and improve Java-based
Web applications within the Struts development framework. Feature functionality is
explained in detail to help programmers choose the most appropriate feature to accomplish
their objectives, while other chapters are devoted to file uploading, paging, and object
caching.
Editorial Reviews
Product Description
Offering both theoretical explanations and real-world applications, this in-depth guide
covers the 2.0 version of Struts, revealing how to design, build, and improve Java-based
Web applications within the Struts development framework. Feature functionality is
explained in detail to help programmers choose the most appropriate feature to accomplish
their objectives, while other chapters are devoted to file uploading, paging, and object
caching.
7. Introduction
Welcome to Struts 2 Design and Programming: A Tutorial.
Servlet technology and JavaServer Pages (JSP) are the main technologies for developing
Java web applications. When introduced by Sun Microsystems in 1996, Servlet technology
was considered superior to the reigning Common Gateway Interface (CGI) because servlets
stay in memory after responding to the first requests. Subsequent requests for the same
servlet do not require re-instantiation of the servlet's class, thus enabling better response
time.
The problem with servlets is it is very cumbersome and error-prone to send HTML tags to
the browser because HTML output must be enclosed in Strings, like in the following code.
PrintWriter out = response.getWriter();
out.println("<html><head><title>Testing</title></head>");
out.println("<body style="background:#ffdddd">");
...
This is hard to program. Even small changes in the presentation, such as a change to the
background color, will require the servlet to be recompiled.
Sun recognized this problem and came up with JSP, which allows Java code and HTML tags
to intertwine in easy to edit pages. Changes in HTML output require no recompilation.
Automatic compilation occurs the first time a page is called and after it is modified. A Java
code fragment in a JSP is called a scriptlet.
Even though mixing scriptlets and HTML seems practical at first thought, it is actually a bad
idea for the following reasons:
• Interweaving scriptlets and HTML results in hard to read and hard to maintain
applications.
• Writing code in JSPs diminishes the opportunity to reuse the code. Of course, you
can put all Java methods in a JSP and include this page from other JSPs that need to
use the methods. However, by doing so you're moving away from the object-
oriented paradigm. For one thing, you will lose the power of inheritance.
• It is harder to write Java code in a JSP than to do it in a Java class. Let's face it, your
IDE is designed to analyze Java code in Java classes, not in JSPs.
• It is easier to debug code if it is in a Java class.
• It is easier to test business logic that is encapsulated in a Java class.
• Java code in Java classes is easier to refactor.
In fact, separation of business logic (Java code) and presentation (HTML tags) is such an
important issue that the designers of JSP have tried to encourage this practice right from
the first version of JSP.
JSP 1.0 allowed JavaBeans to be used for encapsulating code, thereby supported code and
presentation separation. In JSP you use <jsp:useBean> and <jsp:setProperty> to create a
JavaBean and set its properties, respectively.
8. Unfortunately, JavaBeans are not the perfect solution. With JavaBeans, method names must
follow certain naming convention, resulting in occasionally clumsy names. On top of that,
there's no way you can pass arguments to methods without resorting to scriptlets.
To make code and HTML tags separation easier to accomplish, JSP 1.1 defines custom tag
libraries, which are more flexible than JavaBeans. The problem is, custom tags are hard to
write and JSP 1.1 custom tags have a very complex life cycle.
Later an effort was initiated to provide tags with specific common functionality. These tags
are compiled in a set of libraries named JavaServer Pages Standard Tag Libraries (JSTL).
There are tags for manipulating scoped objects, iterating over a collection, performing
conditional tests, parsing and formatting data, etc.
Despite JavaBeans, custom tags, and JSTL, many people are still using scriptlets in their
JSPs for the following reasons.
• Convenience. It is very convenient to put everything in JSPs. This is okay if your
application is a very simple application consisting of only one or two pages and will
never grow in complexity.
• Shortsightedness. Writing code and HTML in JSPs seems to be a more rapid way of
development. However, in the long run, there is a hefty price to pay for building your
application this way. Maintenance and code readability are two main problems.
• Lack of knowledge.
In a project involving programmers with different skill levels, it is difficult to make sure all
Java code goes to Java classes. To make scriptlet-free JSPs more achievable, JSP 2.0 added
a feature that allows software architects to disable scriptlets in JSPs, thus enforcing the
separation of code and HTML. In addition, JSP 2.0 provides a simpler custom tag life cycle
and allows tags to be built in tag files, if effect making writing custom tags easier.
Why Servlets Are Not Dead
The advent of JSP was first thought to be the end of the day for servlets. It turned out this
was not the case. JSP did not displace servlets. In fact, today real-world applications employ
both servlets and JSPs. To understand why servlets did not become obsolete after the
arrival of JSP, you need to understand two design models upon which you can build Java
web applications.
The first design model, simply called Model 1, was born right after the JSP was made
available. Servlets are not normally used in this model. Navigating from one JSP to another
is done by clicking a link on the page. The second design model is named Model 2. You will
learn shortly why Model 1 is not recommended and why Model 2 is the way to go.
The Problems with Model 1
The Model 1 design model is page-centric. Model 1 applications have a series of JSPs where
the user navigates from one page to another. This is the model you employ when you first
learn JSP because it is simple and easy. The main trouble with Model 1 applications is that
they are hard to maintain and inflexible. On top of that, this architecture does not promote
9. the division of labor between the page designer and the web developer because the
developer is involved in both page authoring and business logic coding.
To summarize, Model 1 is not recommended for these reasons:
• Navigation problem. If you change the name of a JSP that is referenced by other
pages, you must change the name in many locations.
• There is more temptation to use scriptlets in JSPs because JavaBeans are limited and
custom tags are hard to write. However, as explained above, mixing Java code and
HTML in JSPs is a bad thing.
• If you can discipline yourself to not write Java code in JSPs, you'll end up spending
more time developing your application because you have to write custom tags for
most of your business logic. It's faster to write Java code in Java classes.
Model 2
The second design model is simply called Model 2. This is the recommended architecture to
base your Java web applications on. Model 2 is another name for the Model-View-Controller
(MVC) design pattern. In Model 2, there are three main components in an application: the
model, the view, and the controller. This pattern is explained in detail in Chapter 1, "Model
2 Applications."
Note
The term Model 2 was first used in the JavaServer Pages Specification version 0.92.
In Model 2, you have one entry point for all pages and usually a servlet or a filter acts as
the main controller and JSPs are used as presentation. Compared to Model 1 applications,
Model 2 applications enjoy the following benefits.
• more rapid to build
• easier to test
• easier to maintain
• easier to extend
Struts Overview
Now that you understand why Model 2 is the recommended design model for Java web
applications, the next question you'll ask is, "How do I increase productivity?"
This was also the question that came to servlet expert Craig R. McClanahan's mind before
he decided to develop the Struts framework. After some preliminary work that worked,
McClanahan donated his brainchild to the Apache Software Foundation in May 2000 and
Struts 1.0 was released in June 2001. It soon became, and still is, the most popular
framework for developing Java web applications. Its web site is http://struts.apache.org.
In the meantime, on the same planet, some people had been working on another Java open
source framework called WebWork. Similar to Struts 1, WebWork never neared the
popularity of its competitor but was architecturally superior to Struts 1. For example, in
Struts 1 translating request parameters to a Java object requires an "intermediary" object
10. called the form bean, whereas in WebWork no intermediary object is necessary. The
implication is clear, a developer is more productive when using WebWork because fewer
classes are needed. As another example, an object called interceptor can be plugged in
easily in WebWork to add more processing to the framework, something that is not that
easy to achieve in Struts 1.
Another important feature that WebWork has but Struts 1 lacks is testability. This has a
huge impact on productivity. Testing business logic is much easier in WebWork than in
Struts 1. This is so because with Struts 1 you generally need a web browser to test the
business logic to retrieve inputs from HTTP request parameters. WebWork does not have
this problem because business classes can be tested without a browser.
A superior product (WebWork) and a pop-star status (Struts 1) naturally pressured both
camps to merge. According to Don Brown in his blog
(www.oreillynet.com/onjava/blog/2006/10/my_history_of_struts_2.html), it all started at
JavaOne 2005 when some Struts developers and users discussed the future of Struts and
came up with a proposal for Struts Ti (for Titanium), a code name for Struts 2. Had the
Struts team proceeded with the original proposal, Struts 2 would have included coveted
features missing in version 1, including extensibility and AJAX. On WebWork developer
Jason Carreira's suggestion, however, the proposal was amended to include a merger with
WebWork. This made sense since WebWork had most of the features of the proposed Struts
Ti. Rather than reinventing the wheel, 'acquisition' of WebWork could save a lot of time.
As a result, internally Struts 2 is not an extension of Struts 1. Rather, it is a re-branding of
WebWork version 2.2. WebWork itself is based on XWork, an open source command-pattern
framework from Open Symphony (http://www.opensymphony.com/xwork). Therefore, don't
be alarmed if you encounter Java types that belong to package com.opensymphony.xwork2
throughout this book.
Note
In this book, Struts is used to refer to Struts 2, unless otherwise stated.
So, what does Struts offer? Struts is a framework for developing Model 2 applications. It
makes development more rapid because it solves many common problems in web
application development by providing these features:
• page navigation management
• user input validation
• consistent layout
• extensibility
• internationalization and localization
• support for AJAX
Because Struts is a Model 2 framework, when using Struts you should stick to the following
unwritten rules:
• No Java code in JSPs, all business logic should reside in Java classes called action
classes.
• Use the Expression Language (OGNL) to access model objects from JSPs.
• Little or no writing of custom tags (because they are relatively hard to code).
11. Upgrading to Struts 2
If you have programmed with Struts 1, this section provides a brief introduction of what to
expect in Struts 2. If you haven't, feel free to skip this section.
• Instead of a servlet controller like the ActionServlet class in Struts 1, Struts 2 uses
a filter to perform the same task.
• There are no action forms in Struts 2. In Struts 1, an HTML form maps to an
ActionForm instance. You can then access this action form from your action class
and use it to populate a data transfer object. In Struts 2, an HTML form maps
directly to a POJO. You don't need to create a data transfer object and, since there
are no action forms, maintenance is easier and you deal with fewer classes.
• Now, if you don't have action forms, how do you programmatically validate user
input in Struts 2? By writing the validation logic in the action class.
• Struts 1 comes with several tag libraries that provides custom tags to be used in
JSPs. The most prominent of these are the HTML tag library, the Bean tag library,
and the Logic tag library. JSTL and the Expression Language (EL) in Servlet 2.4 are
often used to replace the Bean and Logic tag libraries. Struts 2 comes with a tag
library that covers all. You don't need JSTL either, even though in some cases you
may still need the EL.
• In Struts 1 you used Struts configuration files, the main of which is called struts-
config.xml (by default) and located in the WEB-INF directory of the application. In
Struts 2 you use multiple configuration files too, however they must reside in or a
subdirectory of WEB-INF/classes.
• Java 5 and Servlet 2.4 are the prerequisites for Struts 2. Java 5 is needed because
annotations, added to Java 5, play an important role in Struts 2. Considering that
Java 6 has been released and Java 7 is on the way at the time of writing, you're
probably already using Java 5 or Java 6.
• Struts 1 action classes must extend org.apache.struts.action.Action. In Struts 2
any POJO can be an action class. However, for reasons that will be explained in
Chapter 3, "Actions and Results" it is convenient to extend the ActionSupport class
in Struts 2. On top of that, an action class can be used to service related actions.
• Instead of the JSP Expression Language and JSTL, you use OGNL to display object
models in JSPs.
• Tiles, which started life as a subcomponent of Struts 1, has graduated to an
independent Apache project. It is still available in Struts 2 as a plug-in.
12. Overview of the Chapters
This book is for those wanting to learn to develop Struts 2 applications. However, this book
does not stop short here. It takes the extra mile to teach how to design effective Struts
applications. As the title suggests, this book is designed as a tutorial, to be read from cover
to cover, written with clarity and readability in mind.
The following is the overview of the chapters.
Chapter 1, "Model 2 Applications" explains the Model 2 architecture and provides two
Model 2 applications, one using a servlet controller and one utilizing a filter dispatcher.
Chapter 2, "Starting with Struts" is a brief introduction to Struts. In this chapter you
learn the main components of Struts and how to configure Struts applications.
Struts solves many common problems in web development such as page navigation, input
validation, and so on. As a result, you can concentrate on the most important task in
development: writing business logic in action classes. Chapter 3, "Actions and Results"
explains how to write effective action classes as well as related topics such as the default
result types, global exception mapping, wildcard mapping, and dynamic method invocation.
Chapter 4, "OGNL" discusses the expression language that can be used to access the
action and context objects. OGNL is a powerful language that is easy to use. In addition to
accessing objects, OGNL can also be used to create lists and maps.
Struts ships with a tag library that provides User Interface (UI) tags and non-UI tags
(generic tags). Chapter 5, "Form Tags" deals with form tags, the UI tags for entering
form data. You will learn that the benefits of using these tags and how each tag can be
used.
Chapter 6, "Generic Tags" explains non-UI tags. There are two types of non-UI tags,
control tags and data tags.
HTTP is type-agnostic, which means values sent in HTTP requests are all strings. Struts
automatically converts these values when mapping form fields to non-String action
properties. Chapter 7, "Type Conversion" explains how Struts does this and how to
write your own converters for more complex cases where built-in converters are not able to
help.
Chapter 8, "Input Validation" discusses input validation in detail.
Chapter 9, "Message Handling" covers message handling, which is also one of the
most important tasks in application development. Today it is often a requirement that
applications be able to display internationalized and localized messages. Struts has been
designed with internationalization and localization from the outset.
13. Chapter 10, "Model Driven and Prepare Interceptors" discusses two important
interceptors for separating the action and the model. You'll find out that many actions will
need these interceptors.
Chapter 11, "The Persistence Layer" addresses the need of a persistence layer to
store objects. The persistence layer hides the complexity of accessing the database from its
clients, notably the Struts action objects. The persistence layer can be implemented as
entity beans, the Data Access Object (DAO) pattern, by using Hibernate, etc. This chapter
shows you in detail how to implement the DAO pattern. There are many variants of this
pattern and which one you should choose depends on the project specification.
Chapter 12, "File Upload" discusses an important topic that often does not get enough
attention in web programming books. Struts supports file upload by seamlessly
incorporating the Jakarta Commons FileUpload library. This chapter discusses how to
achieve this programming task in Struts.
Chapter 13, "File Download" deals with file download and demonstrates how you can
send binary streams to the browser.
In Chapter 14, "Security" you learn how to configure the deployment descriptor to
restrict access to some or all of the resources in your applications. What is meant by
"configuration" is that you need only modify your deployment descriptor file—no
programming is necessary. In addition, you learn how to use the roles attribute in the
action element in your Struts configuration file. Writing Java code to secure web
applications is also discussed.
Chapter 15, "Preventing Double Submits" explains how to use Struts' built-in
features to prevent double submits, which could happen by accident or by the user's not
knowing what to do when it is taking a long time to process a form.
Debugging is easy with Struts. Chapter 16, "Debugging and Profiling" discusses how
you can capitalize on this feature.
Chapter 17, "Progress Meters" features the Execute and Wait interceptor, which can
emulate progress meters for long-running tasks.
Chapter 18, "Custom Interceptors" shows you how to write your own interceptors.
Struts supports various result types and you can even write new ones. Chapter 19,
"Custom Result Types" shows how you can achieve this.
Chapter 20, "Velocity" provides a brief tutorial on Velocity, a popular templating
language and how you can use it as an alternative to JSP.
Chapter 21, "FreeMarker" is a tutorial on FreeMarker, the default templating language
used in Struts.
14. Chapter 22, "XSLT" discusses the XSLT result type and how you can convert XML to
another XML, XHTML, or other formats.
Chapter 23, "Plug-ins" discusses how you can distribute Struts modules easily as plug-
ins.
Chapter 24, "The Tiles Plug-in" provides a brief introduction to Tiles 2, an open source
project for laying out web pages.
Chapter 25, "JFreeChart Plug-ins" discusses how you can easily create web charts
that are based on the popular JFreeChart project.
Chapter 26, "Zero Configuration" explains how to develop a Struts application that
does not need configuration and how the CodeBehind plug-in makes this feature even more
powerful.
AJAX is the essence of Web 2.0 and it is becoming more popular as time goes by. Chapter
27, "AJAX" shows Struts' support for AJAX and explains how to use AJAX custom tags to
build AJAX components.
Appendix A, "Struts Configuration" is a guide to writing Struts configuration files.
Appendix B, "The JSP Expression Language" introduces the language that may help
when OGNL and the Struts custom tags do not offer the best solution.
Appendix C, "Annotations" discusses the new feature in Java 5 that is used extensively
in Struts.
Prerequisites and Software Download
Struts 2 is based on Java 5, Servlet 2.4 and JSP 2.0. All examples in this book are based on
Servlet 2.5, the latest version of Servlet. (As of writing, Servlet 3.0 is being drafted.) You
need Tomcat 5.5 or later or other Java EE container that supports Servlet version 2.4 or
later.
The source code and binary distribution of Struts can be downloaded from here:
http://struts.apache.org/downloads.html
There are different ZIP files available. The struts-VERSION-all.zip file, where VERSION is the
Struts version, includes all libraries, source code, and sample applications. Its size is about
86MB and you should download this if you have the bandwidth. If not, try struts-VERSION-
lib.zip (very compact at 4MB), which contains the necessary libraries only.
17. Sierra de Gata, 52
—— d'Estrella, 51
Sitdown, Joseph, 192
Smith, Sir Harry, and Lady, 104
Smollett's "Count Fathom," 173
Sobraon, battle of, 293
Soho, 182, 199, 207
Soignes, forest of, 289, 290, 300
Somerset, Lord Edward, 343, 353
—— Lord Fitzroy, 120
Soult, Marshal, 81, 84, 86, 109, 115, 182, 263;
advances to the relief of San Sebastian, 106;
at Orthez, 266 sqq.;
at Toulouse, 276 sqq.
South Africa, 12
South Beeveland, island of, 28
Spencer, General, 153
Spithead, 29, 142, 206
Steenkerke, 340
Stewart, ——, 262
18. —— Captain George, 263
—— Lieutenant James, 263
Stour, river, 316
Strangways, ——, 362
Strytem, 329, 330, 331, 338
Surtees, Quarter-master, 181, 182
Tagus, river, 29, 36, 153
Talavera, battle of, 30
Toulouse, 6, 13, 25, 62;
battle of, 81 sqq., 276 sqq.;
heights of, 262
Touronne, river, 67
Tormes, 74
Torres Vedras, 35;
the great hill defences of, 25;
the lines of, 30;
Wellington enters the lines of, 33;
Massena's retreat from, 62
Travers, Major, 164, 169, 175
Tres Puentes, village of, 75
19. Tweed, river, 8
Urdach, 246, 259;
heights of, 258
Ustritz, 263
Uxbridge, Lord, 333, 334;
in the retreat to Waterloo, 354 sqq.
Vadilla, river, 52
Valle, 38
Vandeleur, Sir Ormsby, 340, 353, 355, 356
Vigo, 142, 179, 185, 207, 215
Vimiero, 142, 180, 213;
Wellington at, 18;
battle of, 163 sqq., 227
Vinegar Hill, 230
Vittoria, 25, 171;
the "Rifles" at, 59, 74;
battle of, 75 sqq.
Vivian, Sir Hussey, 341, 344, 355
Wade, Lieut.-Col. Hamilton, 219
Walcheren expedition, 25, 142, 143
20. Walcot, Captain, 397
War Office administration, 311
Waterloo, allusions, 5, 14, 16, 25, 26, 120, 242, 309;
G Battery at, 15;
village of, 118, 300 sqq., 402;
retreat from Quatre Bras to, 123, 125, 297, 350;
battle of, 126 sqq., 370 sqq.;
Highlanders at, 297 sqq.;
charge of the Scots Greys at, 301 sqq.;
with the guns at, 309 sqq.;
the ridge at, 364;
after the battle, 397
Watson, Lieutenant, 284
Wavre, 124, 300, 336, 354
Wellesley, Sir Arthur (see Wellington)
Wellington, Duke of, allusions, 8, 13, 18, 26, 29, 32, 40, 46, 53,
54, 55, 62, 65, 69, 81, 106, 115, 118, 132, 148, 153, 154, 156, 163,
178;
at Vimiero, 18, 214;
severity of, 19, 20;
irritability of, 20;
satire of, 22;
retreat to the lines of Torres Vedras, 30, 33;
pursues Massena, 37, 41;
reconnaissance by, 38;
courtesy of, 40;
defeats Ney at the passage of the Ceira, 49;
indiscriminate censure by, 58;
at Sabugal, 63;
21. at Fuentes d'Onore, 66, 67;
at Salamanca, 70, 71, 73;
at Vittoria, 77;
at Toulouse, 84, 276 sqq.;
at Ciudad Rodrigo, 86, 94;
at Badajos, 99, 102;
in the Pyrenees, 105;
forethought of, 113;
in the Netherlands, 116;
at Quatre Bras, 120, 288 sqq., 335 sqq.;
withdraws to Waterloo, 124;
at Waterloo, 135, 137, 299 sqq., 311 sqq.;
at Orthez, 266 sqq.;
at Brussels, 288;
complains of his staff, 315;
resolves to stand at Waterloo, 364
Whinyates, Major, 357
White, Sir George, 104
Whitelocke, General, in Buenos Ayres, 142, 309;
court-martialled, 147
Wighton, ——, 285
Winchester, 145
Wood, Sir George Adam, 20, 21, 312, 391
Woodbridge, 317
Woolwich Military Academy, 309
Yeomen of the Guard, 26
23. THE END
Printed by Ballantyne, Hanson & Co. Edinburgh and London
UNIFORM WITH THIS VOLUME
BY
W.H. FITCHETT, B.A., LL.D.
In Paper Covers or Cloth
DEEDS THAT WON THE EMPIRE. Historic Battle Scenes. With 16
Portraits and 11 Plans.
24. FIGHTS FOR THE FLAG. With 16 Portraits and 13 Plans.
HOW ENGLAND SAVED EUROPE. The Story of the Great War, 1793-
1815. Four Volumes. With Portraits, Facsimiles, and Plans.
October, 1900.
BELL'S
Indian & Colonial Library.
Issued for Circulation in India and the Colonies only.
May be had in cloth, gilt, or in paper wrappers.
Additional Volumes are issued at regular intervals.
Aide (Hamilton).
Elizabeth's Pretenders (102).
Alexander (Mrs.).
A Choice of Evils (33).
A Ward in Chancery (40).
A Fight with Fate (117).
Mrs. Crichton's Creditor (170).
Barbara (187).
The Cost of Her Pride (249).
The Stepmother (287).
Allen (Grant).
A Splendid Sin (138).
An African Millionaire. Illustrated (173).
The Incidental Bishop (210).
Anstey (F.).
Under the Rose. Illus. (39).
Appleton (George W.).
The Co-Respondent (54).
François the Valet (267).
25. Austen (Jane).
Pride and Prejudice. Illustrated (280).
Baring Gould (S.).
Perpetua (189).
Barrett (Wilson) and Barron (Elwyn).
In Old New York (306).
Barrington (Mrs. Russell).
Helen's Ordeal (31).
Benson (E.F.).
Limitations (141).
The Babe, B.A. (144).
Bickerdyke (John).
Her Wild Oats (253).
Birrell (O).
Behind the Magic Mirror (126).
Bjornson (Bjornstjerne).
Arne, and the Fisher Lassie (6).
Bloundelle-Burton (J.).
The Seafarers (315).
Boothby (Guy).
The Woman of Death. Illustrated (346).
Bronte (Charlotte).
Shirley (78).
Broughton (Rhoda) and Bisland (Elizabeth).
A Widower Indeed (48).
26. Buchan (John).
The Half-hearted (350).
Buchanan (Robert).
Father Anthony (247).
Burgin (G.B.).
Tomalyn's Quest (142).
Settled Out of Court (255).
Hermits of Gray's Inn (264).
The Tiger's Claw (314).
Burleigh (Bennet).
The Natal Campaign. Illustrated (312)
Caird (Mona).
The Wing of Azrael (79).
Pathway of the Gods (257).
Calverley (C.S.).
Verses and Fly-Leaves (14).
Cameron (Mrs. Lovett).
A Bad Lot (46).
A Soul Astray (86).
A Man's Undoing (176).
Devils' Apples (212).
A Difficult Matter (217).
The Ways of a Widow (235).
A Fair Fraud (263).
Capes (Bernard).
Joan Brotherhood (345).
Castle (Egerton).
27. The Light of Scarthey (95).
Cobban (J.M.).
Her Royal Highness's Love Affair (191).
The Golden Tooth.
Coleridge (Christabel).
The Tender Mercies of the Good (92).
Coleridge (S.T.)
Table-Talk and Omniana (13).
Creswick (Paul).
At the Sign of the Cross Keys (328).
Crockett (S.R.).
The Men of the Moss-Hags (91).
Cushing (Paul).
God's Lad (352).
Daudet (Alphonse).
The Hope of the Family (233).
Dawe (W.C.).
The Emu's Head (119).
De la Pasture (Mrs. Henry).
Deborah of Tod's (211).
Adam Grigson (290).
Dickens (Charles).
Pickwick Papers. Illus. (18).
Bleak House (80).
Douglas (Theo.).
28. A Legacy of Hate (286).
Nemo (309).
Doyle (A. Conan).
The White Company (20).
Rodney Stone. Illus. (143).
Uncle Bernac. Illus. (168).
The Tragedy of the Korosko (204).
The Green Flag, &c. (313).
The Great Boer War (349).
Du Maurier (G).
Trilby. Illustrated (65).
The Martian. Illustrated (180).
Ebers (Georg).
An Egyptian Princess (2).
Egerton (George).
The Wheel of God (229).
Falkner (J. Meade).
Moonfleet (260).
Fenn (G. Manville).
The Star-Gazers (7).
The Case of Ailsa Gray (125).
Sappers and Miners (136).
Cursed by a Fortune (152).
High Play (203).
The Vibart Affair (268).
Finnemore (John).
The Red Men of the Dusk (295).
Fitchett (W.H.).
29. Deeds that Won the Empire. Illustrated (198).
Fights for the Flag. Illus. (248).
How England Saved Europe.
4 vols. Illustrated (323-326).
Fletcher (J.S.).
Mistress Spitfire (154).
Francis (M.E.).
A Daughter of the Soil (61).
Fraser (Mrs. Hugh).
The Looms of Time (227).
Garland (Hamblin).
Jason Edwards (250).
Gaskell (Mrs.).
Wives and Daughters (76).
Gerard (Dorothea).
Lot 13 (93).
Miss Providence (197).
Gift (Theo.).
An Island Princess (47).
Dishonoured (108).
Gissing (George).
Denzil Quarrier (26).
The Emancipated (29).
In the Year of Jubilee (42).
Eve's Ransom (60).
Born in Exile (89).
The Unclassed (99).
Human Odds and Ends (202).
30. Gordon (Lord Granville).
The Race of To-day (196).
Green (Mrs. A.K.).
Lost Man's Lane (228).
Griffith (George).
Valdar the Oft-Born. Illustrated (183).
The Virgin of the Sun (216).
The Destined Maid. Illus. (239).
Knaves of Diamonds (265).
The Great Pirate Syndicate (271).
The Rose of Judah (284).
Brothers of the Chain (291).
The Justice of Revenge.
Griffiths (Major Arthur).
Ford's Folly, Ltd. (300).
Fast and Loose (320).
Brand of the Broad Arrow (343).
The Thin Red Line.
Gunter (A.C.).
A Florida Enchantment (277).
The Princess of Copper (348).
Haggard (Lieut.-Col. Andrew).
Tempest-Torn (49).
Hardy (Thomas).
Tess of the D'Urbervilles (3).
Desperate Remedies (82).
Harradan (Beatrice).
Ships that Pass in the Night (1).
31. Harte (Bret).
Stories in Light and Shadow (252).
Jack Hamlin's Mediation, and other Stories (294).
From Sandhill to Pine (329).
Hawthorne (Julian).
A Fool of Nature (121).
Henty (G.A.).
The Woman of the Commune (96).
Hiatt (Charles).
Ellen Terry: An Appreciation (353).
Hill (Headon).
The Spies of the Wight (266).
Holland (Clive).
Marcelle of the Latin Quarter (317).
Hooper (George).
Waterloo. With Maps and Plans (10).
Hope (Anthony).
Comedies of Courtship (107).
Half a Hero (139).
Hume (Fergus).
Lady Jezebel (221).
The Rainbow Feather (261).
The Red-Headed Man (301).
The Vanishing of Tera (319).
Hunt (Violet).
The Maiden's Progress (32).
32. A Hard Woman (97).
The Way of Marriage (150).
Hutcheson (J.C.).
Crown and Anchor (135).
The Pirate Junk (156).
Hyne (C.J. Cutcliffe).
Adventures of Captain Kettle. Illustrated (244).
Further Adventures of Captain Kettle (288).
Four Red Night Caps.
Jocelyn (Mrs. R.).
Only a Flirt (171).
Lady Mary's Experiences (181).
Miss Rayburn's Diamonds (225).
Henry Massinger (278).
Jokai (Maurus).
Eyes Like the Sea (16).
Keary (C.F.).
The Two Lancrofts (44).
Kenealy (Arabella).
Some Men are Such Gentlemen (64).
Kennard (Mrs. E.).
The Catch of the County (34).
A Riverside Romance (112).
At the Tail of the Hounds (201).
Kipling (Rudyard).
Departmental Ditties. Illustrated (242).
L (X.).
33. The Limb (124).
Le Breton (John).
Mis'ess Joy (340).
Lee (Albert).
The Gentleman Pensioner (311).
Le Queux (W.).
The Eye of Istar. Illus. (167).
Whoso Findeth a Wife (188).
The Great White Queen. Illustrated (179).
Stolen Souls (194).
Scribes and Pharisees (215).
If Sinners Entice Thee (236).
England's Peril (270).
The Bond of Black (282).
Wiles of the Wicked (307).
An Eye for an Eye (336).
In White Raiment.
Little (Mrs. A.).
A Marriage in China (148).
McHugh (R.J.).
The Siege of Ladysmith. Illustrated (321).
Mallock (W.H.).
A Human Document (21).
The Heart of Life (101).
The Individualist (272).
Marsh (Richard).
In Full Cry (279).
The Goddess (334).
An Aristocratic Detective.
34. Marshall (A.H.).
Lord Stirling's Son (70).
Mathers (Helen).
Bam Wildfire (238).
Meade (Mrs. L.T.).
A Life for a Love (62).
A Son of Ishmael (134).
The Way of a Woman (174).
The Desire of Men (292).
The Wooing of Monica (302).
Meade (L.T.) and Halifax (Clifford).
Stories from the Diary of a Doctor (63).
Where the Shoe Pinches (330).
Meredith (George).
Richard Feverel (67).
Lord Ormont and his Aminta (57).
Diana of the Crossways (66).
The Egotist (68).
The Amazing Marriage (100).
The Tragic Comedians (158).
Merriman (Henry Seton).
With Edged Tools (15).
The Grey Lady. Illus. (190)
Middleton (Colin).
Without Respect of Persons. (45).
Mitford (Bertram).
John Ames, Native Commissioner (296).
Aletta: A Story of the Boer Invasion (322).
35. War and Acadia.
Morrow (W.C.).
The Ape, the Idiot, and other People (232).
Muddock (J.E.).
The Star of Fortune (27).
Stripped of the Tinsel (113).
The Lost Laird (220).
In the King's Favour (274).
Kate Cameron of Brux.
Natal (Rt. Rev. Lord Bishop of).
My Diocese during the War (327).
Nisbet (Hume).
Kings of the Sea. Illustrated (184).
The Revenge of Valerie (298).
The Empire Makers (316).
For Right and England (338).
Needell (Mrs. J.H.).
The Honour of Vivien Bruce (281).
Newland (Simpson).
Paving the Way. Illus. (246).
Blood Tracks of the Bush (341).
New Note, A. (58).
Norris (W.E.).
The Flower of the Flock (335).
Oliphant (Mrs.).
The Prodigals (9).
36. Ottolengui (R.).
The Crime of the Century (128).
Ouida.
The Fig Tree, and other Stories.
Parker (Gilbert) and others.
March of the White Guard, &c. Illustrated (28).
Paterson (Arthur).
A Man of his Word (59).
Payn (James).
In Market Overt (84).
Another's Burden (182).
Pemberton (Max).
A Gentleman's Gentleman (115).
Christine of the Hills (161).
The Phantom Army (243).
Signors of the Night (293).
Pett Ridge (W.).
A Breaker of Laws (347).
Philips (F.C.).
Poor Little Bella (200).
Phillipps-Wolley (C.).
One of the Broken Brigade (193).
The Chicamon Stone (310).
Phillpots (Eden).
Some Every-Day Folks (56).
My Laughing Philosopher (114).
Lying Prophets (155).
37. Children of the Mist (240).
Poushkin (A.).
Prose Tales. Translated by T. Keane (52).
Prescott (E. Livingston).
The Rip's Redemption (254).
The Measure of a Man (259).
Illusion (289).
Price (Eleanor C.).
Alexia (75a).
Quiller-Couch (M.).
The Spanish Maid (195).
Riddell (Mrs. J.H.).
Did He Deserve it? (169).
Footfall of Fate (332).
'Rita.'
Joan and Mrs. Carr (118).
Vignettes, & other Stories (130).
Russell (Dora).
A Torn out Page (308).
A Great Temptation.
Russell (W. Clark).
A Voyage at Anchor (303).
Sergeant (Adeline).
A Rogue's Daughter (111).
Told in the Twilight (116).
The Love Story of Margaret Wynne (237).
Blake of Oriel (285).
38. A Rise in the World (304).
Daunay's Tower (333).
Miss Cleveland's Companion.
St. Aubyn (A.).
A Proctor's Wooing (153).
A Fair Impostor (208).
Bonnie Maggie Lauder (276).
A Prick of Conscience (342).
Stables (Dr. Gordon).
The Rose of Allandale (137).
Stead (W.T.).
Real Ghost Stories (199).
Steele (Mrs.).
Lesbia (123).
Stockton (Frank R.).
The Great Stone of Sardis. Illustrated (205).
Associate Hermits (258).
Stuart (Esme).
Arrested (147).
Thackeray (W.M.).
The Newcomes (71).
Vanity Fair (72).
Thomas (Annie).
Four Women in the Case (131).
Essentially Human (166).
Dick Rivers (209).
Thomson (Basil).
39. The Indiscretions of Lady Asenath (226).
Tirebuck (W.E.).
Meg of the Scarlet Foot (234).
The White Woman (275).
Tracy (Louis).
The Final War. Illus. (186).
An American Emperor (192).
Lost Provinces. Illus. (245).
The Invaders. Illustrated.
Trollope (Anthony).
Doctor Thorne (74).
Lily Dale (75).
Tynan (Katharine).
The Way of a Maid (103).
Underwood (Francis).
Doctor Gray's Quest (83).
Vandam (Albert D.).
The Mystery of the Patrician Club (35).
French Men and French Manners (104).
Vynne (Nora).
The Priest's Marriage (305).
Wakeman (Annie).
The Autobiography of a Char-woman (344).
Walford (L.B.).
The Archdeacon (256).
Warden (Florence).
40. 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!
ebookultra.com