Features

Core library

  • Supports major browsers (Firefox/Gecko, Internet Explorer, Safari, Chrome, Konqueror, and Opera) but also plain HTML browsers (Links, Lynx).
  • Simple deployment in standard Java Servlet 2.4 or 3.0 containers.
  • No need for IDE plugins: it's plain old Java.
  • Equal behavior with or without support for JavaScript or Ajax, as far as possible, by using graceful degradation or progressive enhancement.
  • Efficient rendering and low latency.
  • Support for browser history navigation (back/forward buttons and bookmarks), pretty URLs with HTML5 History if available, and search engine optimization with a unified behavior for plain HTML or Ajax sessions.
  • Widget centric API that promotes component reuse and increases productivity.

Event handling

  • Uses an event listener system for server-side event handling, comparable to Java GUI frameworks (SWT, Swing).
  • Listen for keyboard, mouse, focus and scroll events, and get event details (such as mouse position, modifier buttons, or keyboard key).
  • Automatic synchronization of form field data between browser and server.
  • Possibility to hook in custom JavaScript (e.g. for client-side only event handling), and emit Java signals from this custom JavaScript.
  • Flexible Drag&Drop API.
  • Timed events and server-initiated updates ("server push"), the latter using Servlet 3.0 async features when deployed in a Servlet 3.0 container.

Native painting system

  • Unified painting API which uses the browsers native (vector) graphics support (inline VML, inline SVG, or HTML5 canvas).
  • Supports arbitrary painter paths, clipping, text, images, transformations, drop shadow.

GUI components

See also the Widget gallery for an interactive overview of built-in functionality.

Built-in security

  • Enables continuous use of HTTPS through low bandwidth requirements.
  • Built-in Cross-Site Scripting (XSS) prevention. Rendered text is always filtered against potentially malicious code, making XSS attacks against JWt applications (close to) impossible.
  • Not vulnerable to Cross-site Request Forgery (CSRF) because cookies are not needed for session tracking.
  • Not vulnerable to breaking the application logic by skipping to a particular URL, since only those events exposed in the interface can be triggered.

Testing

With JWt, event handling code constructs and manipulates a widget tree, which can easily be inspected by test code. Therefore, a test environment allows your application to be instantiated and events to be simulated in absence of a browser, short-cutting the underlying request/response cycle that would otherwise require a simulated browser.

Deployment

  • Deploy into servlet containers (Tomcat, Jetty) and application servers (JBoss).
  • Consists out of (currently four) jar files that need to be included in the IDE or used in war/ear archives.
  • No XML, except for JEE's web.xml and message resource bundles.