在刚刚做的需求中用到了json调用,总的来说有以下几步:
1 配置web.xml文件
添加servlet-mapping,支持json结尾的url
<servlet-mapping> <servlet-name>WebxController</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping>
2 配置pipeline.xml
使用PerformJsonValve解析json结尾的请求
<when extension="json"> <valve class="com.alibaba.china.common.webx.valve.PerformJsonValve"/> </when>
3 在web模块对应的screen包中增加一个继承NoTemplateModule的Screen类
public class FeedsCount extends NoTemplateModule {
public void execute(RunData rundata, NoTemplateContext context) throws WebxException {
String value="value";
context.put("feedsCount", value);
}
}
写法和写普通的Screen类几乎一致,只是过程中有个偷梁换柱,把TemplateContext替换成了NoTemplateContext.但 对于使用者来说,体会不到中间的差别.
4 页面调用
<script src="http://style.china.alibaba.com/js/yui/utilities.js" type="text/javascript"></script> <script src="http://style.china.alibaba.com/js/yui/json-min.js" type="text/javascript"></script> <script type="text/javascript"> YAHOO.util.Connect.asyncRequest("GET","$URL$",{ success: function (r) { var j = YAHOO.lang.JSON.parse(r.responseText); alert(j.$value$); }, failure: function (r) { alert("err"); } }); </script>
5 这也可在程序中直接调用,将对象转为json
import java.util.Collection;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonUtil {
public static String toJson(Object bean) {
if (bean == null) return "null";
if (bean instanceof Collection || bean.getClass().isArray()) return JSONArray.fromObject(bean).toString();
return JSONObject.fromObject(bean).toString();
}
}