spring使用了jackson类库,帮助我们在java对象和json、xml数据之间的互相转换。他可以将控制器返回的对象直接转换成json数据,供客户端使用。客户端也可以传送json数据到服务器进行直接转换。
SpringMVC层跟JSon结合,几乎不需要做什么配置.
1.Spring注解@ResponseBody,@RequestBody
Spring 3.X系列增加了新注解@ResponseBody,@RequestBody
- @RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。
- @ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。
2.、HttpMessageConverter请求信息转换器.
HttpMessageConverter接口指定了一个可以把Http request信息和Http response信息进行格式转换的转换器。通常实现HttpMessageConverter接口的转换器有以下几种:
HttpMessageConverter请求信息转换器执行流程:
当用户发送请求后,@Requestbody 注解会读取请求body中的数据,默认的请求转换器HttpMessageConverter通过获取请求头Header中的Content-Type来 确认请求头的数据格式,从而来为请求数据适配合适的转换器。例如contentType:applicatin/json,那么转换器会适配 MappingJacksonHttpMessageConverter。响应时候的时候同理,@Responsebody注解会启用 HttpMessageConverter,通过检测Header中Accept属性来适配的响应的转换器。
3.开启<mvc:annotation-driven />做了哪些工作
<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,和初始化了7个HttpMessageConverter实现.
ByteArrayHttpMessageConverter StringHttpMessageConverter ResourceHttpMessageConverter SourceHttpMessageConverter XmlAwareFormHttpMessageConverter Jaxb2RootElementHttpMessageConverter MappingJacksonHttpMessageConverter
4.测试ajxa请求.
由上的准备工作开始,准备依赖jar.
pom.xml:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.5</version> </dependency>
mapper依赖core,如果是maven管理,只需配置mapper即可.
配置web.xml:
<servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc_servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
配置springmvc_servlet.xml :
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <!-- 开启注解扫描 --> <context:component-scan base-package="com.zt.*"></context:component-scan> <!--开启 注解解析,默认会注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter, 还有一些HttpMessageConverter实现实例 --> <mvc:annotation-driven /> </beans>
javaBean:
public class User { private String name; private String status; //...... }
编写controller.
@Controller @RequestMapping("/myajax") public class MyAjaxController { @RequestMapping("/test1") public @ResponseBody List<User> test1(String uname) throws Exception { String uname2 = new String(uname.getBytes("iso8859-1"), "gbk"); System.out.println(uname2); List<User> list = new ArrayList<User>(); list.add(new User("张三", "123")); list.add(new User("李四", "456")); return list; } }
编写jsp,并发送ajax请求.
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> <script> function createAjaxObj() { var req; if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else { req = new ActiveXObject("Msxml2.XMLHTTP"); //ie } return req; } function sendAjaxReq() { var req = createAjaxObj(); req.open("get", "myajax/test1.do?uname=张三"); req.setRequestHeader("accept", "application/json"); req.onreadystatechange = function() { //ajax引擎接收服务端的响应,但数据不一定正确 if (req.readyState == 4) { //ajax引擎接收服务端的响应,且数据一定正确,即响应码是200 if (req.status == 200) { var result = req.responseText; //使用eval函数将json字符串转化为json对象 var obj = eval('(' + result + ')'); //遍历json,创建节点,获取值. for ( var i = 0; i < obj.length; i++) { var newdiv = document.createElement("div"); newdiv.innerHTML = obj[i].name; document.getElementById("div1").appendChild(newdiv); } } } }; req.send(null); } </script> </head> <body> <a href="javascript:void(0);" onclick="sendAjaxReq();">测试</a> </body> </html>
测试结果:
继续测试jquery中的ajax请求:
在controller中继续添加请求方法:
/** * 提交表单并进行运算. */ @RequestMapping("/add") public @ResponseBody Integer add( @RequestParam(value = "inputNumber1", required = true) Integer inputNumber1, @RequestParam(value = "inputNumber2", required = true) Integer inputNumber2) { // 实现运算 Integer sum = inputNumber1 + inputNumber2; System.out.println("sum: " + sum); // @ResponseBody 会自动的将返回值转换成JSON格式 // 但是你必须添加jackson的jar包!!! return sum; }
jsp:
<script> $(function() { $("#demo1").click( function() { /* $.post("myajax/add.do", { // $.get("myajax/add.do", { inputNumber1 : $("#inputNumber1").val(), inputNumber2 : $("#inputNumber2").val() }, function(data) { $("#sum").replaceWith('<span id="sum">' + data + '</span>'); }); */ $.ajax({ type : 'post', url : 'myajax/add.do', dataType : 'json', data : { inputNumber1 : $("#inputNumber1").val(), inputNumber2 : $("#inputNumber2").val() }, success : function(data) { $("#sum").replaceWith( '<span id="sum">' + data + '</span>'); }, error : function() { alert('Err...'); } }); }); }); </script> </head> <body> <p> 计算并返回值</p> <div style="border: 1px solid #ccc; width: 250px;"> Add Two Numbers: <br /> <input id="inputNumber1" type="text" size="5"> + <input id="inputNumber2" type="text" size="9"> <input type="submit" id="demo1" value="Add" /> <br /> Sum: <br> <span id="sum">(Result will be shown here)</span> </div> <br> </body>
测试结果:
继续测试@RequestBody将json格式的数据转化为对象.
在controller中添加请求方法:
/** * 测试@RequestBoby */ @RequestMapping("/login") public @ResponseBody User login(@RequestBody User user) { System.out.println("-----"); System.out.println(user); return user; }
在jsp中:
<script> $(function() { $("#buttonId").click(function() { $.ajax({ type : 'POST', contentType : 'application/json', url : 'myajax/login.do', processData : false, dataType : 'json', data : '{"name":"xx","status":"zz"}', success : function(data) { alert( "\nname: "+ data.name + "\nstatus: "+ data.status); }, error : function() { alert('Err...'); } }); }); }); </script> </head> <body> <hr> <p>测试@RequestBoby</p> <button id="buttonId">测试@RequestBoby</button> </body>
测试结果:
相关推荐
当用户发起请求时,Spring MVC的DispatcherServlet会拦截这个请求,然后根据请求信息找到对应的HandlerMapping,进一步调用相应的Controller处理业务逻辑。Controller处理完后,会返回一个ModelAndView对象,包含着...
在Spring MVC中,可以通过配置Ajax处理器或使用jQuery等库来实现Ajax请求。这样,用户可以进行数据的增删查改,而界面保持不刷新,提升了交互性。 在给定的"Spring + Hibernate + Spring mvc +Ajax 整合"项目中,...
总结起来,这个"一个实用了spring mvc和ajax异步请求的例子"涵盖了Web开发中的重要概念,包括Spring MVC的Controller设计、RESTful API的实现以及Ajax的异步数据交互。这样的组合使得Web应用更加动态,用户体验更佳...
这个项目提供的示例工程应该包含了一个工作流程的完整实例,从Ajax请求到Spring MVC的处理,再到JSON响应的返回,帮助开发者理解并掌握这一技术栈的使用。通过深入研究和实践,你将能够熟练地在自己的项目中应用这些...
在本篇文档中,我们主要探讨了使用Spring MVC和Ajax技术实现导出和导入XML文件的功能。这一技术在Web开发中十分常见,用于在客户端与服务器之间传输数据,且常常用于文件操作场景。 首先,我们来看文档中提及的导入...
例如,当用户在前端进行某些操作,如提交表单,我们可以使用Ajax发送POST请求到Spring MVC的Controller,Controller处理业务逻辑后,将结果以JSON或其他格式返回。JavaScript接收到响应后,可以在前端动态更新页面,...
**Spring3 MVC与Ajax整合详解** 在Web应用开发中,Spring3 MVC框架和Ajax技术的结合使用能够极大地提升用户体验,实现页面的无刷新更新。本文将深入探讨如何在Spring3 MVC项目中集成Ajax,以便更好地理解这两者的...
总结,结合Spring MVC和Ajax实现的文件上传方案,能够提供流畅、高效的用户体验,同时保持良好的控制层和业务处理逻辑。通过对前端和后端的合理设计,我们可以创建一个安全、用户友好的文件上传系统。在实际项目中,...
首先,Spring MVC是Spring框架的一个组件,专门用于处理Web应用程序的请求和响应。它遵循模型-视图-控制器(MVC)架构模式,将业务逻辑、数据和用户界面分离,使得代码更易于维护和扩展。 Ajax,全称Asynchronous ...
1. **配置Spring MVC**:在Spring的配置文件中,我们需要定义DispatcherServlet和相应的视图解析器,如InternalResourceViewResolver,以便Spring MVC能够处理请求并返回视图。 2. **创建Controller**:编写一个...
本压缩包“spring_mvc_ajax.zip”包含了关于如何结合SpringMVC框架与Ajax技术来实现异步请求的示例和资源。下面将详细介绍这两个技术及其相互配合的应用。 SpringMVC是Spring框架的一部分,它是一个轻量级的模型-...
**Spring MVC + Ajax 用户登录增删改查功能详解** 在Web开发中,Spring MVC和Ajax是两种非常重要的技术。Spring MVC作为Spring框架的一部分,提供了一种模型-视图-控制器的架构模式,使得开发者能够更好地组织和...
- **jQuery Ajax**:Spring MVC常与jQuery库结合使用,通过$.ajax()或$.get()、$.post()等方法发送Ajax请求。在后端,你需要创建一个处理Ajax请求的Controller方法,使用@RequestMapping注解来定义URL路径。 ```...
从创建Ajax请求,到控制器处理请求,再到数据的序列化和反序列化,以及错误处理和UI更新,这些都是开发者在实际工作中需要掌握的关键技能。通过实践和理解这些知识点,可以有效地提升Web应用的性能和用户交互体验。
4. **AJAX支持**:通过jQuery和JSON,Spring 2.5更好地支持了异步请求和响应。 5. **更多注解驱动的开发**:例如,@ModelAttribute用于将请求参数绑定到模型对象,@InitBinder用于初始化数据绑定行为。 至于...
了解如何定义控制器类、处理请求映射、REST风格的支持等。 - **数据类型转换**:Spring Web MVC提供了类型转换机制,能够自动地将请求参数转换为控制器方法所需的类型。这包括内置类型转换器和自定义类型转换器的...
在Spring MVC中,Ajax的支持使得页面能够异步与服务器交互,提供更好的用户体验。本文将深入探讨Spring MVC如何支持Ajax以及相关的注解,如`@RequestBody`和`@ResponseBody`。 首先,`<mvc:annotation-driven/>`在...
三、Spring MVC核心流程图:描述了Spring MVC处理请求的流程,包括前端控制器接收请求,经过分发器分发给具体的控制器,然后由控制器处理业务逻辑,最后将结果返回给用户。 四、Spring MVC DispatcherServlet说明:...
十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 <mvc:annotation-driven /> 到底做了什么工作 二十、...
十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 <mvc:annotation-driven /> 到底做了什么工作