Javascript Proxy APIDWR can dynamically generate JavaScript from a Java API. This is done at runtime rather than compile time, so we can use it to remote control many browsers. This makes it very easy to write things like chat applications, or anything particularly dynamic.
Reverse Ajax
DWR supports 3 ways to asynchronously transfer messages from the server to the browser: Comet (long-lived HTTP connections), Polling and Piggyback. Of these Comet and Polling are active (fast but require extra network traffic) and Piggyback is passive (slower but doesn't need extra network traffic). DWR automatically selects the best method transparently to the programmer.
Script Scope
With normal servlets there are 4 scopes; application, session, page and request. DWR2 introduces a new scope: 'script'. Script scope applies to a single web page (rather than a whole browser), however long the page lives.
Annotations
If you are using Java 5 then you can make use of the new DWR annotations. New annotations include @RemoteProxy, @DataTransferObject, @RemoteMethod and @RemoteProperty.
DWR 2 also includes security features to provide automatic protection against CSRF attacks for many configurations and defaults to a mode where XSS attacks are reduced.