Home > Guides > Core Developers Guide > AJAX |
AJAX is an acronym for Asynchronous JavaScript and XML. Essentially, a JavaScript can make a HTTP request and update portions of a page directly, without going through a conventional POST or GET and refreshing the entire page. Better yet, a page can contain several JavaScripts making simultaneous (asynchronous) requests.
The key point is that when a script makes an "Ajax request" (XHR), the server doesn't know it came from a script, and handles it like any other request. One reason Ajax is so successful is that it works just fine with existing server technologies, including Struts.
It's not the Ajax request that is different, but the Ajax response. Instead of returning an entire page for the browser to display (or redisplay), an Ajax response will just return a portion of a page. The response can take the form of XML, or HTML, or plain text, another script, or whatever else the calling script may want.
Both Struts 1 and Struts 2 can return any type of response. We are not limited to forwarding to a server page. In Struts 1, you can just do something like:
In Struts 2, we can do the same thing with a Stream result.
Struts 2 can also return a JSON (JavaScript Object Notation) response, using a plugin.
On the client side, there are two basic strategies, which can be mixed and matched.
First, you can use some type of JSP tag. Here, you don't have to know very much at all about Ajax or JavaScript. The taglib does all the work, and you just have to figure out how to use the taglib. The standard Struts 2 taglib includes several Ajax JSP tags, and many third-party libraries are available, including:
Alternatively, you can use a plain-old Ajax widget on a plain-old HTML page, using libraries like Dojo, JQuery, or YUI, and the StreamResult or the JSON Plugin. Here, the sky's the limit, but you actually have to learn something about JavaScript as a language.
While Struts works fine with Ajax out-of-the-box, for added value, several Ajax-centric plugins are available.
See the Struts Plugin Repository for a complete list of Struts 2 plugins.
While server pages are most often used to generate HTML, we can use server pages to create other types of data streams. Here's an example:
In the code example, we use System.out.println
to return a JSON data stream as the response. For more about this technique, see the article Using Dojo and JSON to Build Ajax Applications.