首页 > 编程语言 >Java后端04(Ajax异步加载)

Java后端04(Ajax异步加载)

时间:2023-08-03 16:44:32浏览次数:33  
标签:function Java name 04 url Ajax let 请求

Ajax异步加载

jsp涉及到的问题

  1. 每次哪怕是页面的局部修改,都会导致服务器重新获取,页面的所有信息,导致 jsp 页面的效率非常低下
  2. 前端 jsp 页面无法脱离服务器运行
  3. 前端和后端无法分离开发,开发效率低下

Ajax介绍

​ Ajax 是由谷歌开发,底层是通过 js 开发的技术,如果页面内容只是局部发生修改,不需要重新加载整个页面,而是局部加载,这个技术正是我们前后端分离的基础

前后端不分离图示(通过 Tomcat 进行处理)

前后端分离图示(反向代理实现前后端分离)

⭐反向代理通过 nginx 负载均衡来实现

hutool 工具包

导入工具包(maven 坐标)

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-json</artifactId>
    <version>5.8.18</version>
</dependency>

VO 软件包介绍 + 一个小栗子

​ ViewObject 存放的是前端所需要所希望接收的数据对象,为前端进行服务,前端需要什么,这里就封装成什么样子

// 一个栗子
public class ResultVO<T> {
    private boolean isOK;
    /**
     * 用于后端给前端传输的消息,类似存储响应编码等数据
     */
    private String mess;
    /**
     * 后端需要返回给前端的数据
     */
    private T t;
}
// js原生代码。。。极度繁琐且痛苦
let xmlHttp;
function check(){
    // 获取表单输入值
    let name = document.getElementById("name").value;
    // 定义url路径,进行参数拼接
    let url = "http://localhost:8080/checkName?name=" + name;
    // 创建 Ajax 所需要的 xhr 对象
    xmlHttp = new XMLHttpRequest();
    // 定义 Ajax 请求的响应函数
    xmlHttp.onreadystatechange=checkResult;
    // 设置请求所发送的 url 和请求的 method
    xmlHttp.open("GET",url,true);
    // 利用 Ajax 对象向指定 url 发送请求,send() 代表请求所携带的参数
    // 由于在上方已经拼接了参数,所以 send() 传参传null
    xmlHttp.send(null);
    // 如果没有提前拼接参数,则将数据以 js 的方式进行传递
    // xmlHttp.send({"name":name});
}
// 响应函数
function checkResult(){
    // readyState: 请求状态(0-请求未初始化,1-服务器连接已经建立,2-请求已经被接受,3-请求处理中,4-请求已经完成,并且响应已经就绪)
    // status: 响应编码(200-ok,404-找不到服务器)
    // responseText: 服务器返回的响应内容
    if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
        // 反序列化
        let jsonObject = JSON.parse(xmlHttp.responseText);
        document.getElementById("checkResult").innerHTML = jsonObject.mess;
    }
}
// 后台处理servlet
@WebServlet("/checkName")
public class CheckNameServlet extends HttpServlet {
    private final CategoryService categoryService = new CategoryServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 参数接收
        String name = req.getParameter("name");
        // 获取分类集合
        List<Category> categories = categoryService.list();
        boolean flag = false;
        loop:for (Category category : categories) {
            if(category.getName().equals(name)){
                flag = true;
                break loop;
            }
        }
        ResultVO vo = new ResultVO<>();
        if(flag){
            // 找到目标名
            vo.setOK(true);
            vo.setMess("存在目标信息");
        }else{
            // 没找到目标名
            vo.setOK(false);
            vo.setMess("没有找到匹配的信息");
        }
        // 将响应内容转换成 json 进行返回给 Ajax (借助响应对应的输出流)
        resp.getWriter().write(JSONUtil.toJsonStr(vo));
    }
}

Jquery ajax ---通过 Jquery 优化 js 原生代码

  1. $.ajax方式 ------ 好使,真滴好使!!!!!
$(function(){
    $('#name').blur(function(){
        // 设置url
        let url = "checkName";
        // 获取表单值
        let value = $(this).val();
        // 写 ajax 请求
        $.ajax({
            url:url,
            // 严格遵守 JSON 格式
            data:{"name":value},
            // 设置请求方式,默认GET
            method:"GET",
            // 响应成功之后所对应的响应函数
            // result:表示响应数据
            success:function(result){
                let jsObject = JSON.parse(result);
                $('#checkResult').html(jsObject.mess);
            }
        })
    })
})
  1. $.get方式 (专门用来发送 GET 请求)------ 没啥变化,就短了点,个人感觉还不如上边的
$(function(){
    $('#name').blur(function(){
        // 设置url
        let url = "checkName";
        // 获取表单值
        let value = $(this).val();
        // 写 get 请求
        $.get(
            url,
            {"name":value},
            function(result){	
                let jsObject = JSON.parse(result);
                $('#checkResult').html(jsObject.mess);
            }
        )
    })
})
  1. $.post方式 (专门用来发送 POST 请求)------ 和 $.get 大同小异,真心不如第一个好使吧,有一说一
$(function(){
    $('#name').blur(function(){
        // 设置url
        let url = "checkName";
        // 获取表单值
        let value = $(this).val();
        // 写 post 请求
        $.post(
            url,
            {"name":value},
            function(result){
                let jsObject = JSON.parse(result);
                $('#checkResult').html(jsObject.mess);
            }
        )
    })
})
  1. 一行实现 ------ 什么玩意?一行。。。一坨答辩,又不清晰,又记不住,何必呢
$(function(){
    $('#name').blur(function(){
        $('#checkResult').load("checkName?name=" + $(this).val());
    })
})

标签:function,Java,name,04,url,Ajax,let,请求
From: https://www.cnblogs.com/te9uila/p/17603747.html

相关文章

  • Javascript 方法有多个参数有默认值,但是只想为其中某个参数赋值
    例子:functionlog(a,b=2,c=3,d=4){console.log(a,b,c,d)}log(1);//output:1234log(1,3,6,9);//1369log(1,undefined,9,12);//12912log(1,undefined,0);//1204log(1,undefined,undefined,16);//12316就是在你想......
  • Java入门题-输入一个字母,判断是不是大写,是直接输出,不是转换成大写输出
    重要:利用ASCII码判断字母是否是大小写需要引用Scanner方法 代码:importjava.util.Scanner;1、利用char数组转化的优点在于面对字符串,也可以批量对单个字符操作Scannerget_letter=newScanner(System.in);StringgetLetter=get_letter.next();charss[]=getLetter.to......
  • python以及java环境搭建+解决不同版本环境共存问题
    1.搭建python环境1.安装python3.9.7,选择自定义安装、将文件添加至环境路径,然后选择下一步。2.默认、然后选择下一步。3.选择适用于所有使用者,选择自己想要存放的路径,然后选择点击安装。等待片刻。。。4.点击安装完成。使用cdm命令,输入python查看是否安装成功。5.安装python2......
  • android调用javascript传多个参数
    Stringparam1="Hello";Stringparam2="World";Stringscript="yourJavaScriptFunction('"+param1+"','"+param2+"');";webView.loadUrl("javascript:"+"yourJava......
  • Java入门题-输入3个数字比大小
    重要:能想明白输入数字之间大小比较的逻辑方式与之前相同,有关输入类型相关的,就需要引用Scanner方法 代码:不要忘记先 importjava.util.Scanner;1、复杂版-同时也是最开始思考时的思路版本intsave_number1=0,save_number2=0,save_number3=0;for(inti=1;i<4;......
  • Java入门题-判断输入数字是奇数还是偶数
    重要:需要引入Scanner方法importjava.util.Scanner; 代码:主要是通过求余方式处理解决 Scannerget_number=newScanner(System.in);intgetNumber=get_number.nextInt();if(getNumber%2==0){System.out.println(getNumber+"为偶数");}else{System.o......
  • Java入门题-20!阶乘
    重要:由于阶乘的特殊性,结果可能过大,最好使用存储范围更大的long处理问题,而不是使用int、short、byte代码:主要利用循环语句解决阶乘问题longtotal=1;for(inti=1;i<21;i++){total*=i;}System.out.println(total);......
  • Java应用内存溢出排查
    Java应用内存溢出&CPU占满排查1.获取异常进程IDtop-m2.保存堆快照jmap-dump:format=b,file=/data/logdir/dump.hprof[PID]3.观察GC状况#采样10次(2秒/次)后结束,5行1组输出jstat-gcutil-t-h5[PID]2s104.获取进程内线程详情,观察异常线程IDtop-......
  • java进程占用系统内存高,排查解决 _
    java进程占用系统内存高,排查解决_ 故障:今天许多开发反馈测试平台卡,访问不了,第一感觉判断是服务器内存爆了,或者cpu占用过高,上服务器看了一下,确实是内存爆了。然后开始定位问题原因,因为阿里这边安全的原因,具体的图片就不方便上传了,拿网上的图来说 使用top命令查看......
  • 老杜 JavaWeb 讲解(十八) ——项目优化(Servlet+JSP+EL+JSTL)
    (十六)项目优化(Servlet+JSP+EL+JSTL)相关视频:55-EL表达式JSTL和base标签改造OA新旧代码对比:注意点:Java代码不需要改动,只需要更改jsp代码。将需要的包导入:jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jarmysql-connector-j-8.0.31.j......