首先需准备json相关的六个核心jar包,链接如下
https://download.youkuaiyun.com/download/kuzma_/11692802
需新建一个json.jsp文件,核心代码如下
<s:form method="post" namespace="/">
<s:textfield name="username" label="用户名" id="username"></s:textfield>
<s:password name="password" label="密码" id="password"></s:password>
<tr>
<td colspan="2">
<input type="submit" value="提交" οnclick="login();">
</td>
</tr>
</s:form>
js代码如下
function login(){
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
$.ajax({
type:"POST",
url:"JsonAction",
data:{username:username,password:password},
dataType:"json",
success:function(data){
var result = jQuery.parseJSON(data);//将字符串转换成json对象
alert(data);
alert(result);
alert(result["username"]);
alert(result["password"]);
}
})
}
然后还需新建一个JsonAction类用来处理前端发过来的请求,核心代码如下
public class JsonAction extends ActionSupport{
private String username;
private String password;
private String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
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 executeAjax() throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
map.put("username", getUsername());
map.put("password", getPassword());
JSONObject json = JSONObject.fromObject(map);
result = json.toString();
System.out.println("map['username']: " + map.get("username"));
return SUCCESS;
}
}
需要特别注意的是变量result是前台需要返回的数据,所以该变量必须有setter和getter方法,否则数据不能传回前台。
最后需要配置struts.xml文件,核心代码如下:
<package name="ccnuJson" extends="struts-default,json-default">
<action name="JsonAction" class="com.ccnu.action.JsonAction" method="executeAjax">
<result type="json">
<param name="root">result</param>
</result>
</action>
</package>
此处有三个特别需要注意的地方
1.必须继承json-default包,因为只有在该包下才有json类型的Result,否则会报错
2.<action>标签的method的method一定要配置
3.必须配置root参数,因为该参数将json字符串返回给前台