基于分页实现数据的增删查改

news2024/11/29 8:37:58

一:主要思路

1:分页功能:

新建一个实体类,用来存储每页数据,数据量,页码,页数,下一页,上一页的相关信息。

@Data
public class PageModel<T> {
    //本页数据
    private List<T> pageData;
    //最大数量
    private  Integer pageSize=2;
    //第几页
    private  Integer pageNo;
    //总记录数
    private  Integer count;
   //获取总页数
    public  Integer getAllPage(){
        return  count%pageSize==0?count/pageSize:count/pageSize+1;
    }
    //判断是否有下一页
    public Integer getNextPage(){
        if(pageNo<getAllPage()){
            return  pageNo+1;
        }else{
            return  getAllPage();
        }
    }
    //判断是否有上一页
    public Integer getPreviousePage(){
        if(pageNo>1){
            return  pageNo-1;
        }else{
            return  1;
        }

    }

分页展示代码:

<html>
<head>
    <title>分页展示</title>
    <link type="text/css" rel="stylesheet" href="bootstrap/css/bootstrap.css">
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.12.4.js" ></script>
<%--    <link href="bootstrap/static/bootstrap-3.3.7-dist/css/bootstrap.css" rel="stylesheet" />--%>
<%--    <script type="text/javascript" src="js/jquery-1.12.4.js" ></script>--%>
    <script type="text/javascript" src="bootstrap/static/bootstrap-3.3.7-dist/js/npm.js" ></script>
    <script>
       function add(){
           window.location.href="preadd.do?method=preadd";
       }
       function subForm(pageno){
           // alert(pageno)
           $("[name='pageNo']").val(pageno)//给name='pageNo'的元素赋值
           $("[title='queryForm']").submit();//提交表单
           // document.getElementById("form").submit();
       }
    </script>
    <style>
          #container{
              padding: 10px;
          }
          #content{
              text-align: center;
          }
          #page{

          }
          #query{
              float: left;
              text-align: center;
              margin: 10px;
              padding: 10px;
          }
          form{
              display: flex;
          }
    </style>
</head>
<body>
<div id="query">
    <div>
        <form method="post" action="student.do?method=select" title="queryForm" name="myform">
            <input type="hidden" name="pageNo" id="pageNo"/>
            学生姓名:<input  type="text" name="stuname" value="${param.stuname}"/>
            学生住址:<input  type="text" name="stuadd" value="${param.stuadd}"/>
            性别:<input  type="text" name="stusex" value="${param.stusex}"/>
            年级:<select name="gradename">
            <option value="">请选择</option>
            <c:forEach items="${GAll}" var="grade">
                <option value="${grade.gradename}"  ${param.gradename==grade.gradename?"selected='true'":""}>${grade.gradeid}--${grade.gradename}</option>
            </c:forEach>
        </select>
            <input type="submit" value="查询">
        </form>
    </div>
</div>

<div id="container">
      <div style="text-align: right;margin: 10px">
          <button type="button" class="btn btn-primary" id="add" onclick="add();" >添加</button>
      </div>


      <div id="content">
          <table class="table">
              <tr>
                  <td>学生编号</td>
                  <td>登录密码</td>
                  <td>学生姓名</td>
                  <td>性别</td>
                  <td>年级</td>
                  <td>电话</td>
                  <td>地址</td>
                  <td>生日</td>
                  <td>邮箱</td>
                  <td>操作</td>
              </tr>
              <c:forEach items="${list}" var="student">
                  <tr>
                      <td>${student.studentno}</td>
                      <td>${student.loginpwd}</td>
                      <td>${student.studentname}</td>
                      <td>${student.sex}</td>
                      <td>${student.gradeid}</td>
                      <td>${student.phone}</td>
                      <td>${student.address}</td>
                      <td>${student.borndate}</td>
                      <td>${student.email}</td>
                      <td>
                          <a href="student.do?method=preupdate&studentNo=${student.studentno}"/>修改
                          <a href="student.do?method=delete&studentNo=${student.studentno}"/>删除
                      </td>
                  </tr>
              </c:forEach>
          </table>
      </div>
      <div id="page">
          <div style="float: left">
              <nav aria-label="...">
                  <ul class="pager">
                      <li><a href="javascript:void(0)" onclick="subForm(1)">首页</a></li>
                      <li><a href="javascript:void(0)" onclick="subForm(${pageModel.previousePage})">上一页</a></li>
                      <li><a href="javascript:void(0)" onclick="subForm(${pageModel.nextPage})">下一页</a></li>
                      <li><a href="javascript:void(0)" onclick="subForm(${pageModel.allPage})">尾页</a></li>
                  </ul>
              </nav>
          </div>
          <div style="float: right;font-size: 12px;margin-top: 25px">
              共${pageModel.count}条记录    当前第${pageModel.pageNo}页  一共${pageModel.allPage}页   每页展示${pageModel.pageSize}条数据
          </div>
      </div>

</div>
</body>
</html>

在dao层学生类中新建两个方法,一个用来获取总记录数,一个用来获取本页数据(使用limit实现),再通过service层调用方法。

  @Override
    public int getCount() {
        int count = Integer.parseInt( new JDBCUtils().queryOneVal("select count(1) from student").toString());
        return count;
    }

    @Override
    public List<Student> getPageData(int pageNo, int pageSize) {
        return new JDBCUtils().executeQuery(Student.class,"select * from student limit ?,?",(pageNo-1)*pageSize,pageSize);
    }

servlet层有个list方法,页码初始值为1,随着获取页面传的页码改变,然后调用service层获取该页数据信息,传递到页面进行展示。

    public void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int pageNo = 1;//页码初始值为1
        if(null != req.getParameter("pageNO")){
            pageNo = Integer.parseInt(req.getParameter("pageNO"));//获取页面传来的页码改变
        }
        PageModel<Student> pageModel = new StudentService().getpageModel(pageNo);
        List<Student> list = pageModel.getPageData();//获取页面数据
        List<Grade> getall = new GradeService().getall();//获取年级信息
        req.setAttribute("GAll",getall);
        req.setAttribute("list",list);
        req.setAttribute("pageModel",pageModel);
        req.getRequestDispatcher("pageList.jsp").forward(req,resp);
    }

2:数据添加

点击添加按钮,转入后端servlet代码的preadd方法中,查询出年级信息并传到前端页面通过下拉列表展示,然后填写信息,点击提交,

    public void preadd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        GradeService gradeService = new GradeService();
        List<Grade> all = gradeService.getall();
//        System.out.println(all);
        req.setAttribute("list",all);
        req.getRequestDispatcher("addStu.jsp").forward(req,resp);
    }

添加页面代码 

<html>
<head>
  <title>Title</title>
  <script type="javascript" src="js/jquery-1.12.4.js"></script>
  <link type="text/css" rel="stylesheet" href="bootstrap/css/bootstrap.css">
  <script>
    function  checkTypeid(){
      var v =  document.getElementsByName("booktype")[0].value;
      if(v=="-1"){
        alert("图书类标必须选择");
        return false;
      }
      return true;
    }
  </script>
</head>
<body>
<h1>学生添加</h1>
<form method="post" action="student.do?method=add" onsubmit="return checkForm();">
  <div class="form-group">
    <label for="stuno">学生学号</label>
    <input type="text" class="form-control" id="stuno" placeholder="stuno" name="stuno">
  </div>
  <div class="form-group">
    <label for="stuname">学生姓名</label>
    <input type="text" class="form-control" id="stuname" placeholder="stuname" name="stuname">
  </div>
  <div class="form-group">
    <label for="stupassword">登陆密码</label>
    <input type="text" class="form-control" id="stupassword" placeholder="stupassword" name="stupassword" onblur="checkBookNum()">
    <span class="error"></span>
  </div>
  <div class="form-group">
    <label for="stusex">学生性别</label>
    <input type="text" class="form-control" id="stusex" placeholder="stusex" name="stusex">
  </div>
  <div class="form-group">
    <label for="stuphone">学生电话</label>
    <input type="text" class="form-control" id="stuphone" placeholder="stuphone" name="stuphone">

  </div>
  <div class="form-group">
    <label for="stuaddress">学生住址</label>
    <input type="text" class="form-control" id="stuaddress" name="stuaddress">
  </div>
  <div class="form-group">
    <label for="stuborn">学生生日</label>
    <input type="date" class="form-control" id="stuborn" name="stuborn">
  </div>
  <div class="form-group">
    <label for="stuemail">学生邮件</label>
    <input type="text" class="form-control" id="stuemail" name="stuemail">
  </div>
  <div class="form-group">
    <label for="stuname">学生年级</label>
    <select class="form-control" name="stugradeid" onchange="checkBookNum()">
      <option value="-1">请选择</option>
      <c:forEach items="${list}" var="grade">
        <option value="${grade.gradeid}">${grade.gradeid}--${grade.gradename}</option>
      </c:forEach>
    </select>
  </div>
  <button type="submit" class="btn btn-default">保存</button>
</form>
</body>
</html>

 

页面提交表单,调用servlet层的add方法,该方法获取到所有参数信息,生成一个学生对象,然后调用dao层的添加方法添加学生信息,并调用list方法转到分页展示页面。

public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取参数
//        System.out.println(request.getParameter("StudentNo"));
        StudentDao studentDao = new StudentDao();
        String studentNo = request.getParameter("stuno");
        String loginPwd = request.getParameter("stupassword");
        String studentName = request.getParameter("stuname");
        String sex = request.getParameter("stusex");
        String gradeId = request.getParameter("stugradeid");
        String phone = request.getParameter("stuphone");
        String address = request.getParameter("stuaddress");
        String bornDate = request.getParameter("stuborn");
        String email = request.getParameter("stuemail");
        Student student = new Student(studentNo,loginPwd,studentName,sex,Integer.parseInt(gradeId),phone,address,bornDate,email);
        //插入数据
        studentDao.save(student);
//        System.out.println(update);
        //响应页面
        response.sendRedirect("student.do?method=list");
    }

3:数据删除

点击页面学生信息后面的删除,调用servlet层的delete方法并将学生学号传递过来,delete方法调用service层的delete方法通过学号删除该学生信息,并重新调用list方法转到数据分页展示页面。

    public void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String studentNo = req.getParameter("studentNo");
        StudentService service  = new StudentService();
        service.delete(studentNo);
        resp.sendRedirect("student.do?method=list");
    }

4:数据修改

点击页面学生信息后的修改,将学生学号传递过来调用servlet层的preupdate方法,preupdate方法通过学号查询出该学生相关信息,并通过GradeService查询出所有的年级信息,传输该数据到数据修改页面,默认值为修改前的值。然后用户修改完后调用service层的update方法通过学号修改该学生信息,并重新调用list方法转到数据分页展示页面。

public void preupdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取参数
        String studentNo = request.getParameter("studentNo");
//        System.out.println(studentNo);
        StudentService studentService = new StudentService();
        Student student = studentService.selectOne(studentNo);
        GradeService gradeService = new GradeService();
        List<Grade> getall = gradeService.getall();
//        System.out.println(getall);
//        request.setAttribute("gradename",gradename);
        request.setAttribute("GAll",getall);
        request.setAttribute("student",student);
//        System.out.println(student);
        //响应页面
        request.getRequestDispatcher("update.jsp").forward(request,response);
    }
 public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取参数
        Student student = new Student();
        student.setStudentno(request.getParameter("stuno"));
        student.setStudentname(request.getParameter("stuname"));
        student.setLoginpwd(request.getParameter("stupassword"));
        student.setSex(request.getParameter("stusex"));
        student.setPhone(request.getParameter("stuphone"));
        student.setAddress(request.getParameter("stuaddress"));
        student.setBorndate(request.getParameter("stuborn"));
        student.setEmail(request.getParameter("stuemail"));
        student.setGradename(request.getParameter("gradename"));
        String name = request.getParameter("gradename");
        Grade grade = new GradeService().findOneByName(name);
        student.setGradeid(grade.getGradeid());
        System.out.println(student);
        StudentService studentService = new StudentService();
         studentService.update(student);
        //响应页面
        response.sendRedirect("student.do?method=list");
    }

 修改页面代码:

<html>
<head>
    <title>更新</title>
</head>
<body>
<h1>信息修改</h1>
<form method="post" action="student.do?method=update">
    <div class="form-group">
        <label for="stuno">学生学号</label>
        <input type="text" class="form-control" id="stuno" value="${student.studentno}" name="stuno">
    </div>
    <div class="form-group">
        <label for="stuname">学生姓名</label>
        <input type="text" class="form-control" id="stuname" value="${student.studentname}" name="stuname">
    </div>
    <div class="form-group">
        <label for="stupassword">登陆密码</label>
        <input type="text" class="form-control" id="stupassword" value="${student.loginpwd}"  name="stupassword" onblur="checkBookNum()">
        <span class="error"></span>
    </div>
    <div class="form-group">
        <label for="stusex">学生性别</label>
        <input type="text" class="form-control" id="stusex" value="${student.sex}"  name="stusex">
    </div>
    <div class="form-group">
        <label for="stuphone">学生电话</label>
        <input type="text" class="form-control" id="stuphone" value="${student.phone}"  name="stuphone">

    </div>
    <div class="form-group">
        <label for="stuaddress">学生住址</label>
        <input type="text" class="form-control" id="stuaddress" value="${student.address}" name="stuaddress">
    </div>
    <div class="form-group">
        <label for="stuborn">学生生日</label>
        <input type="date" class="form-control" id="stuborn" value="${student.borndate}" name="stuborn">
    </div>
    <div class="form-group">
        <label for="stuemail">学生邮件</label>
        <input type="text" class="form-control" id="stuemail" value="${student.email}" name="stuemail">
    </div>
    <div class="form-group">
        <label for="gradename">学生年级</label>
        <select class="form-control" id="gradename" name="gradename">
            <option value="">请选择</option>
            <c:forEach items="${GAll}" var="grade">
                <option value="${grade.gradename}" ${student.gradename==grade.gradename?"selected='true'":""}>${grade.gradeid}--${grade.gradename}</option>
            </c:forEach>
        </select>
    </div>
    <button type="submit" class="btn btn-default">保存</button>
</form>
</body>
</html>

数据查询(条件查询):

通过输入查询条件然后点击查询后服务端执行servlet层的select方法,该方法调用service层的getall、getpagedata方法来获取符合条件的记录数及相关数据,保存并发送到页面。后续点击切换页码也执行该方法查询符合条件的数据并传输展示。

    //条件查询
//获取符合条件的总记录数
    @Override
    public int getCount(stuCondition stuCondition) {
        StringBuilder stringBuilder = new StringBuilder("select count(1) from student s left join grade g on s.GradeId = g.GradeId where 1 = 1");
        List<Object> list = new ArrayList<>();
        appendCons(stringBuilder,list,stuCondition);
        Object o = new JDBCUtils().queryOneVal(stringBuilder.toString(), list.toArray());
        return Integer.parseInt(o.toString());

    }
//根据页码获取本页数据
    @Override
    public List<Student> getPageData(stuCondition stuCondition, int pageNo, int pageSize) {
        StringBuilder stringBuilder = new StringBuilder("select s.*,g.GradeName from student s left join grade g on s.GradeId = g.GradeId where 1 = 1");
        List<Object> list = new ArrayList<>();
        appendCons(stringBuilder,list,stuCondition);
        stringBuilder.append(" limit ?,?");
        list.add((pageNo-1)*pageSize);
        list.add(pageSize);
//        System.out.println(stringBuilder);
        return new JDBCUtils().executeQuery(Student.class,stringBuilder.toString(),list.toArray());
    }
//辅助方法(条件拼接)
    public void appendCons(StringBuilder stringBuilder,List<Object> params,stuCondition stuCondition){
        if(StringUtils.Stringjudge(stuCondition.stuname)){
            stringBuilder.append(" and StudentName like ?");
            params.add("%"+stuCondition.stuname+"%");
        }
        if(StringUtils.Stringjudge(stuCondition.stuadd)){
            stringBuilder.append(" and Address = ?");
            params.add(stuCondition.stuadd);
        }
        if(StringUtils.Stringjudge(stuCondition.stusex)){
            stringBuilder.append(" and Sex = ?");
            params.add(stuCondition.stusex);
        }
        if(StringUtils.Stringjudge(stuCondition.gradeName)){
            stringBuilder.append(" and GradeName = ?");
            params.add(stuCondition.gradeName);
        }
    }
    public void select(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//        System.out.println("select方法进入!");
        stuCondition condition = new stuCondition();
//        System.out.println(req.getParameter("stuname"));
        condition.setStuname(req.getParameter("stuname"));
        condition.setStuadd( req.getParameter("stuadd"));
        condition.setStusex(req.getParameter("stusex"));
        condition.setGradeName(req.getParameter("gradename"));
        System.out.println(req.getParameter("gradename"));
        System.out.println(condition);
        int pageNo=1;
        String pageNoStr = req.getParameter("pageNo");
        if(StringUtils.Stringjudge(pageNoStr)){
            pageNo = Integer.parseInt(pageNoStr);
        }
        System.out.println("当前页码"+pageNo);
        PageModel<Student> pageModel = new StudentService().getPageModel(condition,pageNo);
//        System.out.println(pageModel);
        List<Student> list = pageModel.getPageData();
        List<Grade> getall = new GradeService().getall();
        req.setAttribute("GAll",getall);
        req.setAttribute("list",list);
        req.setAttribute("pageModel",pageModel);
        req.getRequestDispatcher("pageList.jsp").forward(req,resp);
    }

效果展示:

查询:

增加:

 

删除:(name=人工费) 

 

修改:(学号为s2004的学生)

 

 

 

 

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

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

相关文章

当年差点把我折磨疯的DOS下的打字游戏

最近群里有人喊有没有好用的打字游戏&#xff0c;想给学生找点事儿做&#xff0c;省得他们调皮。我就突然想到当年差点把我折磨疯的这个TT游戏。 记得之前有一个版本我可以使用&#xff0c;打开一看自己当初还写了一段好简单的介绍&#xff0c;就一行字 把tt.com文件拖到DOSB…

C. Plasticine zebra(思维)

Problem - C - Codeforces 这道题目要求你从一个由b和w组成的字符串中选择连续的、交替出现的颜色块来拼出斑马纹路&#xff0c;然后对这个字符串进行零次或多次的切分、翻转和粘合操作&#xff0c;以达到最大的斑马长度。 具体来说&#xff0c;Grisha想要选择若干连续的、交替…

STM32HAL库 总线舵机驱动库的编写

STM32 HAL库 总线舵机驱动库的编写 文章目录 STM32 HAL库 总线舵机驱动库的编写1 理论基础1.1 硬件1.2 电路图1.3 原理1.4 通信协议 2 程序编写2.1 cube mx设置&#xff08;1&#xff09;USART1设置&#xff08;2&#xff09;USART3设置 2.2 程序编写&#xff08;1&#xff09;…

【C程序设计】——最简单的C语言程序

目录 &#x1f34a;&#x1f34a;一、最简单的C语言程序 1.1 最简单的C语言程序举例 1.2 C语言程序的结构 首先&#xff0c;让我们先了解一下C语言的特点&#xff1a; 语言简洁、紧凑&#xff0c;使用方便、灵活&#xff1b;运算符丰富&#xff1b;数据类型丰富&#xff1b…

806. 写字符串需要的行数

806. 写字符串需要的行数 一、题目描述&#xff1a; 我们要把给定的字符串 S 从左到右写到每一行上&#xff0c;每一行的最大宽度为100个单位&#xff0c;如果我们在写某个字母的时候会使这行超过了100 个单位&#xff0c;那么我们应该把这个字母写到下一行。我们给定了一个数…

关于ubuntu20.04 apt 安装源中搜索不到最新版本gcc 12的问题

一、问题描述 最近在搞Open 3d 点云point cloud 相关的东西&#xff0c;过程需要安装较高版本的cmake 3.20版本以上&#xff0c;3.20版本又需要gcc 更高版本 至少11.0以上&#xff0c;理论上本机配置的有 ubuntu 官方的源和阿里云的源&#xff0c;不过 通过搜索就只能搜索安装的…

大模型中的temperature参数+随机采样策略

一、问题来源&#xff1a; 使用GPT-3.5的时候发现相同的输入会得不一样的结果 二、根因定位&#xff1a; 核心就在于采样策略&#xff0c;一图胜千言&#xff1a; 上图中语言模型 (language model) 的预测输出其实是字典中所有词的概率分布&#xff0c;而通常会选择生成其中…

【JavaScript全解析】ES6定义变量与箭头函数详解

箭头函数可以说是ES6的一大亮点,使用箭头函数,可以简化编码过程,使代码更加的简洁 本文由千锋前端老师独家创作&#xff0c;主要给大家介绍了关于ES6中箭头函数的相关资料,文中通过实例代码介绍的非常详细,觉得有帮助的话可以【关注】持续追更~ ES6定义变量 我们现在知道定义…

二、easyUI中的layout(布局)组件

1.layout&#xff08;布局&#xff09;组件的概述 布局容器有5个区域&#xff1a;北、南、东、西和中间。中间区域面板是必须的&#xff0c;边缘的面板都是可选的。每个边缘区域面板都可以通过拖拽其边框改变大小&#xff0c;也可以点击折叠按钮将面板折叠起来。布局可以进行嵌…

前端单元测试是怎么做的?

为什么要做单元测试 1. 执行单元测试&#xff0c;就是为了证明这段代码的行为和我们期望的一致 2. 进行充分的单元测试&#xff0c;是提高软件质量&#xff0c;降低开发成本的必由之路 3. 在开发人员做出修改后进行可重复的单元测试可以避免产生那些令人不快的负作用 怎么去…

YOLOv8中的C2f的详细解读

C2f的结构图,看不懂没关系,继续往下看,一定会看懂的!!!首先是C2f的逻辑代码: class C2f(nn.Module):# CSP Bottleneck with 2 convolutionsdef __init__(self, c1, c2, n=1, shortcut=

排序算法的比较与java实现

冒泡排序 基本思想: 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤&#xff0c;除了最后一个。…

网络安全大厂常见面试题

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

原神3.2服务端架设服务器搭建教程ubuntu系统(保姆级)

原神3.2服务端架设服务器搭建教程ubuntu系统&#xff08;保姆级&#xff09; 大家好&#xff0c;我是艾西今天跟大家分享下原神3.2服务端架设ubuntu系统实操教程 准备阶段&#xff1a;服务器一台 32h32g起、服务端、客户端、服务器装Ubuntu20.04系统 特别强调&#xff1a;ja…

怎样通过font属性控制CSS字体样式?

为了更方便地控制网页中各种各样的字体&#xff0c;CSS提供了一系列的字体样式属性&#xff0c;具体如下。 (1)font-size属性&#xff1a;字号 font-size属性用于设置字号&#xff0c;该属性的属性值可以为像素值、百分比数值、倍率等。表3-l列举了fomt-size属性常用的属性值…

回炉重造十四---微服务

微服务 1、zookeeper 1.1Zookeeper的功能 1.1.1命名服务 命名服务是分布式系统最基本的公共服务之一。在分布式系统中&#xff0c;被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等一一这些我们都可以通称他们为名字&#xff08;Name)&#xff0c;通过命名…

SpringCloud_服务调用_Ribbon概述以及使用(一)

SpringCloud_负载均衡_Ribbon(一) 概述 Ribbbon负载均衡演示 Ribbbon核心组件IRule Ribbbon负载均衡算法 概述 Ribbbon是一套客户端 负载均衡的工具 提供客户端的软件负载均衡算法和服务调用 地址&#xff1a; https://github.com/Netflix/ribbon/wiki/Getting-Started 目前这几…

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver报错问题分析

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 这个错误通常意味着应用程序服务器在尝试在只读模式下访问数据库时出现了问题&#xff0c;该错误与事务处理有关。通常出现在JDBC连接对象或事务对象的创建或状态查询的过程中。 在JDBC中&#xff0c;只读事务需要…

【机器视觉2】单目相机内外参数标定

单目相机内外参数标定 1. 标定参照物概述2. 张正友平面模板标定法 1. 标定参照物概述 标定相机内外参数需要获取场景和图像间多个坐标对。场景坐标点直接从标定参照物获取&#xff0c;图像坐标点从图像中获取。 标定参照物有二维、三维等&#xff0c;如下图所示&#xff1a; …

【linux】冯诺依曼体系+操作系统

我们使用的计算机都是由一个个硬件所组成的&#xff0c;那么如何有条不紊的运行呢&#xff1f;那是因为有冯诺依曼体系约束着硬件&#xff0c;而操作系统来管理着他们&#xff0c;从而使得计算机的硬件和软件完美结合。 一、冯诺依曼体系 首先我们得了解什么是冯诺依曼体系结构…