SSM將后台獲取的數據轉換成json格式傳遞到前台頁面


1、后台從數據庫中獲取數據,傳遞到response中

這一步折騰了我一整天,不知道是因為沒有傳遞到response中還是其他的原因,在前台獲取的data,使用alert(data)輸出的一直為空值或null
有兩種方式可以實現這一步。一是利用注解@ResponseBody,二是利用PrintWriter。最終我是通過@ResponseBody成功完成了這一步,而不知道為什么利用PrintWriter總是寫不成功,具體的原因我后面再研究研究吧。下面來介紹下這兩種實現方式:

(1)@ResponseBody,即將方法返回值寫到response對象中,代碼如下:

 

[java] view plain  copy
 
  1. <span style="font-family:Comic Sans MS;">        @RequestMapping("/addAction.do")  
  2.     <strong>@ResponseBody//將返回結果寫到response中</strong>  
  3.     public String save(HttpServletRequest request,HttpServletResponse response,Model model,@RequestParam(value="photo",required=false)MultipartFile filedata) throws IllegalArgumentException, IllegalAccessException{  
  4.          //PrintWriter out=null;  
  5.         if(filedata!=null&&!filedata.isEmpty()){  
  6.             //獲取圖片的文件名  
  7.             String fileName=filedata.getOriginalFilename();  
  8.             //獲取圖片的擴展名  
  9.             String extensionName=fileName.substring(fileName.lastIndexOf(".")+1);  
  10.             //新的圖片名=獲取時間戳+"."圖片擴展名  
  11.             String newFileName=String.valueOf(System.currentTimeMillis())+"."+extensionName;  
  12.             System.out.println(picUrl);  
  13.             //將圖片上傳到服務器  
  14.             //saveFile(newFileName,filedata);  
  15.             saveFile(fileName,filedata);  
  16.             //將圖片名稱保存至數據庫  
  17.              //photoService.insert(fileName);  
  18.         }  
  19.   
  20.           
  21.         JSONArray jsonArray=new JSONArray();  
  22.         for(int i=10;i<30;i++){  
  23.             Photo p=photoService.getPhotoById(new BigDecimal(i));  
  24.             jsonArray.add(p);  
  25.         }  
  26.           
  27.         //獲取單個json對象  
  28.         /*JSONObject json=null; 
  29.         Photo p1=photoService.getPhotoById(new BigDecimal(3)); 
  30.         json=JSONObject.fromObject(p1);*/  
  31.         return jsonArray.toString(); 
  32.     }
 


這里我是利用net.sf.json.JSONArray;將從數據庫讀取的對象轉換成了json格式。
說到這里,就要提下,要導入的jar包
要使程序可以運行必須引入JSON-lib包,JSON-lib包同時依賴於以下的JAR包:

 

[html] view plain  copy
 
  1. <span style="font-family:Comic Sans MS;">commons-lang.jar  
  2. commons-beanutils.jar  
  3. commons-collections.jar  
  4. commons-logging.jar   
  5. ezmorph.jar  
  6. json-lib-2.2.2-jdk15.jar</span>  


這幾個jar包缺一不可,不然會報錯。
我的maven中pom.xml文件的配置如下:

 

[html] view plain  copy
 
  1. <span style="font-family:Comic Sans MS;">                <!-- json依賴的jar包 -->  
  2.         <dependency>  
  3.         <groupId>net.sf.json</groupId>  
  4.         <artifactId>json-lib</artifactId>  
  5.         <version>2.2.2</version>  
  6.         </dependency>  
  7.           
  8.         <dependency>  
  9.         <groupId>commons-beanutils</groupId>  
  10.         <artifactId>common-beanu</artifactId>  
  11.         <version>1.0</version>  
  12.         </dependency>  
  13.           
  14.         <dependency>  
  15.         <groupId>commons-collections</groupId>  
  16.         <artifactId>commons-collections</artifactId>  
  17.         <version>3.2.1</version>  
  18.         </dependency>  
  19.           
  20.         <dependency>  
  21.         <groupId>commons-logging</groupId>  
  22.         <artifactId>commons-logging</artifactId>  
  23.         <version>1.1.1</version>  
  24.         </dependency>  
  25.           
  26.         <dependency>  
  27.         <groupId>commons-lang</groupId>  
  28.         <artifactId>commons-lang</artifactId>  
  29.         <version>2.1</version>  
  30.         </dependency>  
  31.           
  32.         <dependency>  
  33.         <groupId>ezmorph</groupId>  
  34.         <artifactId>ezmorph</artifactId>  
  35.         <version>1.0.6</version>  
  36.         </dependency></span>  


(2) 利用PrintWriter實現如下:

 

[java] view plain  copy
 
  1. <span style="font-family:Comic Sans MS;">                 response.setCharacterEncoding("UTF-8");  
  2.          response.setHeader("Cache-Control", "no-cache");    
  3.          response.setContentType("application/json");  
  4.          PrintWriter out=null;  
  5.          try {  
  6.             out=response.getWriter();  
  7.             out.print(json.toString());  
  8.             out.flush();  
  9.             out.close();  
  10.         } catch (IOException e) {  
  11.             e.printStackTrace();  
  12.         }</span>  

 

2、前台獲取獲取后台傳遞的json數據,利用jquery的ajax,代碼如下:

 

[html] view plain  copy
 
  1. <span style="font-family:Comic Sans MS;">        function photo(){  
  2.     var val;  
  3.     $.ajax({  
  4.         async:false,  
  5.         type:'get',//get是獲取數據,post是帶數據的向服務器發送請求  
  6.         url:'addAction.do',  
  7.         dataType:'json',  
  8.         success:function(data){  
  9.             val=eval(data);//轉換成js對象  
  10.             alert(val[2].name);  
  11.             alert(data);  
  12.         },  
  13.         error:function(data){  
  14.             alert("JSON數據獲取失敗,請聯系管理員!");  
  15.         }  
  16.     });  
  17. }</span>  


主要是把ajax的相關參數弄明白,上述獲取數據的過程也就清楚了。

3、將json字符串解析為js對象,獲取對象的相關值

 

[html] view plain  copy
 
  1. <span style="font-family:Comic Sans MS;">val=eval(data);//轉換成js對象  
  2. alert(val[2].name);這一行代碼便可以獲取對應的name值。</span>  


感覺這三步寫起來很簡單,但是在實現過程中,我還是思考了很久的,主要是第一步的過程一直不行,導致第二步獲得的值為空,這里總結下希望以后
不會再在這個地方卡住,通過這個過程,我也明白了SSM前台和后台交互的過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM