在Action中以Struts2的方式輸出JSON數(shù)據(jù)的實例
下面是整個Action的完整代碼:
package cn.ysh.studio.struts2.json.demo.action; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import net.sf.json.JSONObject; import cn.ysh.studio.struts2.json.demo.bean.User; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; //將會被Struts2序列化為JSON字符串的對象 private Map<String, Object> dataMap; /** * 構(gòu)造方法 */ public UserAction() { //初始化Map對象 dataMap = new HashMap<String, Object>(); } /** * 測試通過action以視圖方式返回JSON數(shù)據(jù) * @return */ public String testByJSP() { User user = new User(); user.setId("123"); user.setName("JSONActionJSP"); user.setPassword("123"); user.setSay("Hello world !"); JSONObject jsonObject=new JSONObject(); jsonObject.accumulate("user", user); jsonObject.accumulate("success", true); //這里在request對象中放了一個data,所以struts的result配置中不能有type="redirect" ServletActionContext.getRequest().setAttribute("data", jsonObject.toString()); return SUCCESS; }; /** * 測試通過action以Struts2默認(rèn)方式返回JSON數(shù)據(jù) * @return */ public String testByAction() { // dataMap中的數(shù)據(jù)將會被Struts2轉(zhuǎn)換成JSON字符串,所以這里要先清空其中的數(shù)據(jù) dataMap.clear(); User user = new User(); user.setId("123"); user.setName("JSONActionStruts2"); user.setPassword("123"); user.setSay("Hello world !"); dataMap.put("user", user); // 放入一個是否操作成功的標(biāo)識 dataMap.put("success", true); // 返回結(jié)果 return SUCCESS; } /** * 通過action是以傳統(tǒng)方式返回JSON數(shù)據(jù) * @throws IOException */ public void doAction() throws IOException{ HttpServletResponse response=ServletActionContext.getResponse(); //以下代碼從JSON.java中拷過來的 response.setContentType("text/html"); PrintWriter out; out = response.getWriter(); //將要被返回到客戶端的對象 User user=new User(); user.setId("123"); user.setName("JSONActionGeneral"); user.setPassword("JSON"); user.setSay("Hello , i am a action to print a json!"); JSONObject json=new JSONObject(); json.accumulate("success", true); json.accumulate("user", user); out.println(json.toString()); // 因為JSON數(shù)據(jù)在傳遞過程中是以普通字符串形式傳遞的,所以我們也可以手動拼接符合JSON語法規(guī)范的字符串輸出到客戶端 // 以下這兩句的作用與38-46行代碼的作用是一樣的,將向客戶端返回一個User對象,和一個success字段 // String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONActionGeneral\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}"; // out.println(jsonString); out.flush(); out.close(); } /** * Struts2序列化指定屬性時,必須有該屬性的getter方法,實際上,如果沒有屬性,而只有g(shù)etter方法也是可以的 * @return */ public Map<String, Object> getDataMap() { return dataMap; } }
完整的struts.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="json" extends="json-default" namespace="/test"> <action name="testByAction" class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByAction"> <result type="json"> <!-- 這里指定將被Struts2序列化的屬性,該屬性在action中必須有對應(yīng)的getter方法 --> <!-- 默認(rèn)將會序列所有有返回值的getter方法的值,而無論該方法是否有對應(yīng)屬性 --> <param name="root">dataMap</param> <!-- 指定是否序列化空的屬性 --> <!-- <param name="excludeNullProperties">true</param> --> <!-- 這里指定將序列化dataMap中的那些屬性 --> <!-- <param name="includeProperties"> userList.* </param> --> <!-- 這里指定將要從dataMap中排除那些屬性,這些排除的屬性將不被序列化,一半不與上邊的參數(shù)配置同時出現(xiàn) --> <!-- <param name="excludeProperties"> SUCCESS </param> --> </result> </action> </package> <package name="default" extends="struts-default" namespace="/"> <action name="testJSONFromActionByGeneral" class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="doAction"> </action> <action name="testByJSP" class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByJSP"> <result name="success">/actionJSP.jsp</result> </action> </package> </struts>
以上這篇在Action中以Struts2的方式輸出JSON數(shù)據(jù)的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決IntelliJ IDEA 控制臺輸出中文亂碼問題(史上最簡單)
這篇文章主要介紹了史上最簡單的IntelliJ IDEA 控制臺輸出中文亂碼問題的解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05Java中的權(quán)重算法(如Dubbo的負(fù)載均衡權(quán)重)詳解
這篇文章主要介紹了Java中的權(quán)重算法(如Dubbo的負(fù)載均衡權(quán)重)詳解,負(fù)載均衡,其含義就是指將負(fù)載進行平衡、分?jǐn)偟蕉鄠€操作單元上進行運行,例如FTP服務(wù)器、Web服務(wù)器、企業(yè)核心應(yīng)用服務(wù)器和其它主要任務(wù)服務(wù)器等,從而協(xié)同完成工作任務(wù),需要的朋友可以參考下2023-08-08hibernate關(guān)于session的關(guān)閉實例解析
這篇文章主要介紹了hibernate關(guān)于session的關(guān)閉實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02Java實現(xiàn)精準(zhǔn)Excel數(shù)據(jù)排序的方法詳解
在數(shù)據(jù)處理或者數(shù)據(jù)分析的場景中,需要對已有的數(shù)據(jù)進行排序,在Excel中可以通過排序功能進行整理數(shù)據(jù),而在Java中,則可以借助Excel表格插件對數(shù)據(jù)進行批量排序,下面我們就來學(xué)習(xí)一下常見的數(shù)據(jù)排序方法吧2023-10-10使用resty Quartz執(zhí)行定時任務(wù)的配置方法
這篇文章主要為大家介紹了使用resty?Quartz來執(zhí)行定時任務(wù)的配置方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03SpringBoot項目接入Nacos的實現(xiàn)步驟
SpringBoot項目使用nacos作為配置中心和服務(wù)注冊中心,同時兼容dubbo的注冊中心。 本Demo項目使用的SpringBoot版本是2.3.9.RELEASE2021-05-05