AJAX&&JSON

2023-10-26

课程笔记Day46

  • AJAX
  • JSON
  • 综合案例

第一章 AJAX

第01节 基础理论
1、概念说明
1. 什么是 AJAX ?
	AJAX是一项技术合集。他是由一套技术组合得到的新技术方案。 异步请求技术

2. AJAX有什么作用呢?
	使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,
	而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
	
3. 异步和同步的概念说明?
	A. 异步: 多个操作是相互独立的过程, 各自完成各自的操作,互不影响。
	B. 同步: 多个操作是有先后顺序的执行,只有前面的操作执行完成,才能执行下一步的操作。

4. 常见的应用常见?
	A. 校验用户名是否占用
	B. 搜索联想的效果
	C. 省级联动
	D. 分页效果
2、异步理解

画图说明(异步和同步)
在这里插入图片描述

3、实现方案
方案一:  JavaScript 的原生态方式实现 Ajax
方案二:  JQuery 的方式实现 Ajax
第02节 原生JS实现
1、操作步骤
1、在JS的事件函数当中, 去创建 XMLHttpRequest() 的对象
2、设置回调函数,当异步请求ajax完毕之后的效果  xhttp.onreadystatechange = functin(){ ... }
3、打开链接 xhttp.open("请求方式","请求的链接URL",是否支持异步)
4、发送请求 xhttp.send();
2、案例代码

位置 src/blb.chc01.ReginServlet

//定义注册的Servlet类

/****
 * http://localhost:8080/JavaWebDay24/ReginServlet?username=zhangsan
 */
@WebServlet("/ReginServlet")
public class ReginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doGet");
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doPost");
        //接收到客户端浏览器发送过来的参数信息
        String username = req.getParameter("username");
        //判断是否包含有指定的信息
        ArrayList<String> mList = new ArrayList<>();
        mList.add("zhangsan");
        mList.add("lisi");
        mList.add("wangwu");
        //=====[线程休眠10秒,模拟网络卡顿]======
        try {
            Thread.sleep(10*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //==============================
        String message;
        //判断一下数据是否存在? 判断集合当中是否包含有 username值
        if (mList.contains(username)){
            //数据已经存在
            message = "<span style='color:red'>用户名已经被占用</span>";
        }else{
            //数据已经存在
            message = "<span style='color:green'>用户名可以使用</span>";
        }
        //回复数据
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().println(message);
    }
}

位置 web/page/regin01.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面-原生JS实现AJAX</title>
</head>
<body>


<h3> 采用原生的JavaScript实现 AJAX </h3>

<form method="get" action="/JavaWebDay24/ReginServlet">

    <div>
        <label for="username">账号:</label>
        <input type="text" id="username" name="username" placeholder="请输入账号">
        <span id="usernameSpan"></span>
    </div>
    <div>
        <label for="password">密码:</label>
        <input type="text"  id="password" name="password" placeholder="请输入密码">
        <span id="passwordSpan"></span>
    </div>
    <div>
        <input type="submit" value="确认注册">
    </div>
</form>

</body>
</html>

<script>
    //页面加载完毕之后的函数,类似于 JQuery的入口函数
    window.onload = function () {
        //给我们的 用户名的输入框,绑定事件,绑定失去焦点的事件。
        document.querySelector("#username").onblur = function () {
            //获取到输入框当中输入的数据
            let username = this.value;
            //----------------------------
            //1. 准备XMLHttpRequest的对象
            let xhttp = new XMLHttpRequest();
            //2. 设置回调函数,当请求发送完毕,接收数据之后做的事情
            xhttp.onreadystatechange = function () {
                //判断当前的状态。200响应成功,4表示请求成功。
                if (xhttp.readyState===4 && xhttp.status === 200){
                    document.querySelector("#usernameSpan").innerHTML = xhttp.responseText;
                }
            }
            //3. 打开链接
            let urlMessage = "/JavaWebDay24/ReginServlet?username="+username;
            //参数1: 请求的方式
            //参数2: 请求的URL地址
            //参数3: 是否支持异步操作 true 表示支持
            xhttp.open("GET",urlMessage,true);
            //4. 发送请求
            xhttp.send();
        }
    }
</script>
第03节 JQuery实现Ajax
1、发送GET请求

操作步骤

$.get("请求的URL地址",function回调函数);

案例代码

位置 src/blb.chc01.ReginServlet

//定义注册的Servlet类

/****
 * http://localhost:8080/JavaWebDay24/ReginServlet?username=zhangsan
 */
@WebServlet("/ReginServlet")
public class ReginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doGet");
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doPost");
        //接收到客户端浏览器发送过来的参数信息
        String username = req.getParameter("username");
        Map<String, String[]> map = req.getParameterMap();
        map.forEach((key,value)-> System.out.println(key+","+value));
        //判断是否包含有指定的信息
        ArrayList<String> mList = new ArrayList<>();
        mList.add("zhangsan");
        mList.add("lisi");
        mList.add("wangwu");
        String message;
        //判断一下数据是否存在? 判断集合当中是否包含有 username值
        if (mList.contains(username)){
            //数据已经存在
            message = "<span style='color:red'>用户名已经被占用</span>";
        }else{
            //数据已经存在
            message = "<span style='color:green'>用户名可以使用</span>";
        }
        //回复数据
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().println(message);
    }
}

位置 web/page/regin04.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册页面-采用JQuery发送GET请求,实现AJAX</title>
</head>
<body>

<h3> 采用JQuery发送GET请求,实现AJAX </h3>

<form method="get" action="${pageContext.request.contextPath}/ReginServlet">

    <div>
        <label for="username">账号:</label>
        <input type="text" id="username"
               name="username" placeholder="请输入账号">
        <span id="usernameSpan"></span>
    </div>
    <div>
        <label for="password">密码:</label>
        <input type="text" id="password"
               name="password" placeholder="请输入密码">
        <span id="passwordSpan"></span>
    </div>
    <div>
        <input type="submit" value="确认注册">
    </div>
</form>
</body>
</html>

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        //输入框失去焦点之后的事件处理
        $("#username").blur(function () {
            //获取到输入框的数据值
            let username = this.value;
            //采用Ajax发送get请求
            let url = "${pageContext.request.contextPath}/ReginServlet" + "?username="+username;
            //参数1: 发送请求的URL地址
            //参数2: 回调函数,当请求发送之后,响应的数据,响应的数据值就是 data
            $.get(url,function (data) {
                $("#usernameSpan").html(data);
            });
        });
    });
</script>
2、发送POST请求

操作步骤

$.post("请求的URL地址",请求参数,function回调函数);

案例代码

位置 src/blb.chc01.ReginServlet

//定义注册的Servlet类

/****
 * http://localhost:8080/JavaWebDay24/ReginServlet?username=zhangsan
 */
@WebServlet("/ReginServlet")
public class ReginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doGet");
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doPost");
        //接收到客户端浏览器发送过来的参数信息
        String username = req.getParameter("username");
        Map<String, String[]> map = req.getParameterMap();
        map.forEach((key,value)-> System.out.println(key+","+value));
        //判断是否包含有指定的信息
        ArrayList<String> mList = new ArrayList<>();
        mList.add("zhangsan");
        mList.add("lisi");
        mList.add("wangwu");
        String message;
        //判断一下数据是否存在? 判断集合当中是否包含有 username值
        if (mList.contains(username)){
            //数据已经存在
            message = "<span style='color:red'>用户名已经被占用</span>";
        }else{
            //数据已经存在
            message = "<span style='color:green'>用户名可以使用</span>";
        }
        //回复数据
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().println(message);
    }
}

位置 web/page/regin05.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册页面-采用JQuery发送POST请求,实现AJAX</title>
</head>
<body>

<h3> 采用JQuery发送POST请求,实现AJAX </h3>

<form method="post" action="${pageContext.request.contextPath}/ReginServlet">

    <div>
        <label for="username">账号:</label>
        <input type="text" id="username"
               name="username" placeholder="请输入账号">
        <span id="usernameSpan"></span>
    </div>
    <div>
        <label for="password">密码:</label>
        <input type="text" id="password"
               name="password" placeholder="请输入密码">
        <span id="passwordSpan"></span>
    </div>
    <div>
        <input type="submit" value="确认注册">
    </div>
</form>
</body>
</html>

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        //输入框失去焦点之后的事件处理
        $("#username").blur(function () {
            //获取到输入框的数据值
            let username = this.value;
            //采用Ajax发送get请求
            let url = "${pageContext.request.contextPath}/ReginServlet";
            let params = {
                "username":username
            };
            //参数1: 发送请求的URL地址
            //参数2: 请求参数
            //参数3: 回调函数,当请求发送之后,响应的数据,响应的数据值就是 data
            $.post(url,params,function (data) {
                $("#usernameSpan").html(data);
            });
        });
    });
</script>
3、发送通用请求

操作步骤

$.ajax({
	键1:"值1",
	键2:"值2",
	键3:"值3"
});

案例代码

位置 src/blb.chc01.ReginServlet

//定义注册的Servlet类

/****
 * http://localhost:8080/JavaWebDay24/ReginServlet?username=zhangsan
 */
@WebServlet("/ReginServlet")
public class ReginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doGet");
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReginServlet.doPost");
        //接收到客户端浏览器发送过来的参数信息
        String username = req.getParameter("username");
        Map<String, String[]> map = req.getParameterMap();
        map.forEach((key,value)-> System.out.println(key+","+value));
        //判断是否包含有指定的信息
        ArrayList<String> mList = new ArrayList<>();
        mList.add("zhangsan");
        mList.add("lisi");
        mList.add("wangwu");
        String message;
        //判断一下数据是否存在? 判断集合当中是否包含有 username值
        if (mList.contains(username)){
            //数据已经存在
            message = "<span style='color:red'>用户名已经被占用</span>";
        }else{
            //数据已经存在
            message = "<span style='color:green'>用户名可以使用</span>";
        }
        //回复数据
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().println(message);
    }
}

位置 web/page/regin06.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册页面-采用JQuery发送通用请求,实现AJAX</title>
</head>
<body>

<h3> 采用JQuery发送通用请求,实现AJAX </h3>

<form method="get" action="${pageContext.request.contextPath}/ReginServlet">

    <div>
        <label for="username">账号:</label>
        <input type="text" id="username"
               name="username" placeholder="请输入账号">
        <span id="usernameSpan"></span>
    </div>
    <div>
        <label for="password">密码:</label>
        <input type="text" id="password"
               name="password" placeholder="请输入密码">
        <span id="passwordSpan"></span>
    </div>
    <div>
        <input type="submit" value="确认注册">
    </div>
</form>
</body>
</html>

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        //输入框失去焦点之后的事件处理
        $("#username").blur(function () {
            //获取到输入框的数据值
            let username = this.value;
            //采用通用的方式去发送 ajax请求
            /***
             * url: 表示的是请求的URL地址
             * data: 请求的参数信息
             * async: 表示是否支持异步操作,true表示支持,false表示不支持。默认是true
             * type: 请求的类型,GET或者POST
             * success: 请求成功之后的回调函数,当成功之后,做什么
             */
            $.ajax({
                url:"${pageContext.request.contextPath}/ReginServlet",
                data:{
                    "username":username
                },
                async:true,
                type:"POST",
                success:function (data) {
                    $("#usernameSpan").html(data);
                }
            });
        });
    });
</script>

第二章 JSON

第01节 基础理论
1、三种json格式
格式一:
	A. 类型: 
		对象类型
	B. 语法:
		{"name":"zhangsan","age":23,"gender":"男"}
	C. 说明:
		键是字符串类型, 值是任意类型。对象类型,采用大括号包起来。

格式二:
	A. 类型:
		数组类型
	B. 语法:
		[{"name":"zhangsan","age":23,"gender":"男"},{"name":"lisi","age":24,"gender":"男"}]
	C. 说明:
		对象类型,采用是中括号,包裹着对象,对象是大括号包裹着,里面由键值对组成

格式三:
	A. 类型:
		混合类型
	B: 语法:
		{message:[{"name":"zhangsan","age":23,"gender":"男"},{"name":"lisi","age":24,"gender":"男"}]}
	C. 说明:
		由对象和数组,综合在一起组成的效果
2、常用的类

操作步骤

在这里我们采用的是 jacksonJSON 解析的方式。SpringMVC 当中内置的解析方式。

操作步骤:
	A. 导入jar包	
		jackson-annotations-2.2.1.jar
		jackson-core-2.2.1.jar
		jackson-databind-2.2.1.jar
	B. 创建ObjectMapper的对象
	C. 读写数据 readAs...  writeAs...

常用类

1. ObjectMapper 他是我们 JacksonJson的核心类
2. TypeReference 主要是针对于集合的泛型,进行操作的
第02节 案例代码
1、对象变成JSON
//专门用于测试,写对象的操作
@SuppressWarnings("all")
public class Demo01 {

    //写对象
    //{"name":"张三","age":23,"gender":"男"}
    @Test
    public void testWriteObject() throws Exception {
        //创建对象
        Student stu = new Student("张三", 23, "男");
        //写对象
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(stu);
        System.out.println(json);
        //将数据保存到文件当中
        String path = "C:\\develop\\workspace\\java210712A\\JavaWebDay24\\web\\dir\\object.txt";
        BufferedWriter bw = new BufferedWriter(new FileWriter(path));
        bw.write(json);
        bw.newLine();
        bw.flush();
        bw.close();
    }

    //写数组
    //[{"name":"张三","age":23,"gender":"男"},{"name":"李四","age":24,"gender":"女"}]
    @Test
    public void testWriteArray() throws Exception {
        //创建对象
        Student stu1 = new Student("张三", 23, "男");
        Student stu2 = new Student("李四", 24, "女");
        ArrayList<Student> mlist = new ArrayList<>();
        mlist.add(stu1);
        mlist.add(stu2);
        //写数组
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(mlist);
        System.out.println(json);
        //将数据保存到文件当中
        String path = "C:\\develop\\workspace\\java210712A\\JavaWebDay24\\web\\dir\\array.txt";
        BufferedWriter bw = new BufferedWriter(new FileWriter(path));
        bw.write(json);
        bw.newLine();
        bw.flush();
        bw.close();
    }

	//写复杂类型
    //{"message":[{"name":"张三","age":23,"gender":"男"},{"name":"李四","age":24,"gender":"女"}],"status":200}
    @Test
    public void testWriteComplex() throws Exception{
        //创建对象
        Student stu1 = new Student("张三", 23, "男");
        Student stu2 = new Student("李四", 24, "女");
        List<Student> mlist = new ArrayList<>();
        mlist.add(stu1);
        mlist.add(stu2);
        HashMap<String, Object> map = new HashMap<>();
        map.put("message",mlist);
        map.put("status",200);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(map);
        System.out.println(json);

        //将数据保存到文件当中
        String path = "C:\\develop\\workspace\\java210712A\\JavaWebDay24\\web\\dir\\complex.txt";
        BufferedWriter bw = new BufferedWriter(new FileWriter(path));
        bw.write(json);
        bw.newLine();
        bw.flush();
        bw.close();
    }
}
2、JSON转变对象
//如果是JSON转换成为对象
@SuppressWarnings("all")
public class Demo02 {

    //读取对象的操作
    //{"name":"张三","age":23,"gender":"男"}
    @Test
    public void testReadObject() throws Exception {
        String json;
        String path = "C:\\develop\\workspace\\java210712A\\JavaWebDay24\\web\\dir\\object.txt";
        BufferedReader br = new BufferedReader(new FileReader(path));
        json = br.readLine();
        br.close();
        System.out.println("json = " + json);
        //将数据转换成为对象
        ObjectMapper mapper = new ObjectMapper();
        Student stu = mapper.readValue(json, Student.class);
        System.out.println("stu = " + stu);
    }

    //读取数组的操作
    //[{"name":"张三","age":23,"gender":"男"},{"name":"李四","age":24,"gender":"女"}]
    @Test
    public void testReadArray() throws Exception {
        String json;
        String path = "C:\\develop\\workspace\\java210712A\\JavaWebDay24\\web\\dir\\array.txt";
        BufferedReader br = new BufferedReader(new FileReader(path));
        json = br.readLine();
        br.close();
        System.out.println("json = " + json);
        //将数据转换成为数组
        ObjectMapper mapper = new ObjectMapper();
        List<Student> mList = mapper.readValue(json, new TypeReference<List<Student>>() {
        });
        //展示结果
        mList.forEach(System.out::println);
    }


    //读取复杂的操作
    //{"message":[{"name":"张三","age":23,"gender":"男"},{"name":"李四","age":24,"gender":"女"}],"status":200}
    @Test
    public void testReadComplex() throws Exception {
        String json;
        String path = "C:\\develop\\workspace\\java210712A\\JavaWebDay24\\web\\dir\\complex.txt";
        BufferedReader br = new BufferedReader(new FileReader(path));
        json = br.readLine();
        br.close();
        System.out.println("json = " + json);
        //将数据转换成为数组
        ObjectMapper mapper = new ObjectMapper();
        //更换另外一套API操作
        JsonNode rootNode = mapper.readTree(json);
        String s = rootNode.get("message").toString();
        //对message的信息,再次进行JSON解析
        List<Student> mlist = mapper.readValue(s,new TypeReference<List<Student>>(){});
        mlist.forEach(System.out::println);
    }
}

第三章 综合案例

第01节 需求说明
1、需求介绍
制作一个搜索联想的案例,在输入框当中输入人物的姓,可以展示所有的与姓相关的名字。

例如:
	在输入框当中, 输入数据 "宋"
	可以展示得到以下几个数据:  "宋江"、"宋清"、"宋万"
2、分析说明

在这里插入图片描述

第02节 案例代码
1、数据准备
-- 01. 使用数据库
DROP DATABASE IF EXISTS db01;
CREATE DATABASE IF NOT EXISTS db01;
USE db01;
 
-- 02. 删除表,如果存在则删除
DROP TABLE IF EXISTS waterhero;
 
-- 03. 创建表
CREATE TABLE IF NOT EXISTS waterhero (
  id INT(3) PRIMARY KEY AUTO_INCREMENT,     -- 编号
  rank VARCHAR(16),                         -- 排名
  star VARCHAR(16),                         -- 星座
  nicename VARCHAR(16),                     -- 人物花名
  truename VARCHAR(16),                     -- 真实姓名
  description VARCHAR(1024)                 -- 性格描述 
);
 
-- 04. 插入数据
INSERT INTO waterhero VALUES ('1', '一', '天魁星', '及时雨(呼保义)', '宋江', '孝顺忠君 有领导才能');
INSERT INTO waterhero VALUES ('2', '二', '天罡星', '玉麒麟', '卢俊义', '武功高强,为人固执');
INSERT INTO waterhero VALUES ('3', '三', '天机星', '智多星', '吴用', '足智多谋,善用计策');
INSERT INTO waterhero VALUES ('4', '四', '天闲星', '入云龙', '公孙胜', '正直大气,武艺高强');
INSERT INTO waterhero VALUES ('5', '五', '天勇星', '大刀', '关胜', '文武双全,赤胆忠心');
INSERT INTO waterhero VALUES ('6', '六', '天雄星', '豹子头', '林冲', '为人正直,隐忍善良');
INSERT INTO waterhero VALUES ('7', '七', '天猛星', '霹雳火', '秦明', '性格急躁,声如雷霆');
INSERT INTO waterhero VALUES ('8', '八', '天威星', '双鞭', '呼延灼', '正直,大气');
INSERT INTO waterhero VALUES ('9', '九', '天英星', '小李广', '花荣', '武功高强,为人仗义');
INSERT INTO waterhero VALUES ('10', '十', ' 天贵星', '小旋风', '柴进', ' 为人慷慨,见义勇为');
INSERT INTO waterhero VALUES ('11', '十一', '天富星', '扑天雕', '李应', '嫉恶如仇,见义勇为');
INSERT INTO waterhero VALUES ('12', '十二', '天满星', '美髯公', '朱仝', '仗义疏财,义字当头');
INSERT INTO waterhero VALUES ('13', '十三', '天孤星', '花和尚', '鲁智深', '心地刚直,生性凶顽');
INSERT INTO waterhero VALUES ('14', '十四', '天伤星', '行者', '武松', '光明磊落,敢作敢为');
INSERT INTO waterhero VALUES ('15', '十五', '天立星', '双枪将', '董平', '冲动 忠肝义胆  好胜');
INSERT INTO waterhero VALUES ('16', '十六', '天捷星', '没羽箭', '张清', '性格内向,非常内敛');
INSERT INTO waterhero VALUES ('17', '十七', '天暗星', '青面兽', '杨志', '勤快,身手不凡');
INSERT INTO waterhero VALUES ('18', '十八', '天佑星', '金枪手', '徐宁', '胆大,有万夫不挡之勇');
INSERT INTO waterhero VALUES ('19', '十九', '天空星', '急先锋', '索超', '性子急,执着,鲁莽');
INSERT INTO waterhero VALUES ('20', '二十', '天速星', '神行太保', '戴宗', '嫉恶如仇、侠肝义胆、脾气火爆');
INSERT INTO waterhero VALUES ('21', '二十一', '天异星', '赤发鬼', '刘唐', '勇猛莽撞');
INSERT INTO waterhero VALUES ('22', '二十二', '天杀星', '黒旋风', '李逵 ', '正直粗鲁,勇猛无比');
INSERT INTO waterhero VALUES ('23', '二十三', '天微星', '九纹龙', '史进', '武艺高超,嫉恶如仇');
INSERT INTO waterhero VALUES ('24', '二十四', '天究星', '没遮拦', '穆弘', '平凡善良、耐心平和、持重端庄');
INSERT INTO waterhero VALUES ('25', '二十五', '天退星', '插翅虎', '雷横', '脾气暴躁,为人耿直');
INSERT INTO waterhero VALUES ('26', '二十六', '天寿星', '混江龙', '李俊', '为人正直,水中功夫超强');
INSERT INTO waterhero VALUES ('27', '二十七', '天剑星', '立地太岁', '阮小二', '武艺出众,英勇善战');
INSERT INTO waterhero VALUES ('28', '二十八', '天平星', '船火儿', '张横', '英勇善战');
INSERT INTO waterhero VALUES ('29', '二十九', '天罪星', '短命二郎', '阮小五', '水中好汉,奋勇杀敌');
INSERT INTO waterhero VALUES ('30', '三十', '天损星', '浪里白条', '张顺', '水中功夫好,豪爽仗义,惩恶济善,有仇必报');
INSERT INTO waterhero VALUES ('31', '三十一', '天败星', '活阎罗', '阮小七', '心快口快');
INSERT INTO waterhero VALUES ('32', '三十二', '天牢星', '病关索', '杨雄', '为人正直');
INSERT INTO waterhero VALUES ('33', '三十三', '天慧星', '拼命三郎', '石秀', '打抱不平');
INSERT INTO waterhero VALUES ('34', '三十四', '天暴星', '两头蛇', '解珍', '作战英勇');
INSERT INTO waterhero VALUES ('35', '三十五', '天哭星', '双尾蝎', '解宝', '为人灵活,作战英勇');
INSERT INTO waterhero VALUES ('36', '三十六', '天巧星', '浪子', '燕青', '武功高强,为人风流');
INSERT INTO waterhero VALUES ('37', '三十七', '地魁星', '神机军师', '朱武', '精通阵法,广有谋略');
INSERT INTO waterhero VALUES ('38', '三十八', '地煞星', '镇三山', '黄信', '一身好武艺,英勇善战');
INSERT INTO waterhero VALUES ('39', '三十九', '地勇星', '病尉迟', '孙立', '精熟弓马,武艺过人,正直');
INSERT INTO waterhero VALUES ('40', '四十', '地杰星', '丑郡马', '宣赞', '相貌丑陋,武艺出众');
INSERT INTO waterhero VALUES ('41', '四十一', '地雄星', '井木犴', '郝思文', '仗义侠胆,有勇有谋');
INSERT INTO waterhero VALUES ('42', '四十二', '地威星', '百胜将', '韩滔', '力大无穷,有勇有谋');
INSERT INTO waterhero VALUES ('43', '四十三', '地英星', '天目将', '彭玘', '扶危救困,义气第一');
INSERT INTO waterhero VALUES ('44', '四十四', '地奇星', '圣水将', '单廷圭', '风流潇洒,气宇轩昂');
INSERT INTO waterhero VALUES ('45', '四十五', '地猛星', '神火将', '魏定国', '风流潇洒,礼貌待人');
INSERT INTO waterhero VALUES ('46', '四十六', '地文星', '圣手书生', '萧让', '擅长写字,不爱说话');
INSERT INTO waterhero VALUES ('47', '四十七', '地正星', '铁面孔目', '裴宣', '忍辱负重,忠诚憨厚');
INSERT INTO waterhero VALUES ('48', '四十八', '地阔星', '摩云金翅', '欧鹏', '武功不低,挫折感强,比较谨慎');
INSERT INTO waterhero VALUES ('49', '四十九', '地阖星', '火眼狻猊', '邓飞', '武功不差,舍己为人');
INSERT INTO waterhero VALUES ('50', '五十', '地强星', '锦毛虎', '燕顺', '有情有义,重英雄');
INSERT INTO waterhero VALUES ('51', '五十一', '地暗星', '锦豹子', '杨林', '聪明,比较谨慎');
INSERT INTO waterhero VALUES ('52', '五十二', '地轴星', '轰天雷', '凌振', '精通武艺,是一个非常厉害的人物');
INSERT INTO waterhero VALUES ('53', '五十三', '地会星', '神算子', '蒋敬', '武艺高强,胆大');
INSERT INTO waterhero VALUES ('54', '五十四', '地佐星', '小温侯', '吕方', '为人忠义 武功高强 不服输');
INSERT INTO waterhero VALUES ('55', '五十五', '地佑星', '赛仁贵', '郭盛', '有勇无谋,义气为重');
INSERT INTO waterhero VALUES ('56', '五十六', '地灵星', '神医', '安道全', '医术高明,好色');
INSERT INTO waterhero VALUES ('57', '五十七', '地兽星', '紫髯伯', '皇甫端', '医道高明,诊治马病,手到病除,胡须大紫');
INSERT INTO waterhero VALUES ('58', '五十八', '地微星', '矮脚虎', '王英', '身材矮小,脾气暴躁');
INSERT INTO waterhero VALUES ('59', '五十九', '地慧星', '一丈青', '扈三娘', '机智聪明,为人仗义');
INSERT INTO waterhero VALUES ('60', '六十', '地暴星', '丧门神', '鲍旭', '正直粗鲁,勇猛无比');
INSERT INTO waterhero VALUES ('61', '六十一', '地然星', '混世魔王', '樊瑞', '阴柔有余、阳刚不足');
INSERT INTO waterhero VALUES ('62', '六十二', '地猖星', '毛头星', '孔明', '为人行侠仗义 武艺平平 忠肝义胆');
INSERT INTO waterhero VALUES ('63', '六十三', '地狂星', '独火星', '孔亮', '本事低微,武功很差');
INSERT INTO waterhero VALUES ('64', '六十四', '地飞星', '八臂哪吒', '项充', '有情有义,武艺高强');
INSERT INTO waterhero VALUES ('65', '六十五', '地走星', '飞天大圣', '李衮', ' 武艺高强 四海之内皆兄');
INSERT INTO waterhero VALUES ('66', '六十六', '地巧星', '玉臂匠', '金大坚', '技艺高超,善于雕刻');
INSERT INTO waterhero VALUES ('67', '六十七', '地明星', '铁笛仙', '马麟', '好勇斗狠,讲义气');
INSERT INTO waterhero VALUES ('68', '六十八', '地进星', '出洞蛟', '童威', '能伏水,会驾船');
INSERT INTO waterhero VALUES ('69', '六十九', '地退星', '翻江蜃', '童猛', '水性极好');
INSERT INTO waterhero VALUES ('70', '七十', '地满星', '玉幡竿', '孟康', '人高马大,善于制造大小船只');
INSERT INTO waterhero VALUES ('71', '七十一', '地遂星', '通臂猿', '侯健', '飞针走线,技艺高超');
INSERT INTO waterhero VALUES ('72', '七十二', '地周星', '跳涧虎', '陈达', '体魄强健,生性粗鲁');
INSERT INTO waterhero VALUES ('73', '七十三', '地隐星', '白花蛇', '杨春', '使一口大杆刀,武艺精熟');
INSERT INTO waterhero VALUES ('74', '七十四', '地异星', '白面郎君', '郑天寿', '鲁莽,比较重义气');
INSERT INTO waterhero VALUES ('75', '七十五', '地理星', '九尾龟', '陶宗旺', '力大无比,正直勇敢');
INSERT INTO waterhero VALUES ('76', '七十六', '地俊星', '铁扇子', '宋清', '为人诚恳,热情好客');
INSERT INTO waterhero VALUES ('77', '七十七', '地乐星', '铁叫子', '乐和', '文武全行、且兴趣广泛、聪明绝顶');
INSERT INTO waterhero VALUES ('78', '七十八', '地捷星', '花项虎', '龚旺', '一生行侠仗义,性格耿直');
INSERT INTO waterhero VALUES ('79', '七十九', '地速星', '中箭虎', '丁得孙', '为人勇猛 武艺高强 艺高 胆大 有义气');
INSERT INTO waterhero VALUES ('80', '八十', '地镇星', '小遮拦', '穆春', '武艺高强 崇尚忠义');
INSERT INTO waterhero VALUES ('81', '八十一', '地羁星', '操刀鬼', '曹正', '平时像个孩子,性格天真 活泼。但战斗时,不顾一切战斗');
INSERT INTO waterhero VALUES ('82', '八十二', '地魔星', '云里金刚', '宋万', '高大威猛,武艺平常');
INSERT INTO waterhero VALUES ('83', '八十三', '地妖星', '摸着天', '杜迁', '本事平平,武艺一般');
INSERT INTO waterhero VALUES ('84', '八十四', '地幽星', '病大虫', '薛永', '讲义气,重朋友');
INSERT INTO waterhero VALUES ('85', '八十五', '地僻星', '打虎将', '李忠', '做事悭吝小气 不慷慨');
INSERT INTO waterhero VALUES ('86', '八十六', '地空星', '小霸王', '周通', '鲁莽,粗暴,不仗义');
INSERT INTO waterhero VALUES ('87', '八十七', '地孤星', '金钱豹子', '汤隆', '为人义气,性情耿直,为山寨尽心竭力');
INSERT INTO waterhero VALUES ('88', '八十八', '地全星', '鬼脸儿', '杜兴', '鲁莽,讲义气');
INSERT INTO waterhero VALUES ('89', '八十九', '地短星', '出林龙', '邹渊', '冲动 好赌 贪婪');
INSERT INTO waterhero VALUES ('90', '九十', '地角星', '独角龙', '邹润', '慷慨大义');
INSERT INTO waterhero VALUES ('91', '九十一', '地囚星', '旱地忽律', '朱贵', '性格直率,善良');
INSERT INTO waterhero VALUES ('92', '九十二', '地藏星', '笑面虎', '朱富', '行侠仗义 嫉恶如仇 仔细 谨慎');
INSERT INTO waterhero VALUES ('93', '九十三', '地伏星', '金眼彪', '施恩', '使得一身好拳棒,会施展恩惠');
INSERT INTO waterhero VALUES ('94', '九十四', '地平星', '铁臂膊', '蔡福', '替天行道,正义');
INSERT INTO waterhero VALUES ('95', '九十五', '地损星', '一枝花', '蔡庆', '大义,武功高强');
INSERT INTO waterhero VALUES ('96', '九十六', '地奴星', '催命判官', '李立', '武艺高超,为人仗义');
INSERT INTO waterhero VALUES ('97', '九十七', '地察星', '青眼虎', '李云', '率直 仗义');
INSERT INTO waterhero VALUES ('98', '九十八', '地恶星', '没面目', '焦挺', '拳脚熟练,讲义气');
INSERT INTO waterhero VALUES ('99', '九十九', '地丑星', '石将军', '石勇', '武功一般,粗蛮胆大');
INSERT INTO waterhero VALUES ('100', '一百', '地数星', '小尉迟', '孙新', '正直勇敢,讲义气');
INSERT INTO waterhero VALUES ('101', '一百零一', '地阴星', '母大虫', '顾大嫂', '豪爽急躁,倔强暴躁');
INSERT INTO waterhero VALUES ('102', '一百零二', '地刑星', '菜园子', '张青', '性格内向,憨厚老实');
INSERT INTO waterhero VALUES ('103', '一百零三', '地壮星', '母夜叉', '孙二娘', '性情暴躁,举止粗鲁');
INSERT INTO waterhero VALUES ('104', '一百零四', '地劣星', '活闪婆', '王定六', '嫉恶如仇 识英雄 路见不平拔刀相助');
INSERT INTO waterhero VALUES ('105', '一百零五', '地健星', '险道神', '郁保四', '忠义双全 重英雄');
INSERT INTO waterhero VALUES ('106', '一百零六', '地耗星', '白日鼠', '白胜', '仗义,坚定');
INSERT INTO waterhero VALUES ('107', '一百零七', '地贼星', '鼓上蚤', '时迁', '聪明机智,社会经验丰富 ,善于乔装打扮');
INSERT INTO waterhero VALUES ('108', '一百零八', '地狗星', '金毛犬', '段景住', '性格沉稳,脾气好');
 

-- 05. 查询数据表
SELECT * FROM waterhero;
2、Dao和Service实现

位置 src/blb.chc03.bean.HeroBean

public class HeroBean {

    private int id;
    private String rank;
    private String star;
    private String nicename;
    private String truename;
    private String description;

    public HeroBean() {
    }

    public HeroBean(int id, String rank, String star, String nicename, String truename, String description) {
        this.id = id;
        this.rank = rank;
        this.star = star;
        this.nicename = nicename;
        this.truename = truename;
        this.description = description;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getRank() {
        return rank;
    }

    public void setRank(String rank) {
        this.rank = rank;
    }

    public String getStar() {
        return star;
    }

    public void setStar(String star) {
        this.star = star;
    }

    public String getNicename() {
        return nicename;
    }

    public void setNicename(String nicename) {
        this.nicename = nicename;
    }

    public String getTruename() {
        return truename;
    }

    public void setTruename(String truename) {
        this.truename = truename;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "HeroBean{" +
                "id=" + id +
                ", rank='" + rank + '\'' +
                ", star='" + star + '\'' +
                ", nicename='" + nicename + '\'' +
                ", truename='" + truename + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}

位置: src/blb.chc03.dao.HeroDao

package blb.chc03.dao;

import blb.chc03.bean.HeroBean;

import java.util.List;

public interface HeroDao {

    //定义一个方法,根据名称查询所有
    public abstract List<HeroBean> selectByName(String name);
}

位置:src/blb.chc03.dao.impl.HeroDaoImpl

import blb.chc03.bean.HeroBean;
import blb.chc03.dao.HeroDao;
import blb.chc03.util.JDBCUtil;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class HeroDaoImpl implements HeroDao {
    @Override
    public List<HeroBean> selectByName(String name) {
        //定义sql语句
        String sql = "SELECT * FROM waterhero WHERE truename LIKE '" + name + "%'";
        //采用 JdbcTemplate 去完成
        JdbcTemplate template = new JdbcTemplate(JDBCUtil.getDataSource());
        List<HeroBean> mList = template.query(sql, new BeanPropertyRowMapper<>(HeroBean.class));
        return mList;
    }
}

位置 src/blb.chc03.service.HeroService

package blb.chc03.service;

import blb.chc03.bean.HeroBean;

import java.util.List;

public interface HeroService {

    //定义一个方法,根据名称查询所有
    public abstract List<HeroBean> selectByName(String name);
}

位置 src/blb.chc03.service.impl.HeroServiceImpl

package blb.chc03.service.impl;

import blb.chc03.bean.HeroBean;
import blb.chc03.dao.HeroDao;
import blb.chc03.dao.impl.HeroDaoImpl;
import blb.chc03.service.HeroService;

import java.util.List;

public class HeroServiceImpl implements HeroService {
    @Override
    public List<HeroBean> selectByName(String name) {
        //只需要创建 HeroDao 里面的对象,得到结果
        HeroDao dao = new HeroDaoImpl();
        List<HeroBean> heroBeanList = dao.selectByName(name);
        return heroBeanList;
    }
}

位置 src/blb.chc03.util.JDBCUtil

package blb.chc03.util;


import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtil {

    private static DataSource ds = null;

    static {
        try {
            String path = "C:\\develop\\workspace\\java210712A\\JavaWebDay24\\web\\dir\\druid.properties";
            FileInputStream is = new FileInputStream(path);
            Properties pp = new Properties();
            pp.load(is);
            is.close();
            ds = DruidDataSourceFactory.createDataSource(pp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取到连接池对象的方法
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /***
     * 获取到连接的对象
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            //预防空指针异常。如果我们的 Properties 内容错误
            if (ds != null) {
                conn = ds.getConnection();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }


    /**
     * 释放资源
     */
    public static void close(Connection conn, Statement stat){
        close(conn,stat,null);
    }

    public static void close(Connection conn, Statement stat, ResultSet resu){
        if (resu!=null){
            try {
                resu.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stat!=null){
            try {
                stat.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
3、Servlet的实现
/***
 * http://localhost:8080/JavaWebDay24/HeroServlet?truename=宋
 */

@WebServlet("/HeroServlet")
public class HeroServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HeroServlet.doGet");
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HeroServlet.doPost");
        //编码方式和数据的获取
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        String truename = req.getParameter("truename");
        //访问服务层 service 的代码
        HeroService service = new HeroServiceImpl();
        List<HeroBean> mList = service.selectByName(truename);
        //封装成为JSON数据
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(mList);
        //响应数据给浏览器
        resp.getWriter().println(json);
    }
}
4、JSP页面实现
<%@ page import="com.fasterxml.jackson.databind.ObjectMapper" %>
<%@ page import="blb.chc03.bean.HeroBean" %>
<%@ page import="java.util.List" %>
<%@ page import="com.fasterxml.jackson.core.type.TypeReference" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>搜索联想案例</title>
</head>
<body>

<form method="get" action="${pageContext.request.contextPath}/HeroServlet">

    <input id="truename" type="text" name="truename" placeholder="请输入水浒英雄的名字">
</form>
<div id="divid">

</div>

</body>
</html>

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        $("#truename").change(function () {
            //获取到数据值
            let truename = this.value;
            //准备发送ajax请求
            $.ajax({
                url:"${pageContext.request.contextPath}/HeroServlet",
                data:{
                    "truename":truename
                },
                async:true,
                type:"GET",
                success:function (data) {
                   //直接展示结果
                    $("#divid").html(data);
                }
            });
        });
    });
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AJAX&&JSON 的相关文章

  • 如何配置 Webpack 5 包以使用全局 jQuery?

    我有一个正在加载 jQuery 的网页 其中有一个指向 CDN 的脚本标记 我正在将 jQuery 加载到全局范围内 并且在整个站点中都有少量 JS 使用它 这一切都工作正常 我想继续以这种方式加载 jQuery 除此之外 我使用 Webp
  • AJAX 表单不显示成功或错误消息

    这个问题我以前也问过 但还是没搞明白 我做了一些改变 但不幸的是我仍然没有得到任何运气 表单本身可以工作 但当用户尝试发送表单时 它还应该显示错误或成功消息 但它不显示消息 而是发送表单而不显示它 看看我的代码 HTML
  • Apache Cordova (Phonegap):跨站点脚本编写需要 jsonp 吗?

    我刚刚开始使用 Apache Cordova 我有一个库可以 通过ajax 调用soap 服务器 当我在本地计算机上的 Chrome 中运行这些程序时 在尝试调用该服务时会出现跨站点脚本错误 当我在 iOS 模拟器中使用 Cordova 浏
  • 使用 Google Calendar API 返回 401(未经授权)

    我尝试通过 JavaScript 使用 Google Calendar API 并在使用以下代码时不断收到 401 错误响应 ajax dataType json url https www googleapis com calendar
  • 在客户端处理模式下使用 jQuery DataTables 对字母数字数据进行排序

    所以我有一个包含字母数字值的表 例如 8980 1100 A1100 BA200 我希望它首先以数字顺序方式对其进行排序 然后以字母数字方式进行排序 例如 1000 8980 A1100 BA200 在这里找到了一些帮助 但不完全是我正在寻
  • 使用 jQuery 加载脚本时保持范围

    假设我有一个包含以下内容的文件 test js var test something 然后我有一个主要脚本需要加载 test js 以获取测试变量 显然这有效 ajax dataType script cache true url test
  • 使用 AJAX (jQuery) 加载日期在 div 内无限滚动

    我一直试图通过几个问题来解决这个问题 找出不同的部件 然后组装它们 但现在我放弃了 我正在尝试做的事情 用户在页面上单击按钮 然后使用 jQuery ajax 将内容列表加载到 div 中 当他或她滚动到 div 底部时 加载更多内容 正如
  • 有没有办法在网站中嵌入维基百科文章并设置其样式?

    我想做的基本上是一个 div 元素 其中包含维基百科文章的打印友好版本 我使用 iframe 来嵌入文章并且它可以工作 尽管我无法设置文档的样式 我想这是因为 iframe 内容不在我的域中并且我没有编辑权限 有没有办法在加载 iframe
  • 如何设置上一个/下一个箭头按钮的样式?

    GOAL 我一直在尝试修改slick css以适应我的网站所需的风格 我拿到slick css from here http kenwheeler github io slick Now 我想让箭头 左 右 更大 对于图标 我想使用没有的图
  • 如何在 JQuery 中访问由 serializeArray 创建的值?

    我有这个 HTML
  • 将 css 宽度字符串转换为常规数字

    在尝试计算隐藏元素的宽度时 我发现 jquery width 对于该元素的宽度返回 0 我发现使用 jquery css width 将通过使用声明的样式宽度返回正确的宽度 即使该值与初始样式表不同 问题是 css width 方法返回一个
  • 如何在 suave webpart 中设置 Json 响应

    我从 Suave 和 F 开始 我正在尝试在我的 web 部件中传递一个 json 序列化对象以在我的响应中获取它 在 php 中我有这个 player1Key hdegftzj25 gameKey aegfhzkfszl
  • 使 URL W3C 有效并在 Ajax 请求中工作

    我有一个返回 URL 的通用函数 这是一个插件函数 可返回插件内资源 图像 样式表 的 URL 我在这些 URL 中使用 GET 参数 如果我想在 HTML 页面中使用这些 URL 以通过 W3C 验证 我需要将 符号屏蔽为 plugin
  • jquery 陷印只允许字母

    我正在创建一个网页 其中有一个输入文本字段 我只想在其中只允许输入字母表 我怎样才能使用 jQuery 来实现它 Thanks jquery inputmask http plugins jquery com project inputma
  • 启用 WCF 数据服务默认接受/返回 JSON

    我有一个 WCF 数据服务 我希望默认情况下为所有操作返回 JSON 我可以在配置 通过服务属性中设置它吗 为了通过 format 标签启用 json 如下所示 host 8038 YourService svc format json 将
  • Rails,单击 link_to helper 后未加载 JavaScript

    当我在 Rails 中使用 link to 帮助程序时 我在加载 javascript 时遇到了一些问题 当我手动输入 localhost 3000 products new 的 url 或重新加载页面时 JavaScript 会加载 但是
  • 如何通过向上移动到地址栏来检测鼠标离开页面?

    我创建了一个 jQuery 事件 当访问者离开页面时会弹出一个对话框 我正在使用 e pageY 来检测鼠标位置 当鼠标位于Y 小于2时 弹出对话框 问题是 当我向下滚动页面并决定离开页面时 弹出窗口不会显示 因为鼠标不在 Y 小于 2 处
  • django 序列化器到 json - 自定义 json 输出格式

    我对 django 很陌生 最近我需要 JSON 输出 为此我使用以下 django 代码 data serializers serialize json Mymodel objects all 它工作得很好 除了我得到的输出 pk 897
  • 使用 Alamofire 获取 JSON 并解码 - Swift 4

    我有一个 API 我也想获取请求 但我尝试使用 JSONDecoder 来转换数据类型 但失败了 我不知道如何像下面的数据一样解码这个 Json 我要拿json 响应 设置我的用户结构的内容 对我有什么建议吗 谢谢 错误域 NSCocoaE
  • 获取通过discord.js选项传递的值

    const data new SlashCommandBuilder gt command setName info setDescription addStringOption option gt option setName steam

随机推荐

  • 初始C语言——从大到小排序

    三个数的排序 三个数之间两两比较类似于三个数中显示最大值 两两比较 但是有一个问题 最大值问题只需要输出最大值即可而排序问题则还要排序 那么我们是否可以确定三个位置x y z将最大值依次赋值给x y z确保输出时x y z的位置是从左到右输
  • 真二次元!动漫形象风格迁移

    点击上方 机器学习与生成对抗网络 关注星标 获取有趣 好玩的前沿干货 文章 机器之心 一张输入人脸图像 竟能生成多样化风格的动漫形象 伊利诺伊大学香槟分校的研究者做到了 他们提出的全新 GAN 迁移方法实现了 一对多 的生成效果 在 GAN
  • 【JVM】JVM-codecache内存区域介绍

    1 概述 转载 https leokongwq github io 2016 10 12 maven test html 2 JVM codecache内存区域介绍 大家都知道JVM在运行时会将频繁调用方法的字节码编译为本地机器码 这部分代
  • 网络层_数据平面_四(题目完成)

    网络 引入网络层学习 分组交换 虚电路VC 数据报网络 CIDR DHCP 路由器 IP数据报格式 IPv4 IPv6 过渡策略 双栈 隧道 特殊IP地址即内部IP地址 流表中匹配 动作 计算机自顶向下方法 第七版课后习题及答案 正在更新中
  • 论文解读:Investigating the Factual Knowledge Boundary of Large Language Models with Retrieval Augmentati

    论文解读 Investigating the Factual Knowledge Boundary of Large Language Models with Retrieval Augmentation 一 动机 Knowledge in
  • C++ 智能指针我得用用看

    文章目录 0 前言 0 1 使用智能指针的原因 0 2 智能指针和普通指针的区别 什么是智能指针 1 auto ptr 1 1 基本说明 1 2 例子 chestnut 1 3 使用建议 3 unique ptr 3 1 实现原理 3 2
  • [游戏开发]网络同步方式

    状态同步 优点 数据在服务器运算 客户端接收到的数据一定准确 防止数据作弊 角色数据在服务器 客户端只上传操作 想作弊没门 网络波动不敏感 多端表现可以不一致 重视数值准确 缺点 前后端数据包体大 服务器压力比较重 计算量 传输量 研发特点
  • java中冒号(:)的用法

    java中冒号的用法大概可以分为四种 用在for循环中 用来遍历数组 集合 中的元素 for x nums print x 用在三目运算符中 表达式 执行语句1 执行语句2 这里的冒号是用来根据前面表达式的值正确与否 选择后面对应执行语句的
  • 多线程实现的方式

    1 继承Thread类 通过继承Thread类 并重写run方法 public class MyThread extends Thread public static void main String args MyThread myThr
  • sudo vim找不到命令(Ubuntu16.04)

    在使用vim配置环境变量时 提示 sudo vim 找不到命令 原因是因为没有安装vim 下面我们就来在终端进行安装一下 前提是需要连上网了 没有联网不在此考虑范围 1 进入终端 Ctrl Alt T 出现终端窗口 2 输入命令 sudo
  • Linux:WSL 下 CTS 环境搭建及无法识别设备问题

    WSL Windows Subsystem for Linux 简称WSL 是一个在Windows 10上能够运行原生Linux二进制可执行文件 ELF格式 的兼容层 它是由微软与Canonical公司合作开发 其目标是使纯正的Ubuntu
  • mysql [Err] 1118 - Row size too large (> 8126).

    错误代码 1118 Row size too large gt 8126 Changing some columns to TEXT or BLOB may help In current row format BLOB prefix of
  • 获取服务器系统,获取服务器操作系统

    获取服务器操作系统 内容精选 换一换 服务器安装上架 服务器基础参数配置 安装操作系统等操作请参见 Atlas 500 Pro 智能边缘服务器 用户指南 型号 3000 安装操作系统完成后 配置业务网口IP地址 请参见配置网卡IP地址 At
  • arduinows2812灯条程序_Arduino 控制WS2812 LED灯条

    传统的LED限制总是很多 比如需要很多的引脚 所以有一种很好的解决方案是用灯条 理论上这种灯条可以通过通讯 用一根数据总线可以控制达到无上限个数的RGB LED灯珠 并且在数量在1024以下时 延迟是不可察觉的 使用手册可查 主要功能 通过
  • Day 3 Mastering the Interface Definition Language (IDL)

    Teach Yourself CORBA In 14 Days Day 3Mastering the Interface Definition Language IDL Overview IDL Ground Rules Case Sens
  • momentJS时间加减处理

    计算最近在使用JavaScript计算时间差的时候 发现很多问题需要处理 在查看momentJS之后 发现非常容易 console log moment format YYYY MM DD HH mm ss 当前时间 console log
  • 基于nodejs的在线跑腿管理系统

    末尾获取源码 开发语言 nodejs 框架 Express 数据库 MySQL5 7 数据库工具 Navicat 11 开发软件 Hbuilder VS code 浏览器 edge 谷歌 目录 一 项目简介 二 系统功能 三 系统项目截图
  • go语言context保存上下文

    contxt保存上下文适合全局参数传递 而普通的参数传递就没必要用context 因为不好维护 关于context具体用法可以参考 https studygolang com articles 23247 fr sidebar packag
  • java函数的定义方法_java函数的定义以及使用方法介绍

    java函数的定义以及使用方法介绍 发布时间 2020 04 24 16 28 40 来源 亿速云 阅读 116 作者 小新 今天小编给大家分享的是java函数的定义以及使用方法介绍 相信很多人都不太了解 为了让大家更加了解java函数 所
  • AJAX&&JSON

    课程笔记Day46 AJAX JSON 综合案例 第一章 AJAX 第01节 基础理论 1 概念说明 1 什么是 AJAX AJAX是一项技术合集 他是由一套技术组合得到的新技术方案 异步请求技术 2 AJAX有什么作用呢 使用Ajax技术