⑴ jsp頁面通過action獲取不到json數據
JSP頁面接收不到ACTION返回的JSON數據是因為在struts的配置文件中返回數據類型指定錯誤導致,正確的方法是指定application/json返回。
1、在action的配置中寫法如下:
<action name="write" class="json.JsonAction" method="write" />
2、在具體要返回的方法中寫法如下:
public void write() throws IOException{
HttpServletResponse response=ServletActionContext.getResponse();
/*
* 在調用getWriter之前未設置編碼(既調用setContentType或者setCharacterEncoding方法設置編碼),
* HttpServletResponse則會返回一個用默認的編碼(既ISO-8859-1)編碼的PrintWriter實例。這樣就會
* 造成中文亂碼。而且設置編碼時必須在調用getWriter之前設置,不然是無效的。
* */
response.setContentType("application/json;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();
}
⑵ struts2 global-exception-mappings global-results 配置在使用json包失效的問題
把struts-default 改為json-default,完畢
⑶ struts2配置文件中返回json怎樣接收的呢
Action返回的json前台用ajax可以接受,如果不是ajax發出的請求最好用定義域傳值,request.setAttribute()
⑷ struts2 json配置文件
LZ是新手,struts2 return null時是不會去執行配置文件的<result>的,出來當然沒有數據。多看看基礎的東西吧
⑸ struts2 怎樣讀取json數據
一.認識JSON
JSON是一種輕量級、基於文本、與語言無關的數據交換格式,可以用文本格式的形式來存儲或表示結構化的數據。
二.POST請求與Content-Type: application/json
常用的HTTP請求方法有GET, POST, PUT, DELETE等。在提交POST請求時,請求數據放在消息體(Body)中,請求數據的格式及編碼方式用Content-Type來指定。如我們常用的表單<form>提交,其Content-Type默認為application/x-www-form-urlencoded,提交的數據按照key1=val1&key2=val2進行編碼,伺服器端也能很容易地解析K-V值。
JSON的出現,讓交換的數據不再僅限於簡單的K-V結構,而可以有更加復雜的層級,特別適合於RESTful介面。在發送請求時,指定Content-Type為application/json,即可使用JSON字元串作為請求的數據。而在伺服器端接收到該請求後,將按照JSON字元串對請求數據進行處理。
三.Struts2接收JSON請求
在Struts2的Action中提取Content-Type為application/x-www-form-urlencoded的POST參數,我們非常熟悉:在Action中定義屬性及其getter, setter方法,接收到請求時,默認會將與屬性同名的參數值賦予該屬性。
但是對Content-Type為application/json的請求數據,Struts2默認無法解析。因為請求的JSON數據需從輸入流中讀取出來,無法直接從ServletRequest的請求參數中解析。很容易想到,要讀取JSON請求數據,最直接的方式就是從輸入流讀取。而同時,Struts2的strus2-json-plugin也提供了有關的攔截器,對JSON請求數據進行解析。下面將對兩種方案進行分析:
1.從輸入流中讀取JSON請求數據,以下是在Action中實現的一個讀取輸入流數據的方法
解析得到JSON對象後,遍歷JSON對象,取出K-V,通過反射的V設置給予K相同的屬性
開發者可根據自己的需求進行選擇:從輸入流直接讀取JSON請求數據,或使用struts2-json-plugin對JSON請求數據進行處理。
⑹ struts2配置文件中 type="json"無法使用
struts 的配置文件中的package要繼承json-default ,把原來的struts-default 換掉就好了
⑺ struts2怎麼返回json數據
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN"
"
<struts>
<packagename=""extends="json-default"namespace="">
<actionname=""class=""method="">
<resulttype="json">
以下是變數名為loginUser對象的某些指定屬性
<paramname="includeProperties">
loginUser.id,
loginUser.loginName,
loginUser.name,
loginUser.roleNames
</param>
以下是變數名為loginUser對象的全部屬性,多個對象用逗號
<paramname="includeProperties">
loginUser.*,
loginUser1.*
</param>
以下是集合里的某些指定屬性
<paramname="includeProperties">
weekScheles[d+].id,
weekScheles[d+].startDate,
weekScheles[d+].endDate,
weekScheles[d+].title,
weekScheles[d+].scheleCount
</param>
</result>
</action>
</package>
</struts>
注意package標簽,extends要寫成json-default
Struts2處理JSON只需要在xml文件里就可以完成,但是要注意,能夠直接作為JSON返回的必須是Action類里的屬性,方法中的屬性不能使用此方式直接返回