ervlet、jsp、Cookie、Ajax学习

news2024/9/23 7:30:14

系列文章目录

第一章 基础知识、数据类型学习
第二章 万年历项目
第三章 代码逻辑训练习题
第四章 方法、数组学习
第五章 图书管理系统项目
第六章 面向对象编程:封装、继承、多态学习
第七章 封装继承多态习题
第八章 常用类、包装类、异常处理机制学习
第九章 集合学习
第十章 IO流、多线程学习
第十一章 仓库管理系统项目
第十二章 员工管理系统、多表查询、反射实现DBHelper学习
第十三章 DML、DDL、数据库对象学习
第十四章 网络编程、各种标签、CSS学习
第十五章 ECMAScript、BOM学习
第十六章 DOM、jQuery学习
第十七章 Servlet、jsp、Cookie、Ajax学习


文章目录

  • 系列文章目录
  • 前言
  • 一、Servlet
    • 1. Servlet运行过程
    • 2. Servlet与url对应
      • 2.1 单个
      • 2.2 多个
    • 3. servlet的生命周期
      • 3.1 创建
      • 3.2 初始化
      • 3.3 服务执行
      • 3.4 销毁
    • 4. Servlet的单例模式
    • 5. Servlet简写
    • 6. 请求和响应分解
    • 7. 介绍请求对象HttpServletRequest
      • 7.1 获得请求行信息
      • 7.2 获取请求头信息
      • 7.3 获取请求主体信息
    • 8. 介绍响应对象HttpServletResponse
      • 8.1 设置响应行
      • 8.2 设置响应头
      • 8.3 设置响应主体
    • 9. 过滤器与监听器
      • 9.1 过滤器Filter
      • 9.1 监听器
  • 二、jsp
      • 2.1 jsp的运行过程
      • 2.2 转发和重定向
      • 2.2.1 转发
      • 2.2.2 重定向
      • 2.2.3 为什么会转发用request,重定向用response
      • 2.2.4 转发与重定向区别:
      • 2.3 作用域对象
        • 2.3.1 pageContext
        • 2.3.2 request
        • 2.3.3 session
        • 2.3.4 application
      • 2.4 路径问题:
      • 2.5 jsp语法
      • 2.6 jsp九大内置对象(重点要记)
  • 三、Cookie
    • 1. CookieServlet类
    • 2. empLogin.jsp文件
    • 3. emok.jsp文件
  • 四、Ajax
    • 1. 同步请求和异步请求
    • 2. Ajax优势劣势
    • 3. Ajax常用方法
      • 3.1 open(method, URL, async)
      • 3.2 send(content)
      • 3.3 setRequestHeader(header, value)
    • 4. Ajax常用属性
    • 5. Web与Ajax差异
    • 6. Ajax工作流程
    • 7. Ajax使用步骤
  • 五、同步请求、异步请求具体区别
    • 1. ajaxUser.jsp文件
    • 2. AjaxServlet文件
  • 总结


前言

本文我们将讲述:
Servlet:是在服务器端编程的技术
jsp:.jsp文件类似.html文件,里面都是前端页面代码,以后会用.jsp文件
Cookie:在客户端做数据存储
Ajax:异步请求
同步请求、异步请求具体区别:Ajax与Web对比
人类甄别计划完成了100%,但我觉得太没意思了就没执行,毕竟符合条件的就我一个外星移民,照理你们都得被毁灭光线“biubiu”死,但太没意思了嘛。我决定把这个杀手锏握在手里,让每个国家上交国家金库里的30%,不然我就针对性的把他们国家的人都“biubiu”死!呼哈哈哈哈哈哈哈哈!呼哈哈哈哈哈哈哈哈哈哈哈!


一、Servlet

服务器-Tomcat容器-web服务器-web容器-tomcat-servlet容器指的都是Servlet
Servlet是在服务器端编程的技术 哦,déjà-vu"
一个Servlet对象,负责一个或一组url
Servlet/jsp是一种在服务器端动态生成html/css/js页面的技术,可以在idea里动态生成页面的组件

1. Servlet运行过程

(发送)客户端浏览器发送请求到服务器(用到http协议)
(匹配)服务器根据请求信息的路径url,去调用响应的Servlet类(请求)
(处理)通过Servlet中的打印流对象将生成的html数据输出给服务器(响应)
(返回)服务器将servlet生成的数据在输出给客户端浏览器(用到http协议)
(查看)客户端接收到响应信息后,先解压,再交给浏览器解释执行,用户进行查看

2. Servlet与url对应

2.1 单个

一个Servlet对象,负责一个url
写法:
/aaa

2.2 多个

一个Servlet对象,负责一组url
写法有二:
/aaa/*

*.bbb

3. servlet的生命周期

3.1 创建

当客户端第一次发送请求到Servlet里,服务器才会创建该Servlet对象

3.2 初始化

创建时初始化
执行一次

3.3 服务执行

对请求进行分发,分发到对应的方法里进行处理
重复执行

3.4 销毁

关闭服务器时,当前服务器下所有Servlet对象都销毁

4. Servlet的单例模式

Servlet其实是伪单例:构造器可以共有
实现方式:
使用是map集合的方式,实现servlet对象单例
是key
是value

一般是懒汉式,饿汉式用1实现

5. Servlet简写

Servlet3.0版本支持注解方式来配置Servlet
一个注解@WebServlet替换两组对应标签
在这里插入图片描述
在Servlet类上写@WebServlet(“要链接的前端页面”)

6. 请求和响应分解

http协议:
单向性、长连接、无状态
规定的内容:
——请求的内容:
————1、一个请求行(请求方式,请求路径,协议名字,协议版本)
————2、多个请求头
————3、请求主体(请求的参数列表)
——响应的内容:
————1、一个响应行(协议名,协议版本,状态码,状态码描述)
————2、多个响应头
————3、响应主体

7. 介绍请求对象HttpServletRequest

7.1 获得请求行信息

请求方式:request.getMethod()
资源路径:request.getRequestURL()
资源路径:request.getRequestURI()
协议:request.getScheme()
协议版本号:request.getProtocol()
get方式的请求信息:request.getQueryString()
当前项目部署的名称:request.getContextPath()

7.2 获取请求头信息

单独获得:request.getHeader(“User-Agent”)
获得所有:
Enumeration 枚举的意思,getHeaderNames()返回枚举类型的数组

Enumeration<String> names=request.getHeaderNames();
while(names.hasMoreElements()) {
    String name = names.nextElement();
    System.out.println(name + ":" + request.getHeader(name));
    System.out.println();
}

7.3 获取请求主体信息

获得请求主题里的参数列表
String empno= request.getParameter(“empno”);//获得请求参数
String ename = request.getParameter(“ename”);
获得一组参数:
request.getParameterValues(“cait”);

8. 介绍响应对象HttpServletResponse

8.1 设置响应行

response.setStatus(Integer.parseInt(empno), ename);//设置一个状态,同时设置状态信息

8.2 设置响应头

//处理乱码
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        //简写response.setContentType("text/html;charset = utf-8");
        response.setHeader("contentType", "text/html;charset = utf-8");
        //完整版

8.3 设置响应主体

response.getWriter().println(ename + "登陆失败");

9. 过滤器与监听器

9.1 过滤器Filter

可以对web服务器管理的所有web资源进行拦截,在web返回servletservlet返回web 都会进行拦截。

9.1 监听器

监听器用于监听web应用中的某些对象、信息的创建、销毁、增加、修改、删除等动作的发生,然后做出相应的相应处理。当范围对象的状态发生变化时,服务器自动调用监听器对象中的方法。可以做统计在线人数。

二、jsp

jsp就是Servlet:继承HttpJspBase继承Servlet
Servlet擅长做逻辑处理,不擅长做数据展示;
jsp擅长做数据展示,不擅长做逻辑处理
jsp本质上是Servlet,所以jsp也是java类

2.1 jsp的运行过程

客户端第一次发送请求,要访问jsp页面,
服务器接收到请求,获得请求路径,
将对应的jsp页面,翻译成java类
然后编译成字节码文件,
再使用虚拟机,解释成机器码,运行机器码
根据请求信息进行逻辑处理后,给出响应,以流方式输出给服务器,再输出到客户端

2.2 转发和重定向

(相当于return,后面的代码不会执行)
jsp-jsp
jsp-Servlet
Servlet-jsp
Servlet-Servlet

2.2.1 转发

转发代码:

request.setAttribute("emps", emps);
request.getRequestDispatcher("show.jsp").forward(request, response);

转发时,将本方法的request参数和response参数传给转发后的页面,所以能做到共享相同的请求对象和上下文数据。
转发是服务器内部的操作,客户端不会察觉到转发的过程,URL地址不会发生改变

2.2.2 重定向

重定向代码:

request.setAttribute("emps", emps);//把键值对存在request对象中
response.sendRedirect("show.jsp");
//如果想

因为重定向没法传入request、response,所以重定向没法获取数据,如果想获取数据,可以将第二行改为如下,将数据传入,但如果需要传大量数据,本方法会显得非常臃肿。

response.sendRedirect("show.jsp?emps=", emps);

重定向的本质:服务器发送一个特殊的响应给客户端,告诉客户端它请求的资源在另一个URL上,客户端根据新的URL发起一个新的请求,服务器会处理该请求并返回相应。

2.2.3 为什么会转发用request,重定向用response

转发代表服务器内一个页面转到另一个页面,是把客户端传给服务器的request传给另一个页面,客户端没做任何操作。
重定向代表服务器返回给客户端一个response,客户端再自动重新发起另一个请求request,访问另一个页面。

2.2.4 转发与重定向区别:

1、跳转效率的不同
转发:效率高
重定向:效率低
2、是否共用一个request
转发:原来页面与新页面共有同一个request
重定向:原来页面与新页面不共有一个request(可以用session扩大重定向的作用域来共享数据)
3、浏览器URL地址不同
转发:URL地址保持不变
重定向:URL地址为重定向后地址
4、“/”路径的含义不同
转发:代表当前项目的根目录
重定向:代表当前服务器的根目录
5、跳转范围不同
转发:只能转发到同一应用的URL
重定向:可以重定向任何服务器、任何应用的URL
6、刷新是否导致重复提交
转发:会导致重复提交
重定向:不会导致重复提交
7、是否经过过滤器
转发:不经过过滤器
重定向:经过过滤器
8、实现语句不通
转发:request.getRequestDispatcher().forward(request, response);
重定向:response.sendRedirect();

2.3 作用域对象

2.3.1 pageContext

当前页面内

2.3.2 request

一次请求只要给出相应,请求就算结束
(转发算一次请求内,重定义不算一次请求内)
既是请求参数
又是作用域对象

2.3.3 session

一次会话(建立连接到断开连接)
会话对象:
生命周期:
创建:建立连接
销毁:断开连接分为
客户端销毁:用户关闭浏览器:session丢失(30分钟活动时间后销毁)
服务器关闭:session销毁(所有对象销毁)

2.3.4 application

一个应用内(只要服务器不管就不算结束)一般不用

2.4 路径问题:

1、一个url/一组url对应一个servlet
2、“/”路径的含义不同
3、在开发过程中,不要写相对路径,要写绝对路径
jsp绝对路径
动态获得base标签

<%
    String base = request.getContextPath() + "/";
    System.out.println(base);
    String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + base;
    System.out.println(url);
%>
<base href="<%=url%>">

2.5 jsp语法

声明全局变量<%! %>
表达式<%= %>
java脚本段<% %>
指令@

2.6 jsp九大内置对象(重点要记)

1、request请求对象,作用域对象
2、response响应对象
3、pageContext页面上下文对象,作用域对象
4、session会话对象,作用域对象
5、application应用程序对象,作用域对象
6、out输出对象
7、config配置对象
8、page页面对象
9、exception对象:隐藏对象,在当前jsp页面中添加<%@ page isErrorPage=“true”%>,重新刷新页面,在tomcat的work包里的servlet文件中,会自动出现exception对象

三、Cookie

Cookie在客户端做数据存储,和session在服务端做数据存储类似

Cookie类继承Object类
可以同时建立多个Cookie

1. CookieServlet类

@WebServlet("/cs")
public class CookieServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        try {
            request.setCharacterEncoding("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset = utf-8");

        String no = request.getParameter("empno");
        String name = request.getParameter("ename");
        if ("123".equals(no) && "admin".equals(name)){
            Cookie cookie = new Cookie("login", name);
            cookie.setMaxAge(60 * 60 * 24 * 7);//设置保存时间
            response.addCookie(cookie);
            response.sendRedirect(request.getContextPath() + "/empok.jsp");
        }else {
            response.getWriter().println("登录失败");
        }
    }
}

2. empLogin.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%
        String base = request.getContextPath() + "/";
        System.out.println(base);
        String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + base;
        System.out.println(url);
    %>
    <base href="<%=url%>">
<%--    <%
        String base = request.getContextPath() + "/";
        String url = request.getScheme():
    %>--%>
</head>
<body>
    <%
        Cookie[] cookies = request.getCookies();
        if (cookies != null){
            for (Cookie cookie :cookies) {
                if (cookie.getName().equals("login")){
                    response.sendRedirect(request.getContextPath() + "/empok.jsp");
                }
            }
        }
    %>
    <form action="cs" method="get">
        员工编号<input type="text" name="empno"><br/>
        员工姓名<input type="text" name="ename"><br/>
        <input type="submit" name="提交">
    </form>
<a href="emp/reg">点击跳转注册</a>
</body>
</html>

3. emok.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>登录成功!!</h1>
</body>
</html>

四、Ajax

Ajax = Asychronous + Javascript + And + Xml(JSON)
JSON(javascript的原生对象)JavaScript Object Notation

1. 同步请求和异步请求

同步请求(Web):页面跟着请求一起走,到服务器端需要对当前页面的所有数据集合,重新查询,在返回。
异步请求(Ajax):页面不跟请求走,只有局部区域的内容发生变化。

2. Ajax优势劣势

Ajax优势:异步请求、局部刷新
不刷新整个页面,只刷新局部;
页面不需要刷新,提供连续的用户体验;
“按需请求”,减少带宽的占用,响应速度快;
把一部分服务器的压力,转交给前端。

Ajax劣势:
如果一个页面大量使用ajax的话,那么该页面的搜索性能查
破坏了history历史记录的机制

3. Ajax常用方法

3.1 open(method, URL, async)

建立与服务器的连接
method指定请求的HTTP方法,一般为get或post
URL指定请求的地址
async指定是否使用异步请求,值为true或false,一般不写或写true

3.2 send(content)

发送请求
content指定请求的参数

3.3 setRequestHeader(header, value)

设置请求的头信息

4. Ajax常用属性

XMLHttpRequest的状态信息:readystate

就绪状态码说明
0XMLHttpRequest对象未完成初始化
1XMLHttpRequest对象开始发送请求
2XMLHttpRequest对象的请求发送完成
3XMLHttpRequest对象开始读取响应
4XMLHttpRequest对象读取响应结束

监听事件变化:Onreadystatechange

5. Web与Ajax差异

发送请求方式不同
Web:提交表单方式发送请求
Ajax:异步引擎对象发送请求
服务器响应不同
Web:相应内容是一个完整页面
Ajax:相应内容知识需要的数据
客户端处理方式不同
Web:需等待服务器响应完成并重新加载整个页面后用户才能进行操作
Ajax:可以动态更新页面中的部分内容,用户不需要等待请求的响应

6. Ajax工作流程

在这里插入图片描述

7. Ajax使用步骤

1、创建异步引擎对象XMLHttpRequest
2、设置一个请求:请求方式、请求路径、参数
3、发送请求
4、接收响应

五、同步请求、异步请求具体区别

1. ajaxUser.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-1.8.3 .js"></script>
    <script type="text/javascript">
        function demo1() {
            //1、创建异步请求对象
            var obj = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            var str = document.myform.ename.value;
            obj.open("get", "ajaxs?ename=" + str);
            //3、发送请求
            obj.send(null);//null请求的主体
            //4、接收响应
            obj.onreadystatechange = function () {
                if (obj.readyState == 4 && obj.status == 200) {
                    document.getElementById("sid").innerText = obj.responseText;
                }
            }
        }

        function demo2() {
            //1、创建异步请求对象
            var req = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            req.open("post", "ajaxs");
            //3、发送请求
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
            req.send("ename=" + document.myform2.ename2.value);
            //4、接收响应
            req.onreadystatechange = function () {
                if (req.status == 200 && req.readyState == 4) {
                    document.getElementById("sid2").innerText = req.responseText;
                }
            }
        }

        function demo3() {
            //1、创建异步请求对象
            var obj = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            var str = document.myform3.ename3.value;
            obj.open("get", "ajaxs?ename=" + str);
            //3、发送请求
            obj.send(null);//null请求的主体
            //4、接收响应
            obj.onreadystatechange = function () {
                if (obj.readyState == 4 && obj.status == 200) {
                    eval("var emp=" + obj.responseText);
                    document.getElementById("sid3").innerText = emp.empno + ";" + emp.ename + ";" + emp.job;
                }
            }
        }

        function demo4() {
            //1、创建异步请求对象
            var obj = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            var str = document.myform4.ename4.value;
            obj.open("get", "ajaxs?ename=" + str);
            //3、发送请求
            obj.send(null);//null请求的主体
            //4、接收响应
            obj.onreadystatechange = function () {
                if (obj.readyState == 4 && obj.status == 200) {
                    eval("var emps=" + obj.responseText);
                    $("select").empty();
                    for (var i = 0; i < emps.length; i++) {
                        $("<option value='" +
                            emps[i].empno + "'>" +
                            emps[i].ename + "_" +
                            emps[i].job + "</option>").appendTo("[id='sel']");
                    }
                }
            }
        }

        //5、为txt5添加异步请求
        $(document).ready(function () {
            //为txt5文本框添加异步请求
            $("[name='txt5']").blur(function () {
                $.ajax({
                    type: "get",
                    url: "ajaxs?ename=" + $(this).val(),
                    success: function (str) {
                        JSON.stringify(str);
                        $("[name='txt5']").next().text(str.empno + ";" + str.ename + ";" + str.job);
                    }
                });
            });
            
            //6、为txt6添加异步请求
            $("[name='txt6']").blur(function () {
                var ename = $("[name='txt6']").val();
                alert(ename);
                $.get("ajaxs", "ename=" + ename, function (emps) {
                    JSON.stringify(emps);
                    alert(emps);
                    $("#sel6").empty();
                    for (var i = 0; i < emps.length; i++) {
                        $("<option value='" +
                            emps[i].empno + "'>" +
                            emps[i].ename +
                            "</option>").appendTo("#sel6");
                    }
                });
            });
        });
    </script>
</head>
<body>
    <table border="1px">
        <tr>
            <td style="height: 200px;width: 300px">
                <form name="myform">
                    <input type="text" name="ename" onblur="demo1()"/><span id="sid"></span>
                </form>
            </td>
            <td style="height: 200px;width: 300px">
                <form name="myform2">
                    <input type="text" name="ename2" onblur="demo2()"/><span id="sid2"></span>
                </form>
            </td>
            <td style="height: 200px;width: 300px">
    
                <form name="myform3">
                    <input type="text" name="ename3" onblur="demo3()"/><span id="sid3"></span>
                </form>
            </td>
            <td style="height: 200px;width: 300px">
                <form name="myform4">
                    <input type="text" name="ename4" onblur="demo4()"/>
                    <select id="sel"></select>
                </form>
            </td>
        </tr>
        <tr>
            <td style="height: 200px;width: 300px">
                <input type="text" name="txt5"><span></span>
            </td>
            <td style="height: 200px;width: 300px">
                <input type="text" name="txt6">
                <select id="sel6"></select>
            </td>
            <td style="height: 200px;width: 300px"></td>
            <td style="height: 200px;width: 300px"></td>
        </tr>
    </table>
</body>
</html>

2. AjaxServlet文件

package com.controller;

import com.google.gson.Gson;
import entry.Emp;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

@WebServlet("/ajaxs")
public class AjaxServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        try {
            request.setCharacterEncoding("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json; charset = utf-8");
        String ename = request.getParameter("ename");
        if ("admin".equals(ename)){
            response.getWriter().println("[]");

        }else{
            ArrayList<Emp> list = new ArrayList<>();
            list.add(new Emp(1234, "alen", "job"));
            list.add(new Emp(1214, "ellen", "jobes"));
            Gson gson = new Gson();
            response.getWriter().println(gson.toJson(list));
        }
    }
}

总结

本文我们讲述了:
Servlet和jsp是一对一、一对多的关系,一对多时,可以用反射简单实现
Cookie用来在客户端做数据存储,做了如何实现7天用户免登录
Ajax与Web对比:Ajax是局部刷新,而Web是全屏刷新

好没意思哦…地球人能不能搞出点新鲜玩应儿啊…

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

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

相关文章

Nginx 正则表达式与rewrite

目录 一、正则表达式 二、rewrite 2.1 rewrite简述 2.2 rewrite 跳转 2.3 rewrite 执行顺序 2.4 rewrite 语法格式 三、location 3.1 location 类别 3.2 location常用匹配规则 3.3 location优先级 3.4 示例说明 3.5 匹配规则总结 3.6 三个匹配规则定义 四、实战…

【业务场景实战】如何优雅地进行缓存预热?

从Java基础到中间件再到微服务&#xff0c;我们学了这么多&#xff0c;但遇到真实项目的时候&#xff0c;还是不会根据所学知识&#xff0c;对项目进行改造&#xff1b;或者太久不用早已忘记。学会用才是走得更远&#xff01; 缓存穿透、雪崩&#xff0c;大家都不陌生&#xf…

【Linux操作系统】——Centos7下安装python3.8

1.Centos7下安装python3.8 1.1 安装依赖包 yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel ncurses-devel sqlite-devel readline-devel readline-devel make在CentOS 7上安装Python时&#xff0c;‌需要安装一些必要的依赖包以确保Python的正常编译和运…

HarmonyOS NEXT - 项目基础框架的搭建

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新&#xff0c;请前往github查看最新代码 HarmonyOS NEXT - 项目基础框架的搭建 序前置工作项目的目录结构主界面实现BaseTabBar代码实现子页面实现路由跳转登录页面和主页面切换登录实现退出登录 序 项目基于…

Spark-环境启动

一、概览 从start-all.sh开始捋&#xff0c;一直捋到Master、Worker的启动并建立通信 二、宏观描述 Master端 1、start-all.sh调用start-master.sh启动Master 2、执行org.apache.spark.deploy.master.Master中main方法 3、通过工厂模式创建RpcEnv子类NettyRpcEnv a、创建…

viper配置文件读取管理库 一个支持12种文件类型,5种远程协议的配置文件管理和加载工具库 使用方法示例

viper是一个不错的配置文件管理库&#xff0c; 他支持的配置文件类型依次有 "json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl", "tfvars", "dotenv&quo…

java:实现简单的验证码功能

效果 实现思路 验证码图片的url由后端的一个Controller生成&#xff0c;前端请求这个Controller接口的时候根据当前时间生成一个uuid&#xff0c;并把这个uuid在前端使用localStorage缓存起来&#xff0c;下一次还是从缓存中获取。 Controller生成验证码之后&#xff0c;把前…

Qt 学习第六天:页面布局

如何设计页面&#xff1f; 有个类似沙盒模式的玩法&#xff0c;Qt Widget Designer可以更好的帮助我们设计页面 点击.ui文件进入 右上方可以看到四种常见的布局&#xff1a; 四种布局 &#xff08;一&#xff09;水平布局horizontalLayout&#xff1a;QHBoxLayout H 是 hori…

c++实现B树(上)

哈喽啊&#xff01;好久不见&#xff0c;甚是想念&#xff01;失踪人口要回归了&#xff0c;时隔一个多月小吉我终于要更新blog了&#x1f389;。在停更的一个多月中&#xff0c;小吉也有在好好学习提升自己&#xff0c;立志给大家呈现好文章。  现在让我们进入正题吧&#xf…

初识C++:开启C++之旅

目录 1.C的第一个程序 2.namesapce命名空间域 2.1namespace的意义 2.2.2namespace的定义 2.3命名空间的使用 3.C输入/输出 4.缺省参数 5.函数重载 6.引用 6.1引用的特性 6.2引用的使用 1.C的第一个程序 c版本&#xff1a; #include<iostream>using std::cout…

kali安装wechart

前言&#xff1a; 突发奇想想在kali安装个wechart&#xff0c;试了下网上的很多&#xff0c;玩坏了一个虚拟机算是找到了一个不错的方法&#xff0c;这里记录下&#xff0c;防迷路 基础配置&#xff1a; 首先修改源&#xff1a; vim /etc/apt/sources.list 注释默认配置&…

EasyCVR视频汇聚平台:打造全栈视频监控系统的基石,解锁可视化管理与高效运维

随着科技的飞速发展&#xff0c;视频监控已成为现代社会不可或缺的一部分&#xff0c;广泛应用于社区、公共场所、工业领域等多个场景。EasyCVR视频汇聚平台&#xff0c;作为一款高性能的视频汇聚管理平台&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;在构建全…

centos8 安装zookeeper

1&#xff1a;下载 zookeeper官网 解压&#xff1a;tar -zxvf apache-zookeeper-3.6.3.tar.gz 修改自己想要的文件目录 mv apache-zookeeper-3.6.3 zookeeper_3.6.3 备份一下 配置文件 cp zoo_sample.cfg zoo.cfg vim zoo.cfg 编辑日志文件和端口号

nginx实战演练

目录 一.Nginx架构和安装&#xff08;未完待续&#xff09; <1>.Nginx概述 <2>.Nginx架构和进程 <3>.Nginx模块 <4>.Nginx安装(编译安装) 二.Nginx基础配置 <1>.关闭debug <2>.将nginx软件添加到环境变量 <3>.开机自启动脚…

EmguCV学习笔记 VB.Net 2.5 Mat类、Matrix类和Image类的相互转换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…

基于Vue的MES生产制造执行系统

TOC springboot307基于Vue的MES生产制造执行系统 第1章 绪论 1.1 选题动因 到现在为止&#xff0c;互联网已经进入了千家万户&#xff0c;最普通的平民百姓也有属于自己的智能设备&#xff0c;计算机各种技术的储备也是相当的丰富&#xff0c;并且实现也是没有难度&#xf…

VSCode配置ssh免密连接远程服务器

我配置了免密设置(Windows利用ssh免密码登录Linux)&#xff0c;git bash已经能够正常连接了&#xff0c;但是vscode还是不行&#xff0c;很奇怪。 VSCode报错信息&#xff1a; [17:55:50.360] SSH Resolver called for "ssh-remote106.52.2.19", attempt 5, (Recon…

《机器学习》——运用OpenCV库中的KNN算法进行图像识别

文章目录 KNN算法的简单介绍下载OpenCV库实验内容实验结果完整代码自己手写数字传入模型中测试 KNN算法的简单介绍 一、KNN算法的基本要素 K值的选择&#xff1a;K值代表选择与新测试样本距离最近的前K个训练样本数&#xff0c;通常K是不大于20的整数。K值的选择对算法结果有重…

电压检测之比较电路

设计这款电路主要是本人在锂电池充电电路中挖了一个坑&#xff0c;对电源显示芯片的数据手册内容撰写不够详细的不好感受&#xff0c;所以自己根据比较电路的思想设计出了电压检测并反馈的电路&#xff0c;亦在提供一种电压检测的思想不需要借助ADC采集&#xff0c;在电路硬件上…

基于hive的海鲜交易数据分析系统设计与实现【hadoop、Flask、某东爬虫、sqoop、flume、mysql、hdfs】商品可换

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍研究背景国内外研究现状研究目的研究意义 关键技术理论介绍数据采集及预处理数据采集字段介绍数据预处理hadoop集群搭建及实现过程hive建表hive大数据分析 可视化展示店铺维度画像分…