AJAX是异步JavaScript和XML的缩写。从本质上讲,一个JavaScript可以发送一个HTTP请求并直接更新页面的一部分,不用通过传统的POST或GET方式刷新整个页面。更妙的是,一个页面可以包含几个JavaScript的同步(异步)的要求。
关键的一点是,当一个脚本发送一个“Ajax请求”(XHR)时,服务器并不知道它来自哪个脚本,但可以像任何其他请求一样处理它。 Ajax如此成功的原因之一是与现有的服务器技术(包括Struts)之间进行很好的工作。
AJAX的请求是相同的,但是响应却是不同的。不是返回一整个页面或者重新显示一个页面,AJAX将返回一个页面的一部分,响应可以采取的形式包括:XML、HTML、纯文本格式,另一个脚本,或任何其他可能要调用脚本。
在Struts1和Struts2中,响应可以返回任何数据类型。Struts不局限于转发到一个服务页面,可以这样做:
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;
在Struts2中,可以使用流做同样的事情:
Java代码:
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 StringBufferInputStream("Hello World! This is a text string response from a Struts 2 Action.");
return SUCCESS;
}
}
xml文件:
<action name="text-result" class="actions.TextResult">
<result type="stream">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>