国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Struts2 Result 返回JSON對象詳解

2019-11-26 14:12:03
字體:
來源:轉載
供稿:網友

  如果是作為客戶端的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中也沒有該類。

  最后說一句,還因為用原始構建方式而不停

主站蜘蛛池模板: 台南市| 荥经县| 武汉市| 芷江| 南江县| 梨树县| 江阴市| 长乐市| 旬邑县| 二连浩特市| 安阳市| 玉林市| 定边县| 佛教| 建宁县| 渑池县| 古田县| 惠安县| 玉龙| 崇信县| 阿拉善右旗| 巧家县| 江门市| 宜良县| 同心县| 克什克腾旗| 介休市| 璧山县| 旌德县| 宜兰县| 南部县| 项城市| 佛学| 富川| 乐业县| 乌兰县| 芜湖县| 昌乐县| 六枝特区| 磐安县| 永川市|