这节进行json传递数据的学习.
1.adduserView.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>My JSP 'welcom.jsp' starting page</title>
</head>
<body>
<form action="">
姓名:<input type="text" id="name" name="name"><br>
年龄:<input type="text" id="age" name="age"><br>
<input type="button" id="subBtn" value="提交" >
</form>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#subBtn").click(function(){
//不知道什么原因,我在看视频教程的时候,视频里的get方式会出现乱码的问题,在这里却没有出现.
//是不是这里修改了Tomcat里的配置:URIEncoding="UTF-8"
//或许是这里自定义了一个DispatcherServlet的原因
//我把Tomcat下的URIEncoding删掉后测试,结果也出现了乱码,看来问题就出在这里
//还有一个问题,以前我用jquery取value的时候用attr("value"),总取不到值,现在也是;
//我用的是.val()方法,但视频教程里却不让这样取,
//很困惑啊,attr取不到值啊.奇怪的是教程里却取得到
var name = $("#name").val();
var age = $("#age").val();
var user = {name:name, age:age};
$.ajax({
url:"${pageContext.request.contextPath}/user/addUser",
type:"get",
data:user,
dataType:"json",
success:function(data){
alert(data);
//alert(data.name+"===="+data.age);
//data = eval("("+data+")")
alert(data.name+"===="+data.age);
}
});
});
});
</script>
</body>
</html>
注意:jsp中的路径最好不要用相对路径,要使用绝对路径.
2.Controller类
package com.skymr.mvc.controller.annotation;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.skymr.mvc.entity.User;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/addUser")
public String addUser(User user, HttpServletResponse response){
System.out.println("name=" + user.getName());
PrintWriter outer = null;
//注意:user.getName是个字符串,需要加上引号,否则会出错
String json = "{\"name\":\""+user.getName()+"\",\"age\":"+user.getAge()+"}";
//设置返回结果为json格式
//response.setContentType("application/json");
//不加这行会出现乱码
response.setCharacterEncoding("UTF-8");
try {
outer = response.getWriter();
outer.write(json);
} catch (IOException e) {
e.printStackTrace();
}
finally{
try{
outer.flush();
}catch(Exception e){}
try{
outer.close();
}catch(Exception e){}
}
return null;
}
@RequestMapping("/toUser")
public String toUser(HttpServletRequest request){
request.setAttribute("result", "toUser-----");
return "adduserView";
}
}
3,返回json格式数据方式
1).response.setContentType("application/json"); //教程里是这样做的.
2). ajax请求时加入参数 dataType:"json"
3)若返回的是字符串格式的json,可以eval一节,转换成json object
data = eval("("+data+")")