扩展Spring MVC用以支持Controller对Ajax的处理

 
Java代码 复制代码  收藏代码
  1. 扩展Spring MVC 用以支持Controller对Ajax的处理   
  2.   
  3.   
  4. pring Mvc中没有特别针对于Ajax请求的处理Controller.但是AbstractController和    
  5. SimpleFormController也是可以针对Ajax的请求给与相应的.但显得有一点点的不自然.    
  6. Java代码    
  7. @Override     
  8. protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,      
  9.         BindException ex) {      
  10.     String userId=request.getParamater("userId");      
  11.                  Map userInfoMap=userDao.getUserBaseInfo(userId);      
  12.                  JSONObject object = new JSONObject();      
  13.                  object.put("userInfoMap",userInfoMap);      
  14.     response.setContentType("text/Xml;charset=gbk");      
  15.     PrintWriter out = null;      
  16.     try {      
  17.         out = response.getWriter();      
  18.              out.println(object.toString());      
  19.                    
  20.     }      
  21.     catch (IOException ex1) {      
  22.         ex1.printStackTrace();      
  23.     }finally{      
  24.                            out.close();      
  25.                   }      
  26.     return null;      
  27. }     
  28.   
  29.         @Override  
  30.         protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,   
  31.                         BindException ex) {   
  32.                 String userId=request.getParamater("userId");   
  33.                   Map userInfoMap=userDao.getUserBaseInfo(userId);   
  34.                   JSONObject object = new JSONObject();   
  35.                   object.put("userInfoMap",userInfoMap);   
  36.                 response.setContentType("text/Xml;charset=gbk");   
  37.                 PrintWriter out = null;   
  38.                 try {   
  39.                         out = response.getWriter();   
  40.                          out.println(object.toString());   
  41.                             
  42.                 }   
  43.                 catch (IOException ex1) {   
  44.                         ex1.printStackTrace();   
  45.                 }finally{   
  46.                             out.close();   
  47.                    }   
  48.                 return null;   
  49.         }   
  50. 说明一下我向客户端页面response的是一个JSon对象,选择JSon这种数据格式的两个原因是:    
  51.   
  52.   
  53. 体积小可降低流量.    
  54. Js端解码十分方便,Js对JSon格式数据有原生的支持.    
  55.   
  56. 使用Spring Mvc原有的SimpleFormController,从上边的例子上看是可以实现的,但是每次都要写"将JSonObject写入流,关流的代码.很累,很麻纺."    
  57. 所以,扩展了两个新的Controller,以简化对Ajax请求的处理.    
  58. JSONObjectAbstractController 用于简单的从request.getParamater参数的情况.    
  59. JSONObjectAbstractController 的原代码:    
  60. Java代码    
  61. package com.javaest.ext.spring.mvc.controller;      
  62.      
  63. import java.io.IOException;      
  64. import java.io.PrintWriter;      
  65.      
  66. import javax.servlet.http.HttpServletRequest;      
  67. import javax.servlet.http.HttpServletResponse;      
  68.      
  69. import net.sf.json.JSONObject;      
  70.      
  71. import org.springframework.web.servlet.ModelAndView;      
  72. import org.springframework.web.servlet.mvc.AbstractController;      
  73.      
  74. public abstract class JSONObjectAbstractController extends AbstractController {      
  75.      
  76.     @Override     
  77.     protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)      
  78.             throws Exception {      
  79.         JSONObject jsonObject = handleAjaxRequestInternal(request, response);      
  80.         response.setContentType("text/Xml;charset=gbk");      
  81.         PrintWriter out = null;      
  82.         try {      
  83.             out = response.getWriter();      
  84.             out.println(jsonObject.toString());      
  85.         }      
  86.         catch (IOException ex1) {      
  87.             ex1.printStackTrace();      
  88.         }      
  89.         finally {      
  90.             out.close();      
  91.         }      
  92.      
  93.         return null;      
  94.     }      
  95.      
  96.     protected abstract JSONObject handleAjaxRequestInternal(HttpServletRequest httpServletRequest,      
  97.             HttpServletResponse httpServletResponse) throws Exception;      
  98.      
  99. }     
  100.   
  101. package com.javaest.ext.spring.mvc.controller;   
  102.   
  103. import java.io.IOException;   
  104. import java.io.PrintWriter;   
  105.   
  106. import javax.servlet.http.HttpServletRequest;   
  107. import javax.servlet.http.HttpServletResponse;   
  108.   
  109. import net.sf.json.JSONObject;   
  110.   
  111. import org.springframework.web.servlet.ModelAndView;   
  112. import org.springframework.web.servlet.mvc.AbstractController;   
  113.   
  114. public abstract class JSONObjectAbstractController extends AbstractController {   
  115.   
  116.         @Override  
  117.         protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)   
  118.                         throws Exception {   
  119.                 JSONObject jsonObject = handleAjaxRequestInternal(request, response);   
  120.                 response.setContentType("text/Xml;charset=gbk");   
  121.                 PrintWriter out = null;   
  122.                 try {   
  123.                         out = response.getWriter();   
  124.                         out.println(jsonObject.toString());   
  125.                 }   
  126.                 catch (IOException ex1) {   
  127.                         ex1.printStackTrace();   
  128.                 }   
  129.                 finally {   
  130.                         out.close();   
  131.                 }   
  132.   
  133.                 return null;   
  134.         }   
  135.   
  136.         protected abstract JSONObject handleAjaxRequestInternal(HttpServletRequest httpServletRequest,   
  137.                         HttpServletResponse httpServletResponse) throws Exception;   
  138.   
  139. }   
  140.   
  141. JSONObjectSimpleFormController 用于自动将请求参数绑定到Command对象的情况.    
  142. JSONObjectSimpleFormController 的代码:    
  143. Java代码    
  144. package com.javaest.ext.spring.mvc.controller;      
  145.      
  146. import java.io.IOException;      
  147. import java.io.PrintWriter;      
  148.      
  149. import javax.servlet.http.HttpServletRequest;      
  150. import javax.servlet.http.HttpServletResponse;      
  151.      
  152. import net.sf.json.JSONObject;      
  153.      
  154. import org.springframework.validation.BindException;      
  155. import org.springframework.web.servlet.ModelAndView;      
  156. import org.springframework.web.servlet.mvc.SimpleFormController;      
  157.      
  158. public abstract class JSONObjectSimpleFormController extends SimpleFormController {      
  159.      
  160.     @Override     
  161.     protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,      
  162.             BindException ex) {      
  163.         JSONObject object = onAjaxSubmit(request, response, cmd, ex);      
  164.      
  165.         response.setContentType("text/Xml;charset=gbk");      
  166.         PrintWriter out = null;      
  167.         try {      
  168.             out = response.getWriter();      
  169.             out.println(object.toString());      
  170.         }      
  171.         catch (IOException ex1) {      
  172.             ex1.printStackTrace();      
  173.         }      
  174.         finally {      
  175.             out.close();      
  176.         }      
  177.      
  178.         return null;      
  179.     }      
  180.      
  181.     public abstract JSONObject onAjaxSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,      
  182.             BindException ex);      
  183.      
  184. }     
  185.   
  186. package com.javaest.ext.spring.mvc.controller;   
  187.   
  188. import java.io.IOException;   
  189. import java.io.PrintWriter;   
  190.   
  191. import javax.servlet.http.HttpServletRequest;   
  192. import javax.servlet.http.HttpServletResponse;   
  193.   
  194. import net.sf.json.JSONObject;   
  195.   
  196. import org.springframework.validation.BindException;   
  197. import org.springframework.web.servlet.ModelAndView;   
  198. import org.springframework.web.servlet.mvc.SimpleFormController;   
  199.   
  200. public abstract class JSONObjectSimpleFormController extends SimpleFormController {   
  201.   
  202.         @Override  
  203.         protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,   
  204.                         BindException ex) {   
  205.                 JSONObject object = onAjaxSubmit(request, response, cmd, ex);   
  206.   
  207.                 response.setContentType("text/Xml;charset=gbk");   
  208.                 PrintWriter out = null;   
  209.                 try {   
  210.                         out = response.getWriter();   
  211.                         out.println(object.toString());   
  212.                 }   
  213.                 catch (IOException ex1) {   
  214.                         ex1.printStackTrace();   
  215.                 }   
  216.                 finally {   
  217.                         out.close();   
  218.                 }   
  219.   
  220.                 return null;   
  221.         }   
  222.   
  223.         public abstract JSONObject onAjaxSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,   
  224.                         BindException ex);   
  225.   
  226. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值