日期:2014-05-16  浏览次数:20459 次

Spring mvc系列六之 ajax运用(基于json格式)

此篇文章的讲解是基于前几篇文章的内容,如果大家有看不懂的地方可以看前几篇的内容.

spring mvc返回json数据可方法常用的有

  • 直接PrintWriter 输出
  • 使用Spring内置的支持

下面我分别对上面的两种方法进行讲解:注意这篇文章的讲解使用的是spring3.2版本,此版本与spring 3.0的配置有少许不同,希望大家注意,同时我使用的是jquery做演示.

?

首先讲解直接PrintWriter 输出,这个是最简单的,但是不可以使用java的复杂对象.

没有什么需要配置的,直接请求我们的ajax请求页面json.jsp.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="script/jquery-1.8.3.js"></script>
<title>添加用户</title>
<script type="text/javascript">
	$(function(){
		$("form :button").click(function(){
			var name = $("#name").val();
			var age = $("#age").val();
			$.ajax({
				   type: "POST",
				   url: "user/addUser",
				   data: {name:name , age:age},
				   success:function(data){
					   alert("名字:" + data.name + "年龄:" + data.age);
				   }
			});
		});
	});
</script>
</head>
<body>
	<form action="user/addUser" method="post">
		用户名:<input type="text" id="name" name="name" /><br/>
		年龄:<input type="text" id="age" name="age" />
		<input type="button" value="提交" />
	</form>
</body>
</html>

?

?

?

给提示按钮添加点击事件,当提交表单时获取用户名name,和年龄age,以post的方式提交表user/addUser,并把服务器返回的数据显示出来,这里要注意JSP页面头上最好加上

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">

?使用绝对路径,一切从根目录开始找起,要不然会因为路径问题,而且很烦,js也要声明为spring mvc不要拦截,这里之前文章有说过

?

Controller:

package gd.hz.springmvc.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import gd.hz.springmvc.model.User;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller("userController")
@RequestMapping("user")
public class UserController {

	// ajax请求一
	@RequestMapping("addUser")
	public void addUser(User user, HttpServletRequest request,
			HttpServletResponse response) {
		// 这里不能用单引号,无效,死的心都有
		System.out.println("过来了");
		String result = "{\"name\":\"" + user.getName() + "\"}";
		PrintWriter out = null;
		System.out.println(result);
		response.setContentType("application/json");
		try {
			out = response.getWriter();
			out.write(result);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

?这里我们用User这个实体接收ajax传过来的参数,当然也可以这样写:

public void addUser(String name , int age , HttpServletRequest request,HttpServletResponse response)

?注意名字要与from表单传过来的参数名称一样,当然也可以不一样,不一样时的用法可以看我之前的文章.

?

User类:

package gd.hz.springmvc.model;

public class User {
	private String name ;
	private int age ;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

?

?

St