struts2 ajax请求方法
struts2作为一个mvc框架,请求一个方法,返回一个页面,当post请求成功之后,跳转到success页面,大多数情况下能够满足我们的要求,但是web开发中ajax技术的使用是不可避免的,我们知道ajax请求大多数情况下需要的数据是json格式。我们如何让struts这个mvc框架作为一个restful服务器,提供rest api,显得尤为重要,虽然这时候不能完全体现mvc框架的职能。
struts2实现json请求,可以有两种方式:
第一种
通过struts2-json-plugin插件,这种方式需要在struts.xml中配置action,而且package需要继承json-struts,另外还需要配置结果资源。
<package name="cymooc" extends="project-base,json-default" namespace="/">
<action name="activity_list" class="com.great.cymooc.module.m.web.MobelAction"
method="activity_list">
<result name="success">/m/activity_list.jsp</result>
<result name="suc" type="json">
<param name="root">activity_list</param>
</result>
</action>
package需要继承json-default
result的type值是json
param名为root的参数就是我们在 action中定义的activity_list变量
第二种
传统的输出流,向ajax请求写结果
package com.xxx.struts.action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
public class BaseAction {
public String ajax(Object out){
PrintWriter writer = null;
try {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json;charset=utf-8");
writer = response.getWriter();
response.setDateHeader("Expires", 0);
JSONObject object = JSONObject.fromObject(out);
writer.write(object.toString());
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(writer!=null){
writer.close();
}
}
return null;
}
}
package com.xxx.struts.action;
import java.util.HashMap;
import java.util.Map;
public class UserAction extends BaseAction{
public String json(){
Map<String, Object> result = new HashMap<String, Object>();
result.put("code", 200);
result.put("msg", "success");
result.put("error", "没有错误信息");
return ajax(result);
}
}