现在可能有这样的场景,页面发送一个ajax请求,明显是一个异步请求,后台需要把一些对象,转换成json的字符串,然后给你响应回去。然后我们就需要用responseBody这个注解就可以完成这个事
我们需要搭建一个异步环境。然后去引入一个jQuery.min.js的文件
然后我们就要在页面上引入这个js文件,然后就可以引用jQuery提供的函数或者方法。
<head>
<title>Title</title>
<script src="js/jquery.min.js"></script>
</head>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="js/jquery.min.js"></script>
<script>
//页面加载,绑定单击事件
$(function(){
$("#btn").click(function(){
alert("hello");
})
});
</script>
</head>
<body>
<br/>
<a href="user/testString">testString</a>
<br/>
<a href="user/testVoid">testVoid</a>
<br/>
<a href="user/testForwardOrRedirect">ForwardOrRedirect</a>
<br/>
<!--模拟button按钮-->
<button id="btn">发送ajax请求</button>
</body>
</html>
编写了以上代码,但是点击按钮,并没有起到作用,原因是前端控制器DispathcerServlet把我们的静态资源都给拦截了,因此我们需要配置告诉前端控制器我们这些静态资源你不要去拦截,我们就用不了它。所以点击事件没有任何效果。
所以我们需要告诉DispatcherServlet哪些静态资源是不需要拦截的。
什么是静态资源:css和js还有imgs等都属于静态资源
所以我们需要在springmvc.xml中配置
<!--前端控制器,哪些静态资源不被拦截
location:目录下的所有文件我都不拦截,mapping:跟映射请求相关,也就是以后请求路径上包含/js/,下面的任何文件,我都不会对它进行拦截
-->
<mvc:resources mapping="/js/**" location="/js/"/><!--javascript-->
对于其他的样式和图片拦截。
<mvc:resources mapping="/js/**" location="/js/"/><!--javascript-->
<mvc:resources mapping="/css/**" location="/css/"/><!--css-->
<mvc:resources mapping="/imgs/**" location="/imgs/"/><!--imgs-->
web.xml中
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
2.响应json数据之发送ajax的请求
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="js/jquery.min.js"></script>
<script>
//页面加载,绑定单击事件
$(function(){
$("#btn").click(function(){
//发送ajax
$.ajax({
//编写json,设置属性和值
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"username":"hehe","password":"123","age":"30"}',
dataType:"json",
type:"post",
success:function (data) {
//data服务器端响应的json的数据,进行解析
}
})
});
});
</script>
</head>
<body>
<!--模拟button按钮-->
<button id="btn">发送ajax请求</button>
<br/>
</body>
</html>
//模拟异步请求和响应
@RequestMapping("/testJson")
public void testJson(@RequestBody String body){
System.out.println("testForwardOrRedirect方法执行了");
System.out.println(body);
}
想把拿过来的JSON数据封装到Javabean中,如果你发的地址跟我们Javabean的属性是相同的,他就可以封装到我们的Javabean对象中。
它需要用到一些jar包。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="js/jquery.min.js"></script>
<script>
//页面加载,绑定单击事件
$(function(){
$("#btn").click(function(){
//发送ajax
$.ajax({
//编写json,设置属性和值
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"username":"hehe","password":"123","age":"30"}',
dataType:"json",
type:"post",
success:function (data) {
//data服务器端响应的json的数据,进行解析
alert(data);
alert(data.username);
alert(data.password);
alert(data.age);
}
})
});
});
</script>
</head>
<body>
<br/>
<!--模拟button按钮-->
<button id="btn">发送ajax请求</button>
</body>
</html>
//模拟异步请求和响应
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println("testForwardOrRedirect方法执行了");
//客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
System.out.println(user);
//响应(把数据拿到,假装查询数据库)
user.setUsername("haha");
user.setAge(40);
//做响应,responseBody这个注解能自动将我们对象转为json字符串。
return user;
}