在B/S结构中,json数据的交互也是十分常用的,尤其是在Ajax的某些异步交互时。
现在来记录一下服务器端返回Json数据的大概:
正如标题所说,这是Struts2框架,所以先配置网站的web.xml:
...<!--关于struts2部分-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
然后是配置struts.xml:
...
<package name="upload" namespace="/" extends="struts-default">
<action name="getJson" class="com.utils.Contrlor"><!--Contrlor就是负责响应action的类-->
</action>
</package>
...
然后就是
public class Contrlor extends ActionSupport{
/**
* gopain
*/
private static final long serialVersionUID = 6015784889350333698L;
public void execute() {
//....
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html");
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}finally{
out.close();
}
out.println(new JSONObject().accumulate("code", "OK").accumulate("pic", name).toString());
out.close();
//....
//return SUCCESS;
}
}
out.println(new JSONObject().accumulate("code", "OK").accumulate("pic", name).toString());
这是返回Json数据的关键语句,其实都是关键语句啦,如果有多个键-值只需要在.toString()前多几个.accumulate(key, value)就可以了。value也可以是对象,这个很好理解吧。
然后就是浏览器端访问。
jquery:
jQuery.get("getJson",null,function(data){
var json = eval('('+data+')');
alert(data);
alert(json.code);
});
这样就可以啦!