[javaweb]重点总结大全

javaweb

web:网页
静态web:html,css 数据不会发生变化
动态web:servlet/jsp,asp,php每个人在不同的时间看到数据都不同

web应用程序编写完毕后,若想提供给外界访问,就需要一个服务器统一管理

静态web的缺点:

  • web页面无法动态更新,所有的用户看到的都是同一个页面。
  • 它无法和数据库交互,数据无法持久化。

1. web服务器

技术

asp:

  • 微软:国内最早流行的asp;
  • 在html中嵌入了vb的脚本,asp+com
  • 在asp开发中,基本一个页面都有几千行的业务代码,页面极其混乱。
  • 维护成本太高。

php:

  • 开发速度很快,功能强大,跨平台,代码很简单。
  • 无法承载大的访问量的情况

jsp/servlet:

  • sun公司主推的B/S架构
  • 基于java语言
  • 可以承载三高问题带来的影响

服务器

用来处理请求和给用户一些响应信息。

  • lls:微软的
  • tomcat:Apache的,给初学者很友好。

2.tomcat

文件夹作用

[javaweb]重点总结大全

bin目录下的startup启动tomcat

[javaweb]重点总结大全

3.http

超文本传输协议,是一个简单的请求响应协议,运行在tcp之上。

  • 文本:html,字符串……

  • 超文本:图片,音乐,视频,定位,地图……

https:安全的连接

两个时代

  • http1.0
  • 客户端与web服务器连接后,只获得一个web资源,断开连接
  • http2.0
  • 客户端与服务端连接后,可以获取多个web资源。

请求响应

  • 请求:客户端->发请求给服务器
  • 响应:服务器->客户端响应信息

4.Maven

在javaweb中需要使用大量的jar包,我们手动去导入。由此maven诞生了。

它是一个项目架构管理工具。

  • 1.下载安装,直接在官网下载即可
    [javaweb]重点总结大全
  • 3.配置镜像,可以提升下载jar包速度,在conf配置文件中的setting文件中配置

    alimaven
    aliyun maven
    http://maven.aliyun.com/nexus/content/groups/public/
    central

  • 4.在setting中配置本地仓库
E:\browserDownloads\apache-maven-3.8.5\maven-repo

创建maven项目在idea中

[javaweb]重点总结大全

5.servlet

sun公司提供两种实现类:

1.实现servlet接口

2.继承Httpservlet

  • sun公司用来开发动态web的一门技术
  • sun在这些API中提供了一个接口叫servlet,如果你想开发一个servlet程序,只需要完成两个小步骤。
  • 编写一个类,实现servlet类接口
  • 把开发好的java类部署到web服务器中

把实现了servlet接口的程序叫做servlet

创建一个helloservlet

导入maven依赖:


    junit
    junit
    4.11
    test

    javax.servlet
    javax.servlet-api
    3.1.0

    javax.servlet.jsp
    javax.servlet.jsp-api
    2.3.2-b01

敲一个servlet

package com.javaweb;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author panglili
 * @create 2022-07-19-8:18
 */
public class HelloServlet extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("******doget");
        PrintWriter writer = resp.getWriter();
        writer.print("hello,servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

注册在web上


  hello
  com.javaweb.HelloServlet

  hello
  /add

6.servletContext

web容器在启动的时候,会为每个web程序都创建一个servletcontext对象,代表当前web应用。全局唯一!

  • 可以实现各个servlet之间的通信,统一的管理所有servlet的数据( 一般不用此方法,增加浏览器负担)。
  • servletcontext:调用servlet实现数据共享

[javaweb]重点总结大全

测试一下:

(1)创建一个servlet使用context设置属性

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-8:18
 */
public class HelloServlet extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        ServletContext context = this.getServletContext();
        String username="ssss";
        context.setAttribute("username",username);
        System.out.println("******doget");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(2)创建另一个servlet使用context获取属性值

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-16:28
 */
public class getServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();

        String username =(String) context.getAttribute("username");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.getWriter().print(username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(3)然后配置servlet在web中就可以在网页访问了


    hello
    com.javaweb.servlet.HelloServlet

    hello
    /hello

    getc
    com.javaweb.servlet.getServlet

    getc
    /getc

(4)在网页请求getc可以拿到hello的属性值

[javaweb]重点总结大全
  • servletcontext获取web初始化参数

(1)web初始化数据


    url
    jdbc:mysql://localhost:3306/mybatis

(2)servlet中获取

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-17:02
 */
public class ServletDemo extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url = context.getInitParameter("url");
        resp.getWriter().print(url);

        System.out.println("******doget");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(3)网页数据

[javaweb]重点总结大全
  • *servletcontext:实现页面请求转发:

(1)写请求转发的servlet

此请求被转发到getIni

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-17:02
 */
public class ServletDemo2 extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        context.getRequestDispatcher("/getIni").forward(req,resp);

        System.out.println("******doget");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(2)web配置

请求demo2


    demo2
    com.javaweb.servlet.ServletDemo2

    demo2
    /demo2

(3)网页实现

返回的是getIni数据

[javaweb]重点总结大全

7.HttpServletResponse

web服务器接受到客户端的http请求之后,针对这个请求,分别创建一个代表请求的httpServletRequest和代表响应的HttpServletResponse

  • 文件下载
package com.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-18:17
 */
public class Response extends HelloServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取下载路径
            String path="C:\\Users\\塔塔\\Pictures\\Camera Roll\\1.jpg";
        //下载的文件名
        String fileName = path.substring(path.lastIndexOf("\\") + 1);
        //设置想办法让浏览器支持下载需要的
        resp.setHeader("Content-Disposition","attachment;fileName="+fileName);
        //获取下载文件的输入流
        FileInputStream stream = new FileInputStream(path);
        //创建缓冲区
        int len=0;
        byte[] buffer = new byte[1024];
        //获取OutputStream
        ServletOutputStream out = resp.getOutputStream();
        //将文件写到buffer缓冲区
        while((len=stream.read(buffer))>0){
            out.write(buffer,0,len);
        }
        //关闭流
        stream.close();
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • 验证码实现
package com.javaweb.servlet;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

/**
 * @author panglili
 * @create 2022-07-19-18:39
 */
public class ImageServlet extends HelloServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //每三秒刷新一次
        resp.setHeader("refresh","3");

        //在内存创建一个图片
        BufferedImage image=new BufferedImage(80,20,BufferedImage.TYPE_INT_BGR);

        //得到图片
        Graphics2D g=(Graphics2D)image.getGraphics();

        //设置背景颜色
        g.setColor(Color.red);
        g.fillRect(0,0,80,20);
        //给图片写数据
        g.setColor(Color.BLACK);
        g.setFont(new Font(null, Font.BOLD,20));
        g.drawString(makeNum(),0,20);

        //告诉浏览器这个请求用图片打开
        resp.setContentType("image/jpeg");
        //网站有缓存,不让存
        resp.setDateHeader("expires",-1);
        resp.setHeader("Cache-Control","no-Cache");
        resp.setHeader("Pragma","no-cache");

        ImageIO.write(image,"jpg",resp.getOutputStream());
    }

    private String makeNum(){
        Random random=new Random();
        String num=random.nextInt(9999999)+"";
        StringBuffer str = new StringBuffer();
        for (int i=0;i

    img
    com.javaweb.servlet.ImageServlet

    img
    /img

  • 请求重定向
package com.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-18:46
 */
public class Redirect extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.sendRedirect("/img");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

}

    redi
    com.javaweb.servlet.Redirect

    redi
    /redi

请求redi则会请求到img请求的页面

9.HttpServletrRequest

HttpServletRequest代表 客户端的请求,用户通过http协议访问服务器,http请求中的所有信息会被封装到HttpServletRequest中,通过它的方法就可以拿到所有的信息。

request获取前端传的数据

package com.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-19:10
 */
public class Request extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        String[] hobbies = req.getParameterValues("hobby");
        System.out.println("===========");
        System.out.println(username);
        System.out.println(pwd);
        for(String s:hobbies){
            System.out.println(s);
        }

        System.out.println("===========");

        resp.sendRedirect("/success.jsp");
    }

}

前端


    $Title$

  $END$

    名字:
    密码:

      性别:
      男
      女

      爱好:
      睡觉
      运动
      学习

      下拉框

        印度
        中国
        朝鲜
        美国
        瑞士

      下拉框
      文本neir

      文件域

10.cookie,session

会话:用户打开一个浏览器,点击了很多按钮,访问多个web资源,关闭浏览器,这个过程可以称为会话。

客户端 服务端

  • 1.服务端给客户端一个信件,客户端下次访问服务器的时候带上信件就可以了;cookie
  • 2.服务器登记你来过,下次来的时候我来匹配你;session

保存客户端信息的两种方式:

  • cookie
  • 客户端技术:请求和响应
  • session
  • 服务器端技术,保存客户端信息,把信息或者数据放在session中
package com.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

/**
 * @author panglili
 * @create 2022-07-19-19:39
 */
public class Cookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        PrintWriter writer = resp.getWriter();

        javax.servlet.http.Cookie[] cookies = req.getCookies();

        if(cookies!=null){
            writer.write("time:");
            for(int i=0;i

session实现:

  • 服务器给每个用户创建一个session对象。
  • 一个session独占一个浏览器,只要浏览器没关,session就可以存在
package com.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-20:32
 */
public class Session extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        //得到session
        HttpSession session = req.getSession();

        //给session存值,可以通过其他session获取
        session.setAttribute("name","heihe");

        //获取session的id
        String id = session.getId();

        //判断是不是第一次创建
        if(session.isNew()){
            resp.getWriter().write("session创建成功"+id);
        }else{
            resp.getWriter().write("session已经存在"+id);
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet(req, resp);
    }

}

    session
    com.javaweb.servlet.Session

    session
    /session

    15

11.jsp

java server page:java服务器前端页面,和servlet一样,用于动态web开发。

特点:

  • 写jsp页面就像在写html
  • html只给用户提供静态数据,jsp中可以加入java代码,为用户提供动态数据

jsp最终会被转换成一个java类。jsp继承了一个HttpJspBase,这个类经常间接又继承了servlet,因为jsp的本质还是一个servlet。

但是通过继承使得jsp大大简化了,servlet与前端交互的语句。

  • 在jsp中只要是java代码就会原封不动的输出;

· out.print(name);

  • 如果是html代码就会进行转换为

out.write("success\r\n");

说到底,就相当于在后台用java语言的servlet给前端传输数据一样只不过它使用了前端化的语言使得操作更加简单,在运行的时候它本身还是转化成了java。

jsp语法

作为一个java语言的应用它支持所有的java语法,并且有许多自己的语法。

也可以用el表达式取值:${}等价于

脚本片段:

sum="+sum+"");
%>

jsp指令

错误界面定制:

<%@ page errorpage="success.jsp" %><!--%@-->

包含其他页面:

<%@ include file %><!--%@-->

九大内置对象

  • session //存值在一个session中
  • request //存值在一次请求中
  • application //存值在当前项目
  • pageContext //存值当前页面
  • Response
  • config
  • jspContext
  • out //输出
  • page

jsp标签,jstl标签,EL表达式

使用之前要先导包


            javax.servlet.jsp.jstl
            jstl-api
            1.2

            taglibs
            standard
            1.1.2

el表达式:${ }

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

jsp标签


jstl标签

弥补html标签的不足,它有许多自定义的标签

导入标签头才能使用该标签

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!--%@-->

在使用标签时遇到此问题

[javaweb]重点总结大全

将jar包手动复制到tomcat服务器中

[javaweb]重点总结大全

[javaweb]重点总结大全

成功

[javaweb]重点总结大全

核心标签

使用c开头


    Title

    name

javaBean

  • 必须有一个无参构造
  • 属性私有
  • 有对应的get、set

一般和数据库的表映射:字段映射属性!

表people

id name age 1 tata 18 2 meigu 17

@Data
public class people{
    private int id;
    private String name;
    private int age;

}

三层架构

model view controller

视图,模型,控制器

早期历史

  • servlet可以直接编辑crud,访问数据库,程序十分臃肿,不利于维护。

[javaweb]重点总结大全

model:

  • 业务处理:业务逻辑(server)
  • 数据持久层:crud(dao)

view:

  • 展示数据
  • 提供连接发起servlet请求

controller:

  • 接受用户请求:(req:请求参数,session信息)
  • 交给业务层处理对应的代码
  • 控制视图的跳转

12.过滤器

有一些信息不应该被处理,要被过滤的。

1.导包


    javax.servlet.jsp.jstl
    jstl-api
    1.2

    taglibs
    standard
    1.1.2

    javax.servlet.jsp
    javax.servlet.jsp-api
    2.3.2-b01

2.继承过滤器的接口

package com.javaweb.controller;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-20-20:32
 */
public class FilterDemo1 implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       servletRequest.setCharacterEncoding("utf-8");
       servletResponse.setCharacterEncoding("utf-8");
       servletResponse.setContentType("text/html;charset=utf-8");
        System.out.println("****before:");
        //让请求继续执行,如果不写请求到这里就会停止
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("####after:");

    }

    public void destroy() {
        System.out.println("destory......");
    }
}

3.写一个没有处理编码的请求

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-20-8:26
 */
public class tets extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username="弄啥嘞~";
        context.setAttribute("username",username);
        resp.getWriter().write(username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doGet(req, resp);
    }

}

此时还没有配置过滤器,看看网页效果

[javaweb]重点总结大全

意料之中的乱码。

4.将过滤器注册到web配置


    encoding
    com.javaweb.controller.FilterDemo1

    encoding
    /filter

5.经过过滤器的处理

[javaweb]重点总结大全

13.监听器

1.配置监听器

package com.javaweb.controller;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.io.PushbackInputStream;

/**
 * @author panglili
 * @create 2022-07-20-21:03
 */
public class Listener implements HttpSessionListener {
    //session创建
    public void sessionCreated(HttpSessionEvent hE) {
        ServletContext context = hE.getSession().getServletContext();
        Integer o = (Integer)context.getAttribute("onlinecount");
            if(o==null){
                o=new Integer(1);
            }else{
                int count=o.intValue();
                o=new Integer(count+1);
            }
            context.setAttribute("o",o);
    }

    public void sessionDestroyed(HttpSessionEvent hE) {
        ServletContext context = hE.getSession().getServletContext();
        Integer o = (Integer)context.getAttribute("onlinecount");
        if(o==null){
            o=new Integer(1);
        }else{
            int count=o.intValue();
            o=new Integer(count+1);
        }
        context.setAttribute("o",o);
    }
    }

2.前台实现人数统计


    Title

people count:...

3.配置web


    com.javaweb.controller.Listener

Original: https://www.cnblogs.com/lumanmanqixiuyuanxi/p/16512737.html
Author: 路漫漫qixiuyuanxi
Title: [javaweb]重点总结大全

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619487/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • clash TUN模式

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    072
  • 23种设计模式之观察者模式

    文章目录 概述 观察者模式的优缺点 观察者模式应用场景 观察者模式的结构和实现 * 模式结构 模式实现 总结 ; 概述 观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一…

    数据库 2023年6月6日
    096
  • mysql拆分字符串做条件查询

    mysql拆分字符串作为查询条件 有个群友问一个问题 这表的ancestors列存放的是所有的祖先节点,以 ,分隔 例如我查询dept_id为103的所有祖先节点,现在我只有一个d…

    数据库 2023年6月16日
    060
  • MySQL 服务无法启动。服务没有报告任何错误。

    版本8.0.25,今天启动发现抱错,网上搜索一下发现这样可行 启动MySQL报错: 搜索了一下,按照这样步骤解决了 1.配置一下my.ini [mysqld] basedir =&…

    数据库 2023年6月16日
    069
  • spring-boot-starter-actuator

    使用: HTTP方法 路径 描述 鉴权 GET /autoconfig 查看自动配置的使用情况 true GET /configprops 查看配置属性,包括默认配置 true G…

    数据库 2023年6月16日
    070
  • 姜还是老的辣,看看老战哥的老底儿和老道

    上周日,2022年8月7日,参加了一场久违的半马。中伏天的傍晚,热度不减,全程挥汗如雨,虽不是PB,但也算尽力。晒一下战绩。 支付宝安全发这个通道要对接,今天上午10点,产品经理跟…

    数据库 2023年6月9日
    0128
  • MYSQL–>SQL优化

    Insert优化 优化原因:MYSQL数据库中insert每执行一次都会对数据库进行一次连接,会浪费很大资源。 优化方案: 批量插入 插入数据的时候尽量一次性批量插入多个数据而不是…

    数据库 2023年6月14日
    083
  • 在 Pisa-Proxy 中,如何利用 Rust 实现 MySQL 代理

    一、前言 背景 在 Database Mesh 中,Pisanix 是一套以数据库为中心的治理框架,为用户提供了诸多治理能力,例如:数据库流量治理,SQL 防火墙,负载均衡和审计等…

    数据库 2023年6月16日
    0124
  • select,poll,epoll

    select、poll、epoll 区别总结: 底层实现 select/poll 首先把关注的Socket集合从用户态拷贝到内核态,然后由内核检测事件,遍历整个集合(由于线性结构实…

    数据库 2023年6月16日
    086
  • centos7 打包chrome离线安装包流程

    前提,centos可以连接外网 1、在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo 文件中添加以下内容: 2、安装 yum-utils…

    数据库 2023年6月11日
    076
  • 细数线程池五大坑,一不小心线上就崩了

    系统性能优化的几种常用手段是异步和缓存。因此我们常常使用线程池异步处理一些业务。 线程池的使用还是相对比较简单的,首先创建一个线程池,然后通过execute或submit执行任务。…

    数据库 2023年6月6日
    0138
  • ajax与thymeleaf分别实现数据传输

    小杰笔记篇: 1:第一种:利用Model和thymeleaf引擎来完成: Controller层: html:引入引擎 第二种方式:ajax: 第一步:创建User实体类假装数据库…

    数据库 2023年6月6日
    078
  • mysql的半同步复制

    binlog dump线程何时向从库发送binlog mysql在server层进行了组提交之后,为了提高并行度,将提交阶段分为了 flush sync commit三个阶段,根据…

    数据库 2023年6月9日
    075
  • 分布式任务调度平台XXL-JOB安装

    安装xxl-job-admin 1.拉取镜像 #拉取镜像 docker pull xuxueli/xxl-job-admin:2.3.0 #新建挂载目录 mkdir /usr/lo…

    数据库 2023年6月11日
    066
  • 【Kubernetes系列】Kubernetes相关概念介绍

    Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容…

    数据库 2023年6月6日
    074
  • 启用Hyper-v后,重启后界面提示 无法完成功能配置,正在撤销更改

    安装docker后,提示需要启用hyper-v,在控制面板中勾选Hyper-v,然后重启,更新快完成就提示无法完成功能配置,正在撤销更改 解决方法 方法1 控制面板一个一个选 方法…

    数据库 2023年6月14日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球