SpringMVC_05_处理AJAX

处理AJAX

1. 实例

  1. 下载jQuery

在网上下载jquery.js添加到js包中
在这里插入图片描述

  1. 编写html文件ajax.xml并引用jQuery库
<html>
<head>
    <title>处理ajax</title>
    <script src="${pageContext.request.contextPath}/js/jquery.js">
    </script>
    <script>
        $(function () {
            $('#btn').click(function () {
                $.post('${pageContext.request.contextPath}/ajax/test1',function (data) {
                    console.log(data);
                })
            })
        })
    </script>
</head>
<body>
    <button id="btn">发送AJAX请求</button>
</body>
</html>

注意$('#btn')不要忘了写#

  1. Controller

新建一个文件夹ajax,并添加AjaxController.java

@Controller
@RequestMapping("/ajax")
public class AjaxController {

    @RequestMapping("/test1")
    public void test1(HttpServletResponse response) throws IOException {
        response.getWriter().write("success");
    }

    @RequestMapping("/test2")
    @ResponseBody //将返回值写到返回体中,并不是跳转视图
    public String test2(){
        return "success2";
    }
}
  1. 运行

运行后,无论url是/test1还是/test2,控制台都会报错
在这里插入图片描述
作为一个小白的我,以为是jQuery库有问题,就换了好几个版本的jQuery库都不行。难道是我jquery方法写错了?于是又耗费了好久都没解决问题。崩溃
就在网上漫无目的的查找出错原因,我突然意识到是不是AjaxController中的注解没有生效。
果然,我新建了一个包ajax,但是并没有把这个包添加进核心配置xml文件中
于是在springmvc.xml中把这个包给加上<context:component-scan base-package="controller,ajax"/>,果然问题就解决了。

2. @ResponseBody

观察test1和test2,test2使用了@ResponseBody注解,比test1简单多了

  • @ResponseBody一般是作用在方法上的,加上该注解表示该方法的返回结果直接写到Httpresponse Body中,常用在ajax异步请求中,

  • 在RequestMapping中return返回值默认解析为跳转路径,如果你此时想让Controller返回一个字符串或者对象到前台 就会报404 not response的错误。

  • 当加上@ResponseBody注解后不会解析成跳转地址,会解析成相应的json格式的对象、集合、字符串或者xml等直接返回给前台,可以通过 ajax 的“success”:fucntion(data){} data直接获取到

3. 返回JSON

如果ResponseBody中的数据为自定义类型的数据,则需要通过适当的HttpMessageConverter将其转换为指定格式后(如:json格式),写入到Response对象的body数据区。

返回JSON格式的三种方式

  1. jackson,SpringMVC默认支持
  2. gson,SpringMVC默认支持,google开发
  3. fastjson,SpringMVC默认不支持,alibaba开发

3.1 使用jackson

步骤一:添加jar包
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>
步骤二:配置消息转换器

由于SpringMVC默认支持jackson,所以消息转换器可以不用配置
如果需要配置的话,需要在核心配置文件springmvc.xml中添加如下代码:

    <!--mvc的注解驱动,用来简化配置,默认会加载内置的类型转换器-->
    <mvc:annotation-driven conversion-service="conversionService">
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>
步骤三:测试

自定义一个User类,并通过@ResponseBody写入Httpresponse Body中

  • User类
public class User {

    private String name;
    private Integer age;
    ...
}
  • AjaxController中添加测试方法
    @RequestMapping("/showUser")
    @ResponseBody
    public User showUser(){
        User user = new User("wql", 20);
        return user;
    }
  • jsp页面不要忘了修改url路径
    <script>
        $(function () {
            $('#btn').click(function () {
                $.post('${pageContext.request.contextPath}/ajax/showUser',function (data) {
                    console.log(data);
                })
            })
        })
    </script>

测试结果如下:
在这里插入图片描述

3.2 使用gson

gson的使用与jackson使用类似

步骤一:添加jar包
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.5</version>
    </dependency>
步骤二:配置消息转换器

由于SpringMVC默认支持gson,所以消息转换器也不用配。
如果需要配置的话,在核心配置文件里加入如下代码

    <!--mvc的注解驱动,用来简化配置,默认会加载内置的类型转换器-->
    <mvc:annotation-driven conversion-service="conversionService">
        <mvc:message-converters>
<!--            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>-->
            <bean class="org.springframework.http.converter.json.GsonHttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>

3.3 使用fastjson

fastjson是阿里公司提供的,SpringMVC对其不是默认支持的,所以需要配置消息转换器。步骤同上

步骤一:添加jar包
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.58</version>
    </dependency>
步骤二:配置消息转换器

使用fastjson必须要配置消息转换器

    <mvc:annotation-driven conversion-service="conversionService">
        <mvc:message-converters>
<!--            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>-->
<!--            <bean class="org.springframework.http.converter.json.GsonHttpMessageConverter"/>-->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json"/>
            </bean>
        </mvc:message-converters>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值