SpringMVC的响应JSON数据和过滤静态资源

1.过滤静态资源

现在可能有这样的场景,页面发送一个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);
}

在这里插入图片描述

3.响应json数据之发送ajax的请求

想把拿过来的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;
}

在这里插入图片描述

你可能感兴趣的:(SSM框架,SpringMVC框架,Java)