文章翻译自Struts 2官方文档。
AJAX是Asynchronous JavaScript and XML的首字母缩略词。本质上,JavaScript能产生一个HTTP请求并立即更新部分页面,而不是通过传统的POST或者GET方式并更新整个页面。然而更好的是,一个页面可以包含若干产生同步(异步)请求的JavaScript。
关键点是当一个脚本产生一个“AJAX请求”(XHR)时,服务器不知道这个请求来自一个脚本,并且像其他请求一样处理它。AJAX如此成功的一个原因是,它和现有的包括Struts在内的服务器技术一起工作得很好。
不是Ajax请求不同,而是Ajax响应。Ajax响应仅仅返回浏览器显示(或者重新显示)页面的一部分,而不是返回整个页面。这个响应可以是XML形式,或者HTML,或者普通文本,另一个脚本,或者调用脚本想要的任何其他东西。
Struts 1和Struts 2都能返回任意类型的响应。我们并不限制跳转到一个服务器页面。在Struts 1中,你可以做一些像下面这样的事情:
response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Hello World! This is an AJAX response from a Struts Action."); out.flush(); return null;
在Struts 2中,我们可以用字节流(Stream)result做同样的事情。
还有更容易的方式!
一般来说,使用Struts 2插件(例如,JSON插件,jQuery插件,等等)比直接从action向响应输出更好。更多细节参考下面章节。
Struts 2 Stream result Action
package actions; import java.io.InputStream; import java.io.StringBufferInputStream; import com.opensymphony.xwork2.ActionSupport; public class TextResult extends ActionSupport { private InputStream inputStream; public InputStream getInputStream() { return inputStream; } public String execute() throws Exception { inputStream = new ByteArrayInputStream("Hello World! This is a text string response from a Struts 2 Action.".getBytes("UTF-8")); return SUCCESS; } }
Struts 2 Configuring the TextResult Action
<action name="text-result" class="actions.TextResult"> <result type="stream"> <param name="contentType">text/html</param> <param name="inputName">inputStream</param> </result> </action>
提示:使用插件,Struts 2也可以返回JSON(JavaScript Object Notation)响应。
在客户端,有两种基本的策略,这两个策略可以混合使用也可以分开使用。
首先,你可以使用一些JSP标签类型。在这里,你不需要知道所有关于Ajax或者JavaScript的知识。标签库做了所有的事情,你只需要关注如何使用这些标签库。标准的Struts 2标签库包含若干Ajax JSP标签,也可获得许多第三方库,包括:
作为选择,你可以在普通HTML页面使用普通Ajax小部件(widget),使用 Dojo, jQuery,或则 YUI,和SteamResult或者 JSON插件。在这里,虽然篇幅有限,但是你实际上已经学习了JavaScript语言的的一部分。 Ajax插件