【归纳总结3】JavaWeb之Ajax、axios、json和fastjson

Ajax

异步的javaScript和XML
● javascript:表明该技术和前端相关
● xml:以此进行数据交换
xml:数据交换格式,将数组集合转换成xml文件

作用
  1. 与服务器进行数据交换
    ● 通过AJAX可以给服务器发送请求,服务器将数据直接响应回给浏览器

以前的流程使用ajax的流程

  1. 异步交互(不刷新页面的情况下更新局部页面
    不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术
    ● 同步:一个时间只能做一个事
    ● 异步:一个时间段可以处理多个事情

应用场景

注册登录:一离焦就验证;联想功能

AjaxDemo1.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AjaxDemo</title>
</head>
<body>
    <script>
        //原生ajax
        //发送ajax请求
        //1.创建对象 适配所有浏览器
        var xhttp; //先声明
        if (window.XMLHttpRequest) {  //判断浏览器的version
            xhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }

        //2。写ajax的基本配置
        //请求类型;true:异步请求,flase:同步请求——>默认使用 true
      xhttp.open("GET", "http://localhost:8080/AjaxDemo/ajaxServlet", true);
   //使用全路径

        //3.发送请求
        xhttp.send();

        //4.接受响应
        xhttp.onreadystatechange = function() {
            //4:响应已经处理完毕;200:响应成功
            if (this.readyState == 4 && this.status == 200) {
                console.log(this.responseText);//封装响应结果;等待响应完毕之后才能打印结果
            }
        };
    </script>
</body>
</html>
<!--ajaxServlet.java-->
@WebServlet("/ajaxServlet")
public class ajaxServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("后端接受到请求");

        //设置响应头
        response.setContentType("text/html;charset=utf-8"); //设置响应头
        response.getWriter().write("多喝水多喝汤");//谁访问servlet,则返回给谁;ajax访问servlet,则返回给ajax的html
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        this.doGet(request, response);

    }
}

axios

前端框架
对原生ajax进行封装,实现简写

操作步骤

  1. 引入axios的js文件
 <script src="js/axios-0.18.0.js"></script>
  1. 使用axios发送异步请求(get/post请求),并获取响应结果
    ● method 属性:设置请求方式的,取值为 get 或者 post
    ● url 属性:书写请求的资源路径。若为get 请求,将请求参数拼接到路径的后面,格式为:
url?参数名=参数值&参数名2=参数值2

url:"http://localhost:8080/ajax_Demo2_brand/updateBrandServlet?id="+this.id

● data 属性:作为请求体被发送的数据;即如果是 post 请求的话,数据需要作为 data 属性的值。
● then() 需要传递一个匿名函数。 then() 中传递的匿名函数称为 回调函数,即该匿名函数在发送请求时不会被调用,而是在成功响应后调用的函数。而该回调函数中的 resp 参数是对响应的数据进行封装的对象,通过 resp.data 可以获取到响应的数据。

<!--发送get请求-->
axios({
method:"get",
url:"",
}).then(function (resp){
})
<!--发送post请求-->
axios({
method:"post",
url:"",
data:""
}).then(function (resp){
})

Example of POST请求


1.拽js文件
2.创建html文件,并在<title>下加 <script  src="js/axios-0.18.0.js"></script>
//1.ajaxServlet文件
@WebServlet("/ajaxServlet")
public class ajaxServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       request.getParameter("name");
        System.out.println("后端接受到请求");
        //设置响应头
        response.setContentType("text/html;charset=utf-8"); //设置响应头
        response.getWriter().write("多喝水多喝汤");//谁访问次servlet,则返回给谁;ajax访问次servlet,则返回给ajax的html
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        this.doGet(request, response);
    }
}
//2.axios_demo1.html
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>axiosdemo1</title>
  <script  src="js/axios-0.18.0.js"></script>  //导axios的jar包
  <script>
    //post请求
    axios({
      method:"post",
      url:"http://localhost:8080/AjaxDemo/ajaxServlet",
      data:"name=z3" //post里才有直接能使用的data属性
    }).then(function (resp) {
      console.log(resp.data) //返回一个对象,将resp传输的话封装在里面
    })
  </script>
</head>
<body>
</body>
</html>

Example of GET 请求

//1.ajaxServlet文件
@WebServlet("/ajaxServlet")
public class ajaxServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("后端接受到请求");
        //设置响应头
        response.setContentType("text/html;charset=utf-8"); 
        response.getWriter().write("多喝水多喝汤");//谁访问次servlet,则返回给谁;ajax访问次servlet,则返回给ajax的html
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        this.doGet(request, response);
    }
}
//2.axios_demo1.html
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>axiosdemo1</title>
  <script  src="js/axios-0.18.0.js"></script>
  <script>
    //创建axios:get方式
    axios({
      method:"get",//请求方法:请求方式
      url:"http://localhost:8080/AjaxDemo/ajaxServlet",
    }).then(function (resp){ //回调函数,响应对象在resp里
      console.log(resp.data) //返回一个对象,将resp传输的话封装在里面;get方式得通过resp.data进行取数据
    })
  </script>
</head>
<body>
</body>
</html>

Json

一种数据交换格式;Javascript对象表示法
发送异步请求时,若请求参数为JSON格式,那请求方式须是POST——>JSON串要放在请求体中

User{id=1, name='张三', pass='123'} //java格式
//json格式:对象
{
"id":1,
 "name":"张三",
 "pass":"123"
}
//数组:
        //2.1存对象数组
[
{
"id":1,
 "name":"张三",
 "pass":"123"
},
    {
"id":2,
 "name":"张三",
 "pass":"123"
}
]
        //2.2存字符串数组
[
"li1","wu3"
]

基础语法

格式

  1. 必须用双引号
    var 变量名 = ‘{“key”:value,“key”:value,…}’
    2.value的数据类型
    ● 数字(整型/浮点型)
    ● 字符串(使用双引号括起来)
    ● 逻辑值(true/false)
    ● 数组(在方括号中)
    ● 对象(在花括号中)
    ● null
var jsonStr = '{
"name":"zhangsan",
"age":23,
"addr":["北京","上海","西安"]
}'

json转换格式

前端发送请求时,若是复杂的数据就会以 json 提交给后端;而后端若需要响应一些复杂的数据时,也需要以 json 格式将数据响应回给浏览器。
● 请求数据:JSON字符串转为Java对象
● 响应数据:Java对象转为JSON字符串

Fastjson

实现Java对象和JSON字符串的相互转换

操作步骤

  1. 导入坐标
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.62</version>
</dependency>

2.Java对象转JSON

 String jsonStr = JSON.toJSONString(obj);
  1. JSON字符串转Java对象
User user = JSON.parseObject(jsonStr, User.class);

example

servlet+json
● 此时,两个html页面跳转不需要经过servlet
● 当打开浏览器,默认打开index页面,eg:index.html——>项目启动自动打开index页面,方便
servlet中response的getParameter和getReader

getReader.readLine():当传入键值对格式
getParameter():当传入一个值

● json异步处理:不刷新页面的情况下更新代码——>用id命名让每行数据成为动态的
● 导包:mysql、fastjson、javax-servlet

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>  //mysql导包
  <version>8.0.26</version>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId> //json导包
  <version>1.2.62</version>
    </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值