Echo services are responsible for producing browser-understandable output. The Service
interface contains two methods: getId()
and service()
. The getId()
method is responsible for returning a unique alphanumeric string as an identifier (it may also contain underscores). The service()
method, which takes a Connection
as a parameter, is responsible for rendering the output to the provided Connection
.
Many Echo services will render their output in the form of HTML code. ComponentPeer
objects also render HTML code to generate browser-ready representations of server side Component
objects. Echo provides an HTML-generation infrastructure in order to facilitate the needs of these objects. The fundamental difference between Service
s and ComponentPeer
s in this regard is that Service
s are responsible for rendering entire HTML documents, while ComponentPeer
s are only responsible for rendering a sepcific part of the document. Service
s will invoke the render()
methods of ComponentPeer
s such that they provide their portion of the HTML document that the Service
is rendering.
When an HTML document is rendered, it is first represented in memory as a hierarchy of nextapp.echoservlet.html.Element
objects. This hierarchy is assembled via calls to Element
's add()
method. Attributes may be set on each element using the addAttribute()
method. When the hierarchy has been fully assembled, the render()
method is invoked on the root element. The render()
method takes a java.io.PrintWriter
as one of its parameters. All rendering is done by sending output to this PrintWriter
. This architecture dispenses with the need to do heavy-duty string concatenation on rendering. It also provides for capabilities where a ComponentPeer
may render code in multiple parts of an HTML document.
nextapp.echoservlet.html
PackageThe nextapp.echoservlet.html
package contains classes used in producing HTML documents. The Element
class is contained in this package, and is the most fundamental building block when creating HTML documents. Element
s are assembled into hierarchies which can be rendered into HTML documents. The html
package also provides provides classes for creating "style" and "script" HTML elements, whose content has significant formatting restrictions.
HtmlDocument
ClassThe HtmlDocument
class is not a part of the html
package; it is instead located in the core nextapp.echoservlet
package. While the classes of the html
package are used for generic HTML code generation, the HtmlDocument
class is specifically intended to provide a backbone for creating HTML documents rendered by Echo Service
s. The HtmlDocument
provides convenient methods of creating both content-containg and frameset HTML documents.
ClientObjects
ClassThe ClientObjects
class is used throughout Echo to generate URIs and JavaScript object names. It is a very simple class which contains only static methods, and as such, may not be instantiated. As an example of its use, a component peer might invoke the ClientObjects.getServiceUri()
method when rendering an <img>
element to determine the Echo URI of the service which will provide the image data.
Many Echo services output data which is not in HTML. Echo services are capable of rendering other text formats and even binary data. These capabilities of Echo services will be used to render content such as JavaScript include files, images, multimedia content, and downloadable files.