`
H.Z
  • 浏览: 16749 次
  • 来自: 长沙
社区版块
存档分类
最新评论

spring之spring mvc 处理ajax请求

 
阅读更多

    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接口的转换器有以下几种:

ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;

 

StringHttpMessageConverter:   负责读取字符串格式的数据和写出二进制格式的数据;

 

 ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据; 

 

FormHttpMessageConverter:       负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入 application/x-www-from-urlencoded和multipart/form-data格式的数据;

 

MappingJacksonHttpMessageConverter:  负责读取和写入json格式的数据;

 

SourceHttpMessageConverter:                   负责读取和写入 xml 中javax.xml.transform.Source定义的数据;

 

Jaxb2RootElementHttpMessageConverter:  负责读取和写入xml 标签格式的数据;

 

AtomFeedHttpMessageConverter:              负责读取和写入Atom格式的数据;

 

RssChannelHttpMessageConverter:           负责读取和写入RSS格式的数据;

 

 

 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>

  

测试结果:


 



 
 

 

 

 

 

 

 

  • 大小: 7.1 KB
  • 大小: 1.6 KB
  • 大小: 7.1 KB
  • 大小: 2.4 KB
  • 大小: 2.1 KB
  • 大小: 3.7 KB
分享到:
评论

相关推荐

    spring mvc+ajax

    当用户发起请求时,Spring MVC的DispatcherServlet会拦截这个请求,然后根据请求信息找到对应的HandlerMapping,进一步调用相应的Controller处理业务逻辑。Controller处理完后,会返回一个ModelAndView对象,包含着...

    Spring + Hibernate + Spring mvc +Ajax 整合

    在Spring MVC中,可以通过配置Ajax处理器或使用jQuery等库来实现Ajax请求。这样,用户可以进行数据的增删查改,而界面保持不刷新,提升了交互性。 在给定的"Spring + Hibernate + Spring mvc +Ajax 整合"项目中,...

    一个实用了spring mvc和ajax异步请求的例子

    总结起来,这个"一个实用了spring mvc和ajax异步请求的例子"涵盖了Web开发中的重要概念,包括Spring MVC的Controller设计、RESTful API的实现以及Ajax的异步数据交互。这样的组合使得Web应用更加动态,用户体验更佳...

    Spring3 MVC Ajax with JSON

    这个项目提供的示例工程应该包含了一个工作流程的完整实例,从Ajax请求到Spring MVC的处理,再到JSON响应的返回,帮助开发者理解并掌握这一技术栈的使用。通过深入研究和实践,你将能够熟练地在自己的项目中应用这些...

    spring mvc+ajax 导出导入xml文件功能实现和整理

    在本篇文档中,我们主要探讨了使用Spring MVC和Ajax技术实现导出和导入XML文件的功能。这一技术在Web开发中十分常见,用于在客户端与服务器之间传输数据,且常常用于文件操作场景。 首先,我们来看文档中提及的导入...

    Spring MVC与Ajax交互源码

    例如,当用户在前端进行某些操作,如提交表单,我们可以使用Ajax发送POST请求到Spring MVC的Controller,Controller处理业务逻辑后,将结果以JSON或其他格式返回。JavaScript接收到响应后,可以在前端动态更新页面,...

    Spring3MVC+ajax

    **Spring3 MVC与Ajax整合详解** 在Web应用开发中,Spring3 MVC框架和Ajax技术的结合使用能够极大地提升用户体验,实现页面的无刷新更新。本文将深入探讨如何在Spring3 MVC项目中集成Ajax,以便更好地理解这两者的...

    spring mvc+ajax 文件上传

    总结,结合Spring MVC和Ajax实现的文件上传方案,能够提供流畅、高效的用户体验,同时保持良好的控制层和业务处理逻辑。通过对前端和后端的合理设计,我们可以创建一个安全、用户友好的文件上传系统。在实际项目中,...

    mvc-ajax.rar_spring mvc

    首先,Spring MVC是Spring框架的一个组件,专门用于处理Web应用程序的请求和响应。它遵循模型-视图-控制器(MVC)架构模式,将业务逻辑、数据和用户界面分离,使得代码更易于维护和扩展。 Ajax,全称Asynchronous ...

    spring3 mvc 用 jquery ajax 交互

    1. **配置Spring MVC**:在Spring的配置文件中,我们需要定义DispatcherServlet和相应的视图解析器,如InternalResourceViewResolver,以便Spring MVC能够处理请求并返回视图。 2. **创建Controller**:编写一个...

    spring_mvc_ajax.zip_SpringMVC ajax_SpringMVC+ajax_spring ajax_sp

    本压缩包“spring_mvc_ajax.zip”包含了关于如何结合SpringMVC框架与Ajax技术来实现异步请求的示例和资源。下面将详细介绍这两个技术及其相互配合的应用。 SpringMVC是Spring框架的一部分,它是一个轻量级的模型-...

    Spring mvc+Ajax用户登录增删改查功能

    **Spring MVC + Ajax 用户登录增删改查功能详解** 在Web开发中,Spring MVC和Ajax是两种非常重要的技术。Spring MVC作为Spring框架的一部分,提供了一种模型-视图-控制器的架构模式,使得开发者能够更好地组织和...

    spring第11章--ajax,上传下载,拦截器.rar_spring mvc_spring 下载_spring 使用ajax

    - **jQuery Ajax**:Spring MVC常与jQuery库结合使用,通过$.ajax()或$.get()、$.post()等方法发送Ajax请求。在后端,你需要创建一个处理Ajax请求的Controller方法,使用@RequestMapping注解来定义URL路径。 ```...

    SpringmvcAjax

    从创建Ajax请求,到控制器处理请求,再到数据的序列化和反序列化,以及错误处理和UI更新,这些都是开发者在实际工作中需要掌握的关键技能。通过实践和理解这些知识点,可以有效地提升Web应用的性能和用户交互体验。

    spring2.0MVC+spring2.5MVC+portletMVC

    4. **AJAX支持**:通过jQuery和JSON,Spring 2.5更好地支持了异步请求和响应。 5. **更多注解驱动的开发**:例如,@ModelAttribute用于将请求参数绑定到模型对象,@InitBinder用于初始化数据绑定行为。 至于...

    7-Spring-mvc-ajax支持1

    在Spring MVC中,Ajax的支持使得页面能够异步与服务器交互,提供更好的用户体验。本文将深入探讨Spring MVC如何支持Ajax以及相关的注解,如`@RequestBody`和`@ResponseBody`。 首先,`&lt;mvc:annotation-driven/&gt;`在...

    Spring MVC 教程快速入门 深入分析

    三、Spring MVC核心流程图:描述了Spring MVC处理请求的流程,包括前端控制器接收请求,经过分发器分发给具体的控制器,然后由控制器处理业务逻辑,最后将结果返回给用户。 四、Spring MVC DispatcherServlet说明:...

    Spring MVC入门教程

    十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 &lt;mvc:annotation-driven /&gt; 到底做了什么工作 二十、...

    Spring MVC 教程 快速入门 深入分析

    十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 &lt;mvc:annotation-driven /&gt; 到底做了什么工作

Global site tag (gtag.js) - Google Analytics