如果是作為客戶端的HTTP+JSON接口工程,沒有JSP等view視圖的情況下,使用Jersery框架開發絕對是第一選擇。而在基于Spring3 MVC的架構下,對HTTP+JSON的返回類型也有很好的支持。但是,在開發工作中,對功能的升級是基于既定架構是很常見的情況。本人碰到需要用開發基于Struts2的HTTP+JSON返回類型接口就是基于既定框架結構下進行的。
Struts2返回JSON有兩種方式:1.使用Servlet的輸出流寫入JSON字符串;2.使用Struts2對JSON的擴展。
一.使用Servlet的輸出流
JSON接口的實質是:JSON數據在傳遞過程中,其實就是傳遞一個普通的符合JSON語法格式的字符串而已,所謂的“JSON對象”是指對這個JSON字符串解析和包裝后的結果。
所以這里只需要將一個JSON語法格式的字符串寫入到Servlet的HttpServletResponse中,這里使用的是PrintWriter的方式,當然也可以采用Stream流的方式。需要注意的是:在調用getWriter之前未設置編碼(既調用setContentType或者setCharacterEncoding方法設置編碼), HttpServletResponse則會返回一個用默認的編碼(既ISO-8859-1)編碼的PrintWriter實例。這樣就會造成中文亂碼。而且設置編碼時必須在調用getWriter之前設置,不然是無效的。
編寫接口代碼:
這里的方法與一般的Struts2方法的區別是這里是void返回類型。
public void write() throws IOException{ HttpServletResponse response=ServletActionContext.getResponse(); /* * 在調用getWriter之前未設置編碼(既調用setContentType或者setCharacterEncoding方法設置編碼), * HttpServletResponse則會返回一個用默認的編碼(既ISO-8859-1)編碼的PrintWriter實例。這樣就會 * 造成中文亂碼。而且設置編碼時必須在調用getWriter之前設置,不然是無效的。 * */ response.setContentType("text/html;charset=utf-8"); //response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); //JSON在傳遞過程中是普通字符串形式傳遞的,這里簡單拼接一個做測試 String jsonString="{/"user/":{/"id/":/"123/",/"name/":/"張三/",/"say/":/"Hello , i am a action to print a json!/",/"password/":/"JSON/"},/"success/":true}"; out.println(jsonString); out.flush(); out.close(); }配置action
從以下的配置中可以明顯的看到配置與普通的action配置沒有任何區別,只是沒有返回的視圖而已。
<action name="write" class="json.JsonAction" method="write" />
返回值
{"user":{"id":"123","name":"張三","say":"Hello , i am a action to print a json!","password":"JSON"},"success":true} 二.使用Struts2對JSON的擴展
要使用這個擴展功能肯定需要添加支持包。經過本人的調試,這里有兩種選擇:
1.xwork-core-2.1.6.jar和struts2-json-plugin-2.1.8.jar。如果你想使用struts2-json-plugin-2.1.8.jar這種支持方式,你的xwork-core-*.jar不能選擇2.2.1及以上版本,因為xwork-core-*.jar的2.2.1及以上版本中沒有了org.apache.commons.lang等包。啟動tomcat的時候會出現:java.lang.NoClassDefFoundError: org.apache.commons.lang.xwork.StringUtils。
2.xwork-2.1.2.jar和jsonplugin-0.34.jar。如果想用jsonplugin-0.34.jar這種支持方式,那需要切換你的xwork-core-*.jar為xwork-2.1.2.jar。因為jsonplugin-0.34.jar需要com.opensymphony.xwork2.util.TextUtils這個類的支持。而xwork-core-*.jar的2.2.1以上版本均為找到該類,且在xwork-core-2.1.6.jar中也沒有該類。
最后說一句,還因為用原始構建方式而不停 主站蜘蛛池模板: 台南市| 荥经县| 武汉市| 芷江| 南江县| 梨树县| 江阴市| 长乐市| 旬邑县| 二连浩特市| 安阳市| 玉林市| 定边县| 佛教| 建宁县| 渑池县| 古田县| 惠安县| 玉龙| 崇信县| 阿拉善右旗| 巧家县| 江门市| 宜良县| 同心县| 克什克腾旗| 介休市| 璧山县| 旌德县| 宜兰县| 南部县| 项城市| 佛学| 富川| 乐业县| 乌兰县| 芜湖县| 昌乐县| 六枝特区| 磐安县| 永川市|