The client engine and update engine in ZK play the roles of pitcher and catcher, rendering Ajax communication transparent to developers. Events triggered by users are encapsulated and marshaled to event listeners running at the server.
User interface rendered on browsers are surrogated on the server as POJO components, alternation made on the POJO components are reflected to the client transparently.
With programs executed at the server, developers can leverage all the Java technologies, such as Java EE and Spring, while back-end data and services are readily available.
ZK’s Server+client Fusion gives developers the freedom to leverage the best of both sides.
The server-centric solution to Ajax brings a productivity boost, robustness, and security to Web application development; while client side solutions endows Web applications with greater controllability and the ability to leverage client side resources.
ZK marries the benefits of both to bring forth a developer-centric approach where developers continue to build large scale enterprise applications with all the robustness of Java technologies, but also are offered the flexibility to work directly with ZK’s jQuery based widgets to further enhance user experience.
Write your application once & have it run anywhere, on web, mobile & tablets
The demand for applications on devices is increasing and as such so is the need to write an application once and have it be optimized for multiple platforms, whether using a mouse or touch. ZK improves this by incorporating responsive design principles meaning developers can create web applications which have an excellent user experience on desktops and tablet devices without writing separate applications.
Most vendors have a separate touch component set, but this requires implementation of a separate application. ZK has innovated one component set which adapts to various devices bringing true write once, run anywhere. There is no need to maintain different applications, one for the desktop and one for touch devices. Having written your application once, ZK supports multiple platforms for you. Read the philosophy behind or find out how to apply this feature to your application.
Object Oriented jQuery
ZK's client side implementation is based on the de facto standards, jQuery and JSON, leveraging the vast resources and enjoying the company of millions in the community.
In addition, ZK bestows client side programming with abilities such as inheritance and encapsulation, adopting the object oriented paradigm.
ZK User Interface Markup Language (ZUML) makes the design of rich user interfaces as simple as authoring HTML pages. ZUML is a variant of XUL inheriting all features available to XML, and separates the UI definition from the run-time logic.
ZUML also allows developers to automate CRUD between UI components and the data source with annotations, data binding and MVVM.
ZK's architecture is based on units of modularization which are pluggable and replaceable, enabling developers to extend and customize.
Developers are allowed to inject application specific code throughout the course of program execution, including Ajax communication, event handling, component instantiation, ZUML parsing, among numerous other implications.
Applications are executed on the server-side in ZK by default; no business logic is ever exposed to the client.
In addition, ZK protects applications against XSS, DoS, and CSRF. ZK further strengthens authentication and authorization with third party security frameworks such as Spring Security which altogether offers protection from page level to Ajax events.
Transparent Server Push
By the introduction of event queue, ZK unifies the handling of server push and Ajax events to a simple publish and subscribe mechanism, rendering server push transparent to the developers.
ZK shields developers from the complexity of multi-threaded programming that comes with server push.
Scalability and Availability
ZK has full clustering support; all UI objects are readily serializable. UI components are designed to minimize memory footprint and maximize performance by optimizing components' state and behavior.
In addition, developers can improve availability with application specific failover management implementations.