首先,我会想到以下两个问题:
1、Web端是如何通过Ajax发送异步请求的?又如何接收Server端响应的JSON数据?
2、Server端收到请求后,如何返回JSON数据?
?
一、使用Ajax发送异步请求,并接收Server端传回的响应数据:
?
先看JSP页面代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Struts+Ajax+JSON</title> <script type="text/javascript" src="ajax.js"></script> </head> <body> <h3>Struts2 + Ajax + JSON 整合</h3> <form action="json" method="get"> username:<input type="text" id="username" name="user.username" /><br/> password:<input type="text" id="password" name="user.password" /><br/> <input type="button" onclick="getEmail()" value="查看Email"/><br /> </form> <p>您的Email地址为:<span id="email"></span></p> </body> </html>
???
前端实现Ajax的JS代码:
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
var xmlhttp;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
if(window.ActionXObject) {
xmlhttp = new ActionXObject("Microsoft.XMLHTTP");
} else {
xmlhttp = new ActionXObject("Msxml2.XMLHTTP");
}
}
return xmlhttp;
}
//发送GET请求
function sendGetRequest(url,callback){
var xmlhttp = createXMLHttpRequest();
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
//获取服务器的响应数据
var data = xmlhttp.responseText;
callback(data);
}
}
};
xmlhttp.send(null);
}
//获取Email地址
function getEmail() {
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
var url = "json?user.username=" + username + "&user.password=" + password;
sendGetRequest(url, function(data){
var obj = eval("(" + data + ")");
document.getElementById("email").innerHTML = obj.user.email;
});
}
?
?二、使用Struts2处理异步请求并返回JSON数据:
?
Struts2中的Action代码:
package com.json.action;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import com.json.dto.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
//此方法的返回类型为void
public void execute() throws IOException {
//打印请求中的user参数
System.out.println(user.getUsername() + ":" + user.getPassword());
//---发送JSON数据---
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
user.setEmail("user1234@qq.com");
//创建JSON对象
JSONObject json = new JSONObject();
//把User对象放入Json对象中
json.accumulate("user", user);
//把Json对象转成字符串并写入响应流
out.print(json.toString());
//可以打印JSON文本看一看
System.out.print(json.toString());
out.flush();
out.close();
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
?
Action中的User类的代码:
package com.json.dto;
public class User {
private String username;
private String password;
private String email;
public User() {}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
?
struts.xml文件的配置:?
<?xml ve
