Docland's example program is based on the Struts MailReader application. DXe is used to add dynamic personalised presenatation layers to this application.
- Posted by: Garrett XXX
- Posted on: July 03 2003 08:49 EDT
The Docland XML Engine(DXe) enables web developers to move beyond today's monolithic approach to web content generation and to utilise powerful component based techniques for building web pages and other XML documents.
With DXe, the presentation layer of a web application can be developed as a set of reusable XML components. These components can be assembled in hierarchical fashion to generate the web pages for the application.
DXe is modelled on "multiple class inheritance" as used in some object oriented programming languages.
Using DXe, a web page can be assembled from smaller components - each component encapsulating some characteristic of the page.
DXe builds pages at run time. Runtime assembly enables powerful customisation of web pages.
The Docland XML Engine is a Java servlet filter that process the output of Servlets and JSPs.
DXe parses the XML generated by a servlet or JSP and generates a web page by combining this dynamic content with other components. The other components can be local (on the same server) or remote (on other servers), and may contain static content read from files, or dynamic content - such as the results of database queries.
DXe is therefore an ideal companion for Java application frameworks such as Struts 1.0 and 1.1.
Download the documentation and the working Struts based example (.war file) from www.docland.com/download.html (You DON'T have to fill in the registration form if you don't want to).
Documentation and executables are included in the downloads, as well as source code for taglibs and for the example application.
For more information visit www.docland.com or e-mail email@example.com
Looks interesting. I wonder how it compare to Tiles on the layout part of Struts. Tiles also provides the different page components with layout inheritance.
Tiles and DXe do address the same task of assembling pages from gragments. However,
DXe is unique (as far as we can determine) in the way that it handles merging of document fragments to produce web pages.
Tiles builds pages by inserting dynamically generated content into fixed locations identified by <tiles:> tags in a template. As such, it is a extention of an "include" mechanism, similar to, but more sophisticated than, the JSP "dynamic include" mechanism.
DXe can also be seen as an "include" mechanism, but the unique feature of DXe is that it attempts to merge the pages by identifying elements that are common to both the "including page" and the "included page". The resulting page is generated by merging the pages with reference to these common elements.
DXe refers to this process as "inheritance" because the process is more akin to the way an OO language handles the construction of classes using inheritance, than it is to an include file mechanism.
When a page (A) "inherits" from another component (B), the content of page (A) is distributed within the structure of page (B) according to some simple "rules of thumb". The same result could be achieved using an "include" mechanism, but it would require Page A to be developed as severl separate fragments ( or tiles) , and page "B" to include these, each in a different location.
DXe's benefit therefore is that it enables developers to factor web pages into seperate reusable components, without reference to how or where on the resulting page each element of the component will be placed. For example, if you want to add a feature to your page that places a button on a menu and adds some informative text about the new button to a sidebar or footnote of a page, these can be packaged as a single component, and inherited in a single operation.
DXe also enables page fragments to be developed as complete web pages, so that standard web developemtn tools can be used to develop and maintain the fragments.
One down-side of DXe components is that the page assembly process must take place after all dynamic content has been generated (its done in a servlet filter). This does add a small additional delay to the response time. However, this also enables DXe to be used to perform sophisticated "Edge-Side include" functionality where assembly is performed on or near the client, rather than on the server.