JavaWeb之AJAX

news2024/11/18 15:24:15

前言

这一节讲JavaWeb之AJAX

1.概述

在这里插入图片描述
在这里插入图片描述
以前我们在servlet中得到数据,必须通过域给jsp,然后jsp在响应给浏览器

纯html不能获取servlet返回数据
所以我们用jsp
但是现在我们可以同AJAX给返回数据了
我们可以在sevlet中直接通过AJAX返回给浏览器
html中的JavaScript就可以获取数据了
通过静态的html页面和AJAX联合起来,这个比较主流
这样html和AJAX主要由前端来完成就可以了
后面的我们后端来完成
因为jsp要由服务器启动,所以还是要后端来写,无法分工
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这个搜索的时候,我们没有刷新,它也会局部刷新,在数据库中打出的这些数据
或者我们输入用户名,鼠标一离开就会显示有没有这个用户
在这里插入图片描述
这种局部刷新就是异步
在这里插入图片描述
这里的异步就是服务器处理的三秒钟内,我们不用再浏览器等待,我们还可以干其他事情

同步左上角是会刷新的,异步就不会刷新显示出来
这个对于用户来说,没什么感知

2. 快速入门

在这里插入图片描述

第一就是后端代码,其余的都是前端代码
在这里插入图片描述
这个就是后端代码

Ajax是JavaScript的代码,要写在html里面去

https://www.w3school.com.cn/b.asp
这个网站有相关的教程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
异步是默认的,所以可以不用写

在这里插入图片描述
这个就是全路径

在这里插入图片描述

在这里插入图片描述
点的是下一页
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
但我们这个不能运行出我们想要的结果,可能是第一步创建搞错了

    <script>
        //1.创建核心对象,不用记,直接复制
        var xhttp;
        if (window.XMLHttpRequest) {
            xhttp = new XMLHttpRequest();
        }else{
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //2.发送请求
        xhttp.open("GET", "http://localhost:8080/brand-demo/ajaxServlet");//第二个参数就是你要请求的资源路径,异步的话,资源要写成全路径:http://localhost:8080/brand-demo/ajaxServlet
        //因为将来前端就是html+ajax开发了,前端的工程和后端的工程都不在一个服务器上部署,所以访问的话就要写绝对路径了,不要写相对路径了
        xhttp.send();
        //3.获取响应
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                    // this.responseText;//获取数据,就是我们返回的hello ajax~数据
                alert(this.responseText);//在一个弹框里面打印
            }
        };
    </script>

在这里插入图片描述
我们这个修改后就可以了
在这里插入图片描述
在这里插入图片描述
那个servlet的xhr就是异步请求的意思

在这里插入图片描述
或者直接点这个上面的XHR,也可以筛选出来我们需要的异步请求

所以所谓AJAX其实也就是JavaScript里面可以获取响应数据的代码

3. 案例-验证用户是否存在

在这里插入图片描述

3.1 后端

        //1.接收用户名
        String username = request.getParameter("username");
        //2.调用service查询User对象,,,,,现在还没写service,我们只是模拟一下
        boolean flag = true;//相当于用户名存在
        //3.响应标记
        response.getWriter().write(""+flag);

在这里插入图片描述

3.2 前端

注册页面
这个注册页面可以去我的Gitee里面去找
这里我就直接复制了
而且这个不重要

在这里插入图片描述
在这里插入图片描述

这个就是我们以前的那个页面

在这里插入图片描述
我们就可以对这个username绑定一个onblur事件
在这里插入图片描述
修改style那里
在这里插入图片描述
在这里插入图片描述

<script>
    //1.给用户名输入框绑定  失去焦点事件
    document.getElementById("username").onblur=function(){
        //2.发送ajax
        //获取用户名的值  这个是给自己的输入框绑定的onblur事件,直接可以this
        var username=this.value;

        //2.1.创建核心对象,不用记,直接复制
        var xhttp;
        if (window.XMLHttpRequest) {
            xhttp = new XMLHttpRequest();
        }else{
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //2.2.发送请求
        xhttp.open("GET", "http://localhost:8080/brand-demo/selectUserServlet?username="+username);//把名字通过get传给servlet
        xhttp.send();
        //2.3.获取响应-------》获取的是对应servlet的响应
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                if(this.responseText == "true"){//responseText获取的是字符串
                    //用户名存在,显示提示信息
                    document.getElementById("username_err").style.display='';//显示的话,display就是空字符串就可以了
                }else{
                    //用户名不存在,清除提示信息-----》把style的属性设置一下
                    document.getElementById("username_err").style.display='none';//这个就是设置style为不展示
                }
            }
        };
    }
</script>

因为我们后台展示的是true,所以不管我们写什么,都是用户名已存在
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
光标离开就会发送一次请求,而且请求还是xhr的异步请求
在这里插入图片描述
而且这个请求响应的数据还是true

4. Axios异步框架

4.1 基本使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
axios文件也是直接复制就可以了
在这里插入图片描述
在创建一个html文件
02-axios-demo.html:

在这里插入图片描述
AxiosServlet:
在这里插入图片描述

02-axios-demo.html:

<!--引入axios的源码文件-->
<script src="js/axios-0.18.0.js"></script>
<script>
  //1.get
  axios({
    method:"get",
    // url就是我们请求的路径,就是servlet的路径     .then就是来获取响应的
    url:"http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan"
  }).then(function(resp){
    alert(resp.data);//这个就能获取到响应的数据---》hello axios
  })
</script>

在这里插入图片描述
在这里插入图片描述
这样我们就可以了

在这里插入图片描述
02-axios-demo.html:

  axios({
    method:"post",
    // url就是我们请求的路径,就是servlet的路径     .then就是来获取响应的
    url:"http://localhost:8080/ajax-demo/axiosServlet",
    data:"username=zhangsan"
  }).then(function(resp){
    alert(resp.data);
    // //这个就能获取到响应的数据---》hello axios
  })

在这里插入图片描述
这样就是post的了
在这里插入图片描述
在这里插入图片描述
这个就要比原生的ajax代码要简化很多

4.2 请求方式别名

在这里插入图片描述

在这里插入图片描述

  axios.get("http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan").then(function (res) {
      alert(res.data);
  })

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  axios.post("http://localhost:8080/ajax-demo/axiosServlet","username=zhangsan").then(function (res) {
      alert(res.data);
  })

在这里插入图片描述
在这里插入图片描述

5. JSON

在这里插入图片描述

所以我们响应数据都用JSON了

5.1 基本语法

在这里插入图片描述

    <script>
        //定义json
        var json={
            "name":"zhangsan",
            "age":23,
            "addr":["北京","上海","西安"]
        };
        //获取值
        alert(json.name);
    </script>

在这里插入图片描述
在这里插入图片描述

5.2 JSON数据和Java对象转换

在这里插入图片描述

在这里插入图片描述

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.62</version>
    </dependency>

下面这个是user对象
在这里插入图片描述
测试方法

        //1.将Java对象转换为JSON字符串
        User user = new User();
        user.setId(1);
        user.setUsername("zhangsan");
        user.setPassword("123");
        
        String jsonString= JSON.toJSONString(user);
        System.out.println(jsonString);

在这里插入图片描述
在这里插入图片描述

        User u = JSON.parseObject("{\"id\":1,\"password\":\"123\",\"username\":\"zhangsan\"}", User.class);
        System.out.println(u);

在这里插入图片描述

6. 案例

6.1 查询所有

在这里插入图片描述

在这里插入图片描述
现在我们导入一个工程
在这里插入图片描述
在这里插入图片描述
brand.html:
在这里插入图片描述

<script>
    //1.当页面加载完成之后,发送ajax请求
    //创建一个窗口,并添加事件,这个事件是在整个页面加载完成之后,自动加载的
    window.onload = function () {
        //2.发送ajax请求
        axios({
            method: 'get',
            url:""
            
        }).then(function (resp) {
            
        })
    }
</script>

在这里插入图片描述
SelectAllServlet:

        //1.调用service查询
        List<Brand> brands = brandService.selectAll();
        //2.将集合转换为JSON数据   序列化
        String jsonString = JSON.toJSONString(brands);
        //3.响应数据
        response.setContentType("text/json;charset=utf-8");//处理中文
        response.getWriter().write(jsonString);

在这里插入图片描述
测试一下
在这里插入图片描述
brand.html:
在这里插入图片描述

测试一下

在这里插入图片描述
因为原来的表格一旦完成就马上执行这个了,所以看不到原来的表格


<script src="js/axios-0.18.0.js">
</script>

<script>
    //1.当页面加载完成之后,发送ajax请求
    //创建一个窗口,并添加事件,这个事件是在整个页面加载完成之后,自动加载的
    window.onload = function () {
        //2.发送ajax请求
        axios({
            method: 'get',
            url:"http://localhost:8080/brand1-demo/selectAllServlet"

        }).then(function (resp) {
            //获取数据,遍历数组
            let brands = resp.data;//这个就是数组,,,,,也是JSON数据    直接点加Data名称就可以获得数据
            let tableData="    <tr>\n" +
                "        <th>序号</th>\n" +
                "        <th>品牌名称</th>\n" +
                "        <th>企业名称</th>\n" +
                "        <th>排序</th>\n" +
                "        <th>品牌介绍</th>\n" +
                "        <th>状态</th>\n" +
                "        <th>操作</th>\n" +
                "    </tr>";
            for (let i = 0; i < brands.length; i++) {
                let brand = brands[i];//放入表格里面去
                tableData+="    <tr align=\"center\">\n" +
                    "        <td>"+(i+1)+"</td>\n" +
                    "        <td>"+brand.brandName+"</td>\n" +
                    "        <td>"+brand.companyName+"</td>\n" +
                    "        <td>"+brand.ordered+"</td>\n" +
                    "        <td>"+brand.description+"</td>\n" +
                    "        <td>"+brand.status+"</td>\n" +
                    "\n" +
                    "        <td><a href=\"#\">修改</a> <a href=\"#\">删除</a></td>\n" +
                    "    </tr>";
            }
            document.getElementById("brandTable").innerHTML=tableData;//设置表格数据
        })
    }
</script>

在这里插入图片描述

6.2 新增品牌

在这里插入图片描述
addBrand.html:
在这里插入图片描述
AddServlet:
在这里插入图片描述
测试一下
在这里插入图片描述
在这里插入图片描述
这样就说明了getParameter方法无法获取JSON的数据格式
这个不能接受JSON数据格式,,因为这个是把字符串按照&和等号切割的,JSON是没有的,{brandName: “华为”},它长这个样子

在这里插入图片描述
在这里插入图片描述

        //1.接收数据
//        String brandName = request.getParameter("brandName");//这个不能接受JSON数据格式,,因为这个是把字符串按照&和等号切割的,JSON是没有的,{brandName: "华为"},它长这个样子
//        System.out.println(brandName);

        //获取请求体数据
        BufferedReader br = request.getReader();
        String params = br.readLine();//因为json只有一行
        //将JSON字符串转为Java对象
        Brand brand= JSON.parseObject(params, Brand.class);
        System.out.println(brand);
        //2.调用service添加
        brandService.add(brand);
        //3.响应成功标识
        response.getWriter().write("success");

在这里插入图片描述
addBrand.html:
在这里插入图片描述
最后就是Data那里,数据必须是真实的

现在开始处理一下表单的数据—》转为JSON

<script src="js/axios-0.18.0.js">
</script>

<script>
// <!--    我们不需要正常提交表单了,---》直接一个普通的按钮就可以了,不用submit按钮了,因为我们要的是异步的,
// 传递的是异步的请求格式,,所以不需要指定action,因为指定了action,就会url变-->
// 1.给按钮绑定单击事件
document.getElementById("btn").onclick = function () {
    //点击提交按钮,数据都填了----->document.getElementById("brandName").value--->就是获取brandName你填写的值
    // var formData={
    //     brandName:document.getElementById("brandName").value,
    //     companyName:document.getElementById("companyName").value,
    //     ordered:document.getElementById("ordered").value,
    //     description:document.getElementById("description").value,
    //     status:document.getElementById("status").value,
    // }
    //或者这样

    var formData={
        brandName:"",
        companyName:"",
        ordered:"",
        description:"",
        status:""
    }
    let brandName=document.getElementById("brandName").value;//获取数据
    formData.brandName=brandName;//设置数据
    let companyName=document.getElementById("companyName").value;//获取数据
    formData.companyName=companyName;//设置数据
    let ordered=document.getElementById("ordered").value;//获取数据
    formData.ordered=ordered;//设置数据
    let description=document.getElementById("description").value;//获取数据
    formData.description=description;//设置数据
    // let status=document.getElementById("brandName").value;//获取数据
    // formData.brandName=brandName;//设置数据
    //但是status没有id,状态是禁用还是启用?,它有两个标签的--》一次性获取两个标签,哪个被选中了就是谁
    let status=document.getElementsByName("status");
    for(let i=0;i<status.length;i++){
        if(status[i].checked){//表示这个被选中了{
            formData.status=status[i].value;
        }
    }
    console.log(formData);//把这个打印到控制台上
    //2。发送ajax请求
    axios({
        method: 'post',
        url:"http://localhost:8080/brand1-demo/addServlet",
        data:formData
    }).then(function (resp) {
        //判断响应数据是否为success,如果是说明添加成功,并跳回展示页面
        if(resp.data =="success"){
            location.href="http://localhost:8080/brand1-demo/brand.html";
        }
    })
}
</script>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

下一节讲Vue
Gitee

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入剖析String类的底层实现原理

嘿嘿,家人们,今天咱们来模拟实现string,好啦,废话不多讲,开干! 1:string.h 1.1:构造函数与拷贝构造函数 1.1.1:写法一 1.1.2:写法二(给缺省值) 1.2:赋值运算符重载与operatror[]获取元素 1.3:容量与迭代器 1.4:reserve与resize 1.5:清空与判断是否为空 1.6:push_back与…

【Go】-bufio库解读

目录 Reader和Writer接口 bufio.Reader/Writer 小结 其他函数-Peek、fill Reader小结 Writer Scanner结构体 缓冲区对于网络数据读写的重要性 Reader和Writer接口 在net/http包生成的Conn 接口的实例中有两个方法叫做Read和Write接口 type Conn interface {Read(b []b…

el-form el-table 前端排序+校验+行编辑

一、页面 <template><div class"bg" v-if"formData.mouldData?.length 0">当前暂无模板&#xff0c;点击<view class"add" click"addMould">立即创建</view></div><div v-else><el-col :x…

解决Docker环境变量的配置的通用方法

我们部署的很多服务都是以Docker容器的形式存在的。 在运行Docker容器前&#xff0c;除了设置网络、数据卷之外&#xff0c;还需要设置各种各样的环境变量。 有时候&#xff0c;由于容器版本的问题&#xff0c;一些文档没有及时更新&#xff0c;可能同时存在多个新旧版本的环…

使用win32com将ppt(x)文件转换为pdf文件

本文来记录下如何使用win32com将ppt(x)文件转换为pdf文件 文章目录 win32com概述win32com优缺点代码实例本文小结 win32com概述 Pywin32 是一个用于与 Microsoft Windows 操作系统交互的 Python 扩展模块&#xff0c;它提供了对多个 Windows API 的访问&#xff0c;包括对 Mic…

【nginx】client timed out和send_timeout的大小设置

websocket连接会断开&#xff0c;抓包检查后发现是中间的代理服务器nginx断开的&#xff0c;同时将后端和浏览器都断开了。将nginx日志调到debug级别后&#xff0c;有下面的断开信息。 [info] 125923#125923: *34 client timed out (110: Connection timed out) while proxyin…

代码段数据段的划分

DPL DPL存储在段描述符中&#xff0c;规定访问该段的权限级别(Descriptor Privilege Level) CPL CPL是当前进程的权限级别(Current Privilege Level)&#xff0c;是当前正在指向的代码段所在段的成绩&#xff0c;也就是CS段的DPL RPL RPL说明的是进程对段访问的请求权限(Re…

游戏引擎学习第14天

视频参考:https://www.bilibili.com/video/BV1iNUeYEEj4/ 1. 为什么关注内存管理&#xff1f; 内存分配是潜在的失败点&#xff1a; 每次进行内存分配&#xff08;malloc、new等&#xff09;时&#xff0c;都可能失败&#xff08;例如内存不足&#xff09;。这种失败会引入不稳…

基于Java Springboot电商个性化推荐系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

react中如何在一张图片上加一个灰色蒙层,并添加事件?

最终效果&#xff1a; 实现原理&#xff1a; 移动到图片上的时候&#xff0c;给img加一个伪类 &#xff01;&#xff01;此时就要地方要注意了&#xff0c;因为img标签是闭合的标签&#xff0c;无法直接添加 伪类&#xff08;::after&#xff09;&#xff0c;所以 我是在img外…

基于Java Springboot拍卖行系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

HTML5+CSS前端开发【保姆级教学】+前端介绍和软件安装

学习了基础编程刚刚开始学习计算机的程序员&#xff0c;你是否会这样的想法:前端和后端是什么呢&#xff1f;如果你是刚上大学的大一大二基础小白&#xff0c;但是身边的卷王同学已经超前知道之后要从事前后端开发了&#xff0c;并且在学习各种框架的课程&#xff0c;Aahhahah,…

Android Framework层介绍

文章目录 前言一、Android Framework 层概述二、主要组件1. 应用程序接口&#xff08;API&#xff09;2. 系统服务3. Binder4. 资源管理5. Content Provider6. 广播接收器&#xff08;BroadcastReceiver&#xff09;7. 服务&#xff08;Service&#xff09; 三、与 Linux Kerne…

【C++滑动窗口】1248. 统计「优美子数组」|1623

本文涉及的基础知识点 C算法&#xff1a;滑动窗口及双指针总结 LeetCode1248. 统计「优美子数组」 给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字&#xff0c;我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数…

【paper】分布式无人水下航行器围捕智能目标

An Effective Strategy for Distributed Unmanned Underwater Vehicles to Encircle and Capture Intelligent Targets2022.8IEEE TRANSACTIONS ON INDUSTRIAL ELECTRONICS【Q1 7.5】Mingzhi Chen 上海理工大学 Q1 Background&#xff1a;本文试图解决一个什么样的问题&#xf…

【更新中】《硬件架构的艺术》笔记(三):处理多个时钟

介绍 单时钟设计更易于实现&#xff0c;也更少出现亚稳态、建立和保持时间违例方面的问题。但在实践中&#xff0c;很少有设计只在一个时钟下运行。 多时钟域 多个始终可以有以下一种或多种时钟关系&#xff1a; 1、时钟频率不同。 2、时钟频率相同&#xff0c;但相位不同…

Python_爬虫1_Requests库入门

目录 Requests库 7个主要方法 Requests库的get()方法 Response对象的属性 爬取网页的通用代码框架 理解requests库的异常 HTTP协议及Requests库方法 HTTP协议 HTTP协议采用URL作为定位网络资源的标识。 HTTP协议对资源的操作 理解PATCH和PUT的区别 HTTP协议与Requse…

从客户需求视角去认识ZLG | 边缘计算网关多种应用

在工业领域&#xff0c;串行总线与EtherNET总线广泛应用&#xff0c;物联网的兴起带来众多智能应用。尽管应用多样&#xff0c;但底层技术逻辑却殊途同归&#xff0c;本文将介绍ZLG致远电子串行总线和EtherNET总线之间的联动应用。 本文将从系统集成需求出发&#xff0c;以ZLG致…

Koa进阶:掌握中间件和参数校验的艺术

目录 一、首先下载依赖 二、在index.js中引入koa-parameter&#xff0c;一般挂载这个中间件时会放在注册请求体的后面 三、使用实例 四、如果跟我们所需求的参数不同&#xff0c;返回结果直接会返回422 koa-parameter一般是用来校验请求传过来的参数是否是自己所需要的的 G…

Linux下使用miniconda构建python运行环境

文章目录 miniconda安装构建python运行环境 miniconda安装 miniconda在linux环境下载安装&#xff1a; # Linux环境下使用wget命令下载选定的miniconda # 这里使用的是清华镜像&#xff0c;这个命令每次下载的是最新版本的miniconda wget -c https://mirrors.tuna.tsinghua.e…