`
zhkac
  • 浏览: 52798 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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

阅读更多

pring Mvc中没有特别针对于Ajax请求的处理Controller.但是AbstractController和    

SimpleFormController也是可以针对Ajax的请求给与相应的.但显得有一点点的不自然. 

@Override     
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,      
        BindException ex) {      
    String userId=request.getParamater("userId");      
                 Map userInfoMap=userDao.getUserBaseInfo(userId);      
                 JSONObject object = new JSONObject();      
                 object.put("userInfoMap",userInfoMap);      
    response.setContentType("text/Xml;charset=gbk");      
    PrintWriter out = null;      
    try {      
        out = response.getWriter();      
             out.println(object.toString());      
                   
    }      
    catch (IOException ex1) {      
        ex1.printStackTrace();      
    }finally{      
                           out.close();      
                  }      
    return null;      
} 

 

 @Override  
        protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,   
                        BindException ex) {   
                String userId=request.getParamater("userId");   
                  Map userInfoMap=userDao.getUserBaseInfo(userId);   
                  JSONObject object = new JSONObject();   
                  object.put("userInfoMap",userInfoMap);   
                response.setContentType("text/Xml;charset=gbk");   
                PrintWriter out = null;   
                try {   
                        out = response.getWriter();   
                         out.println(object.toString());   
                            
                }   
                catch (IOException ex1) {   
                        ex1.printStackTrace();   
                }finally{   
                            out.close();   
                   }   
                return null;   
        }   

 

说明一下我向客户端页面response的是一个JSon对象,选择JSon这种数据格式的两个原因是:    

1.体积小可降低流量.    

 2.Js端解码十分方便,Js对JSon格式数据有原生的支持.     

 

使用Spring Mvc原有的SimpleFormController,从上边的例子上看是可以实现的,但是每次都要写"将JSonObject写入流,关流的代码.很累,很麻烦."   

所以,扩展了两个新的Controller,以简化对Ajax请求的处理.    

JSONObjectAbstractController 用于简单的从request.getParamater参数的情况.    

JSONObjectAbstractController 的原代码:    

 

package com.javaest.ext.spring.mvc.controller;      
     
import java.io.IOException;      
import java.io.PrintWriter;      
     
import javax.servlet.http.HttpServletRequest;      
import javax.servlet.http.HttpServletResponse;      
     
import net.sf.json.JSONObject;      
     
import org.springframework.web.servlet.ModelAndView;      
import org.springframework.web.servlet.mvc.AbstractController;      
     
public abstract class JSONObjectAbstractController extends AbstractController {      
     
    @Override     
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)      
            throws Exception {      
        JSONObject jsonObject = handleAjaxRequestInternal(request, response);      
        response.setContentType("text/Xml;charset=gbk");      
        PrintWriter out = null;      
        try {      
            out = response.getWriter();      
            out.println(jsonObject.toString());      
        }      
        catch (IOException ex1) {      
            ex1.printStackTrace();      
        }      
        finally {      
            out.close();      
        }      
     
        return null;      
    }      
     
    protected abstract JSONObject handleAjaxRequestInternal(HttpServletRequest httpServletRequest,      
            HttpServletResponse httpServletResponse) throws Exception;      
     
}    

 

 

package com.javaest.ext.spring.mvc.controller;   
  
import java.io.IOException;   
import java.io.PrintWriter;   
  
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
import net.sf.json.JSONObject;   
  
import org.springframework.web.servlet.ModelAndView;   
import org.springframework.web.servlet.mvc.AbstractController;   
  
public abstract class JSONObjectAbstractController extends AbstractController {   
  
        @Override  
        protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)   
                        throws Exception {   
                JSONObject jsonObject = handleAjaxRequestInternal(request, response);   
                response.setContentType("text/Xml;charset=gbk");   
                PrintWriter out = null;   
                try {   
                        out = response.getWriter();   
                        out.println(jsonObject.toString());   
                }   
                catch (IOException ex1) {   
                        ex1.printStackTrace();   
                }   
                finally {   
                        out.close();   
                }   
  
                return null;   
        }   
  
        protected abstract JSONObject handleAjaxRequestInternal(HttpServletRequest httpServletRequest,   
                        HttpServletResponse httpServletResponse) throws Exception;   
  
} 

 

JSONObjectSimpleFormController 用于自动将请求参数绑定到Command对象的情况.    

JSONObjectSimpleFormController 的代码:    

package com.javaest.ext.spring.mvc.controller;      
     
import java.io.IOException;      
import java.io.PrintWriter;      
     
import javax.servlet.http.HttpServletRequest;      
import javax.servlet.http.HttpServletResponse;      
     
import net.sf.json.JSONObject;      
     
import org.springframework.validation.BindException;      
import org.springframework.web.servlet.ModelAndView;      
import org.springframework.web.servlet.mvc.SimpleFormController;      
     
public abstract class JSONObjectSimpleFormController extends SimpleFormController {      
     
    @Override     
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,      
            BindException ex) {      
        JSONObject object = onAjaxSubmit(request, response, cmd, ex);      
     
        response.setContentType("text/Xml;charset=gbk");      
        PrintWriter out = null;      
        try {      
            out = response.getWriter();      
            out.println(object.toString());      
        }      
        catch (IOException ex1) {      
            ex1.printStackTrace();      
        }      
        finally {      
            out.close();      
        }      
     
        return null;      
    }      
     
    public abstract JSONObject onAjaxSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,      
            BindException ex);      
     
}

 

package com.javaest.ext.spring.mvc.controller;   
  
import java.io.IOException;   
import java.io.PrintWriter;   
  
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
import net.sf.json.JSONObject;   
  
import org.springframework.validation.BindException;   
import org.springframework.web.servlet.ModelAndView;   
import org.springframework.web.servlet.mvc.SimpleFormController;   
  
public abstract class JSONObjectSimpleFormController extends SimpleFormController {   
  
        @Override  
        protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,   
                        BindException ex) {   
                JSONObject object = onAjaxSubmit(request, response, cmd, ex);   
  
                response.setContentType("text/Xml;charset=gbk");   
                PrintWriter out = null;   
                try {   
                        out = response.getWriter();   
                        out.println(object.toString());   
                }   
                catch (IOException ex1) {   
                        ex1.printStackTrace();   
                }   
                finally {   
                        out.close();   
                }   
  
                return null;   
        }   
  
        public abstract JSONObject onAjaxSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,   
                        BindException ex);   
  
}  

 

 

分享到:
评论

相关推荐

    Pro Spring MVC With Web Flow

    Spring MVC is a modern web application framework built upon the Spring Framework, and Spring Web Flow is a project that complements Spring MVC for building reusable web controller modules that ...

    spring mvc利用ajax向controller传递对象的方法示例

    主要给大家介绍了关于spring mvc利用ajax向controller传递对象的相关资料,文中通过示例代码将步骤介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习吧。

    精通Spring.MVC

    Spring MVC is a modern web application framework built upon the Spring Framework, and Spring Web Flow is a project that complements Spring MVC for building reusable web controller modules that ...

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

    spring mvc 使用jquery 传json值给Controller时需要解决的问题

    NULL 博文链接:https://effort0829.iteye.com/blog/2111511

    spring-mvc-controller

    Spring MVC 控制器 使用 Spring MVC 的控制器层进行迭代的不同方式。 通过表格请求。 通过ajax请求。 通过 bean 进行参数化。 Bean 验证

    Picker:Spring MVC +Hibernate

    Picker的后台使用Spring MVC+hibernate+mysql,实现添加书籍,提问、做笔记,上传附件、照片,关注用户、关注问题,私信、好友动态,好友圈等功能。下面是功能交互图:#package介绍Controller层 .controller: 提供了...

    Spring MVC中Ajax实现二级联动的简单实例

    后台Controller: @RequestMapping(/faultType) @ResponseBody public Map<String> faultType(int id,HttpServletRequest request)throws IOException { String ReturnMessage = ; //获取所有子类故障类型 List...

    springboot+dubbo分布式架构,提供分布式缓存、分布式锁、分布式Session、读写分离

    MVC: 基于spring mvc注解,Rest风格Controller。Exception统一管理。 缓存和Session:注解redis缓存数据,Spring-session和redis实现分布式session同步,重启服务会话不丢失。 数据同步:基于redis的分布式锁。 Web...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    2.1.2 MVC模式的处理过程 2.2 Model规范 2.2.1 Model1规范 2.2.2 Model2规范 2.3 使用MVC的优劣 2.3.1 使用MVC模式的好处 2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 ...

    信息管理系统开发MVC框架源码

    这是一款采用了ext.net+ibatis.net+spring.net(接管controller)技术搭建的开发框架,代码干净,已包含基础的系统功能模块。 可以快速上手开发企业的信息管理系统,也可提供oracle 11g版本框架非常适合二次开发人员...

    SpringMVC+Jquery实现Ajax功能

    SpringMVC:是基于Spring的一个子框架(MVC框架),功能强于Spring,这个框架主要是解决咱们Controller这一层的问题。 M:model-模型User V:view-视图jsp C:Controller-控制器servlet jQuery框架:是一个程序员使用...

    简单的SSM.txt

    Springmvc就是spring框架的一个模块,所以它可以和spring框架可以进行无缝整合,它是一个基于mvc设计思想的前端web框架,主要作用就是对前端请求进行处理。他的前端控制器是一个servlet.它的请求拦截是基于方法级别的....

    毕业设计基于ssm框架的购物管理系统源码+数据库

    项目结构描述: 该项目中有五个子模块。 shop-manager模块负责导入该项目所需要的所有依赖包。 shop-web模块负责存放前端代码以及项目的配置文件。 shop-controller模块负责...后台使用spring+spring mvc+mybatis框架。

    基于物联网汽车驾驶智能辅助系统设计.pdf

    系统的前端使用AJAX动态无刷新技术,后端使用Spring MVC框架来处理逻辑功能。系统的数据库使用MySql技术,数据采集和分析使用了多种传感器,如HC-SR04超声波传感器、MQ-3酒精传感器等。 系统的主要功能包括: 1. ...

    SpringBoot视频教程 快速上手

    第三章:SpringBoot之MVC支持 第一节:@RequestMapping配置url映射 第二节:@Controller处理http请求 第三节:@RestController处理ajax请求 第四节:@PathVariable获取url参数 第五节:@RequestParam获取请求参数 第...

    SpringMVC Employee Demo

    driven配置、InitBinder注解、数据的格式化、JSR303数据校验、错误消息的显示及国际化、Ajax返回JSON、使用HttpMessageConverter、国际化_通过超链接切换中英文、文件上传、自定义的拦截器、拦截器的零Xml配置、异常...

    Java课程设计-java web 网上商城,后台商品管理(前后端源码+数据库+文档) .zip

    确定系统的技术栈,如使用Spring MVC作为MVC框架、Hibernate或MyBatis作为ORM框架、Spring Security进行权限控制等。 环境搭建: 搭建开发环境,包括安装JDK、配置Servlet容器(如Tomcat)、配置数据库(如MySQL)...

    java网上购物系统(毕业设计专用!!)帮导入,帮运行!

    这是一个基于ssm框架的购物系统 适用于即将毕业的计算机专业大学生的毕业项目 本项目用 IDEA 2019 Navicat15 javaJDK1.8 tomcat8.5.76 Maven3.6.1 ...4. 后台使用spring+spring mvc+mybatis框架。

    智能发票识别系统后台.zip

    Spring MVC + Spring + JDBC搭建后端框架,Controller负责接收请求,Service负责主要业务逻辑,Dao负责数据库访问 算法端用C++编写,java后端通过多线程+socket+TCP与算法端通讯,利用对象锁完成线程调度 利用redis...

Global site tag (gtag.js) - Google Analytics