使用Struts 2开发应用02:AJAX

文章翻译自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),使用 DojojQuery,或则 YUI,和SteamResult或者 JSON插件。在这里,虽然篇幅有限,但是你实际上已经学习了JavaScript语言的的一部分。 Ajax插件

猜你喜欢

转载自a2429854489.iteye.com/blog/2285509