Spring MVC 综合案例

news2025/1/30 13:02:32

目录

一. 加法计算器

1. 准备工作

2. 约定前后端交互接口

需求分析

接口定义

 3. 服务器端代码

4. 运行测试

二. 用户登录 

1. 准备工作

2. 约定前后端交互接口

需求分析

接口定义

(1) 登录界面接口

 (2) 首页接口

3. 服务器端代码

 4. 运行测试

三. 留言板

1. 准备工作

2. 约定前后端交互接口

需求分析

接口定义

3. 服务器端代码

 四. 图书管理系统

1. 准备工作

2. 约定前后端交互接口

需求分析

接口定义

 3. 服务器端代码

登录页面

图书列表 

创建图书:

返回图书列表:

五. lombook 介绍

 六. 应用分层


一. 加法计算器

1. 准备工作

创建SpringBoot项目, 并引入SpringBoot依赖. 把前端页面的代码放到项目中.

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<form action="calc/sum" method="post">
    <h1>计算器</h1>
    数字1:<input name="num1" type="text"><br>
    数字2:<input name="num2" type="text"><br>
    <input type="submit" value=" 点击相加 ">
</form>
</body>

</html>

2. 约定前后端交互接口

由于现在大多是以 "前后端分离模式" 开发, 前后端代码通常由不同团队进行开发. 所以双方团队在开发之前, 会提前约定好前后端交互方式. 常用 "接口文档" 来描述它. (接口文档 也可以理解为"应用程序的说明书").

  • 需求分析

加法计算器功的能是对两个整数进行相加. 需要客户端提供参与计算的两个数, 服务端返回这两个整数相加的结果.

  • 接口定义

请求路径: clac / sum

请求方式: GET / POST

接口描述: 计算两个整数相加

请求参数:

响应数据:

Content-Type: text / html

响应内容: 计算机计算结果: x 

 3. 服务器端代码

@RestController
@RequestMapping("/calc")
public class CalcController {
    @RequestMapping("/sum")
    public String sum(Integer num1, Integer num2) {
        int sum = num1 + num2;
        return "<h1>计算机计算结果: "+sum+"</h1>";
    }
}

4. 运行测试

运行main方法, 启动服务. 

访问服务地址: http://127.0.0.1:8080/calc.html

二. 用户登录 

1. 准备工作

创建SpringBoot项目, 并引入SpringBoot依赖. 把前端页面的代码放到项目中.

  • index.html (登录界面) 代码:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>

<body>
<h1>用户登录</h1>
用户名:<input name="userName" type="text" id="userName"><br>
密码:<input name="password" type="password" id="password"><br>
<input type="button" value="登录" onclick="login()">

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
    function login() {
        //使用ajax进行前后端交互
        $.ajax({
            //小括号中是一个对象,对象用大括号括起来
            type:"post",
            url:"/user/login",
            data:{
                "username":$("#userName").val(),
                "password":$("#password").val()//通过Id获取值,给后端传递参数
            },
            success: function (result) {//参数名任意,用于接收后端返回的参数
                if (result){
                    location.href = "/index.html"//跳转页面
                }else {
                    alert("账号或密码有误");//弹窗
                }
            }
        });
    }

</script>
</body>

</html>
  • login.html (首页) 代码:
<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>用户登录首页</title>
</head>

<body>
登录人: <span id="loginUser"></span>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
  $.ajax({
    type : "get",
    url : "/user/getLoginUser",
    success:function (result) {
      $("#loginUser").text(result);//给loginUser参数赋值为后端返回的result值
    }
  })
</script>
</body>

</html>

2. 约定前后端交互接口

  • 需求分析

(1) 登录页面: 通过账号和密码, 校验输入的账号密码是否正确, 并告知前端.

(2) 首页: 告知前端当前登录用户. 如果当前已有用户登录, 返回登录的账号; 如果没有, 返回空.

  • 接口定义

(1) 登录界面接口

接口定义:

请求路径: /user/login

请求方式: POST

接口描述: 校验账号密码是否正确.

请求参数: 

响应数据:

Content-Type : text/html
响应内容: 
账号密码正确:true
账号密码错误:false

 (2) 首页接口

接口定义:

请求路径: /user/getLoginuser
请求方式: GET
接口描述: 显示当前登录用户的主页,主页上显示用户名.

请求参数: 无

响应数据: 

Content-Type:text/html
响应内容: 登录的用户名.

3. 服务器端代码

(1) 登录界面接口

@RestController
@RequestMapping("/user")
public class LoginController {
    @RequestMapping("/login")
    public boolean login(String userName, String password, HttpSession session) {
        // 账号或密码为空
        if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
            return false;
        }
        // 校验账号密码是否正确 (这里先写死)
        if (!"zhangsan".equals(userName) || !"123456".equals(password)) {
            return false;
        }
        //密码验证成功后, 把用户名存储在Session中.
        session.setAttribute("userName",userName);
        return true;
    }
    //StringUtils.hasLength()是Spring提供的一个方法, 用于判断字符串是否有值.
    //字符串为 null 或 "" 时, 返回false, 其他情况返回true.
}

(2) 首页接口

@RestController
@RequestMapping("/getLoginUser")
public class getLoginUser {
    @RequestMapping("/")
    public String getLoginUser(HttpSession session) {
        //从Session中获取用户登录信息
        String userName = (String) session.getAttribute("userName");
        //如果用户已经登录, 则直接返回用户名
        if (StringUtils.hasLength(userName)) {
            return userName;
        }
        //否则什么都不返回
        return "";
    }
}

 4. 运行测试

验证不成功: 

验证成功:

三. 留言板

1. 准备工作

创建SpringBoot项目, 并引入SpringBoot依赖. 把前端页面的代码放到项目中.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>留言板</title>
    <style>
        .container {
            width: 350px;
            height: 300px;
            margin: 0 auto;
            /* border: 1px black solid; */
            text-align: center;
        }

        .grey {
            color: grey;
        }

        .container .row {
            width: 350px;
            height: 40px;

            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .container .row input {
            width: 260px;
            height: 30px;
        }

        #submit {
            width: 350px;
            height: 40px;
            background-color: orange;
            color: white;
            border: none;
            margin: 10px;
            border-radius: 5px;
            font-size: 20px;
        }
    </style>
</head>

<body>
    <div class="container">
        <h1>留言板</h1>
        <p class="grey">输入后点击提交, 会将信息显示下方空白处</p>
        <div class="row">
            <span>谁:</span> <input type="text" name="" id="from">
        </div>
        <div class="row">
            <span>对谁:</span> <input type="text" name="" id="to">
        </div>
        <div class="row">
            <span>说什么:</span> <input type="text" name="" id="say">
        </div>
        <input type="button" value="提交" id="submit" onclick="submit()">
        <!-- <div>A 对 B 说: hello</div> -->
    </div>

    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
    <script>
        load();//每次在重新加载页面之后,都要从后端的List中调动数据,保证上次添加的数据不会丢失
        function load(){
            $.ajax({
                type: "get",
                url:"message/getList",
                success:function (result){
                    for (var message of result){
                        var divE = "<div>"+message.from +"对" + message.to + "说:" + message.say+"</div>";
                        $(".container").append(divE);
                    }
                }
            });
        }
        function submit(){
            //1. 获取留言的内容
            var from = $('#from').val();
            var to = $('#to').val();
            var say = $('#say').val();
            if (from== '' || to == '' || say == '') {
                return;
            }
            $.ajax({
                type : "post",
                url : "message/publish",
                contentType: "application/json",
                //传递的值是json类型,data就是在向后端传递数据
                data:JSON.stringify({
                    from : from,
                    to : to,
                    say : say//从前端参数的ID中获取对应的值传递给后端
                }),
                //后端返回结果
                success:function (result) {
                    if (result){
                        //2. 构造节点
                        var divE = "<div>"+from +"对" + to + "说:" + say+"</div>";
                        //3. 把节点添加到页面上
                        $(".container").append(divE);

                        //4. 清空输入框的值
                        $('#from').val("");
                        $('#to').val("");
                        $('#say').val("");
                    }else{
                        alert("提交留言失败")
                    }
                }
            });
        }
    </script>
</body>

</html>

2. 约定前后端交互接口

  • 需求分析

后端需要提供两个服务;

(1) 提交留言: 客户输入留言信息之后, 后端要把留言信息保存起来.

(2) 展示留言: 页面展示时, 需要从后端获取到所有的留言信息.

  • 接口定义

1. 获取全部留言

2. 发表新留言

3. 服务器端代码

package com.example.demo;

import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RequestMapping("/message")
@RestController
public class MessageWall {
    public List<MessageInfo> messageInfoList = new ArrayList<>();
    @RequestMapping("/publish")
    public Boolean messageController(@RequestBody MessageInfo messageInfo){
        System.out.println(messageInfo);  //打印日志
        if (StringUtils.hasLength(messageInfo.from) &&
        StringUtils.hasLength(messageInfo.to) &&
        StringUtils.hasLength(messageInfo.say)){
            messageInfoList.add(messageInfo);
            return true;  //都有长度,添加成功,返回true
        }
        // 否则 添加失败,返回false
        return false;
    }
    @RequestMapping("/getList")
    public List<MessageInfo> getList(){
        return messageInfoList;
    }
}

package com.example.demo;

import lombok.Data;

@Data
public class MessageInfo {
    public String from;
    public String to;
    public String say;
}

 四. 图书管理系统

1. 准备工作

创建SpringBoot项目, 并引入SpringBoot依赖. 把前端页面的代码放到项目中.

  • 登录页面:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/login.css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
</head>

<body>
    <div class="container-login">
        <div class="container-pic">
            <img src="pic/computer.png" width="350px">
        </div>
        <div class="login-dialog">
            <h3>登陆</h3>
            <div class="row">
                <span>用户名</span>
                <input type="text" name="userName" id="userName" class="form-control">
            </div>
            <div class="row">
                <span>密码</span>
                <input type="password" name="password" id="password" class="form-control">
            </div>
            <div class="row">
                <button type="button" class="btn btn-info btn-lg" onclick="login()">登录</button>
            </div>
        </div>
    </div>
    <script src="js/jquery.min.js"></script>
    <script>
        function login() {
            $.ajax({
                type:"post",
                url:"/user/login",
                data:{
                    name:$("#userName").val(),
                    password:$("#password").val()
                },
                success:function (result) {
                    if (result){
                        location.href = "book_list.html";
                    }else{
                        alert("账号或密码错误")
                    }
                }
            });
        }
    </script>
</body>

</html>
  • 图书列表:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图书列表展示</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">

    <link rel="stylesheet" href="css/list.css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script src="js/jq-paginator.js"></script>

</head>

<body>
    <div class="bookContainer">
        <h2>图书列表展示</h2>
        <div class="navbar-justify-between">
            <div>
                <button class="btn btn-outline-info" type="button" onclick="location.href='book_add.html'">添加图书</button>
                <button class="btn btn-outline-info" type="button" onclick="batchDelete()">批量删除</button>
            </div>
        </div>

        <table>
            <thead>
                <tr>
                    <td>选择</td>
                    <td class="width100">图书ID</td>
                    <td>书名</td>
                    <td>作者</td>
                    <td>数量</td>
                    <td>定价</td>
                    <td>出版社</td>
                    <td>状态</td>
                    <td class="width200">操作</td>
                </tr>
            </thead>
            <tbody>

            </tbody>
        </table>

        <div class="demo">
            <ul id="pageContainer" class="pagination justify-content-center"></ul>
        </div>
        <script>

            getBookList();
            function getBookList() {
                $.ajax({
                    type: "get",
                    url: "/book/getList",
                    success: function (result) {
                        console.log(result);
                        if (result != null) {
                            var finalHtml = "";//构造字符串
                            for (var book of result) {
                                finalHtml += '<tr>';
                                finalHtml += '<td><input type="checkbox" name="selectBook" value="' + book.id + '" id="selectBook" class="book-select"></td>';
                                finalHtml += '<td>' + book.id + '</td>';
                                finalHtml += '<td>' + book.bookName + '</td>';
                                finalHtml += '<td>' + book.author + '</td>';
                                finalHtml += '<td>' + book.count + '</td>';
                                finalHtml += '<td>' + book.price + '</td>';
                                finalHtml += '<td>' + book.publish + '</td>';
                                finalHtml += '<td>' + book.statusCN + '</td>';
                                finalHtml += '<td><div class="op">';
                                finalHtml += '<a href="book_update.html?bookId=' + book.id + '">修改</a>';
                                finalHtml += '<a href="javascript:void(0)"οnclick="deleteBook(' + book.id + ')">删除</a>';
                                finalHtml += '</div></td>';
                                finalHtml += "</tr>";
                            }
                            $("tbody").html(finalHtml);
                        }
                    }
                });
            }
    
            //翻页信息
            $("#pageContainer").jqPaginator({
                totalCounts: 100, //总记录数
                pageSize: 10,    //每页的个数
                visiblePages: 5, //可视页数
                currentPage: 1,  //当前页码
                first: '<li class="page-item"><a class="page-link">首页</a></li>',
                prev: '<li class="page-item"><a class="page-link" href="javascript:void(0);">上一页<\/a><\/li>',
                next: '<li class="page-item"><a class="page-link" href="javascript:void(0);">下一页<\/a><\/li>',
                last: '<li class="page-item"><a class="page-link" href="javascript:void(0);">最后一页<\/a><\/li>',
                page: '<li class="page-item"><a class="page-link" href="javascript:void(0);">{
  
  {page}}<\/a><\/li>',
                //页面初始化和页码点击时都会执行
                onPageChange: function (page, type) {
                    console.log("第"+page+"页, 类型:"+type);
                }
            });
            function deleteBook(id) {
                var isDelete = confirm("确认删除?");
                if (isDelete) {
                    //删除图书
                    alert("删除成功");
                }
            }
            function batchDelete() {
                var isDelete = confirm("确认批量删除?");
                if (isDelete) {
                    //获取复选框的id
                    var ids = [];
                    $("input:checkbox[name='selectBook']:checked").each(function () {
                        ids.push($(this).val());
                    });
                    console.log(ids);
                    alert("批量删除成功");
                }
            }

        </script>
    </div>
</body>

</html>

2. 约定前后端交互接口

  • 需求分析

登录: 用户输入账号和密码完成登录功能.

列表: 展示图书

  • 接口定义

登录接口:

[URL]
POST /user/login
[请求参数]
name=admin&password=admin
[响应]
true //账号密码验证成功
false//账号密码验证失败

列表:

[URL]
POST /book/getList
[请求参数]
⽆
[响应]
返回图书列表
[
 {
 "id": 1,
 "bookName": "活着",
 "author": "余华",
 "count": 270,
 "price": 20,
 "publish": "北京⽂艺出版社",
 "status": 1,
 "statusCN": "可借阅"
 },
 ...

属性说明: 

 3. 服务器端代码

  • 登录页面

package com.jrj.library;

import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public class Login {
    @RequestMapping("/login")
    public Boolean login(String name, String password, HttpSession session){
        if (!StringUtils.hasLength(name) || !StringUtils.hasLength(password)){
            return false;
        }
        if ("zhangsan".equals(name) && "123456".equals(password)){
            session.setAttribute("userName",name);
            return true;
        }
        return false;
    }
}
  • 图书列表 

创建图书:
package com.jrj.library;

import lombok.Data;

@Data
public class BookInfo {//构造一本书所有的属性
    public Integer id;
    public String bookName;
    public String author;
    public Integer count;
    public Integer price;
    public String publish;
    public Integer status;//1-可借阅,2-不可借阅
    public String statusCN;
}

返回图书列表:
package com.jrj.library;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

@RequestMapping("/book")
@RestController
public class BookController {
    @RequestMapping("/getList")
    public List<BookInfo> getList(){
        List<BookInfo> list = mockData();
        for (BookInfo bookInfo:list){
            if (bookInfo.status == 1){
                bookInfo.setStatusCN("可借阅");
            }else{
                bookInfo.setStatusCN("不可借阅");
            }
        }
        return list;
    }
    //模拟数据
    private List<BookInfo> mockData(){
        List<BookInfo> list2 = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            BookInfo bookInfo = new BookInfo();
            bookInfo.setId(i);
            bookInfo.setBookName("Java编程思想"+i);
            bookInfo.setCount(1);
            bookInfo.setPublish("机械工业出版社");
            bookInfo.setPrice(new Random().nextInt(100));
            bookInfo.setAuthor("高斯林");
            bookInfo.setStatus(1);
            list2.add(bookInfo);
        }
        return list2;
    }
}

五. lombook 介绍

lombook是一个Java工具库, 通过添加注解的方式, 来简化Java开发.

使用方法:

也可直接使用 @Data注解, 只不过 @Data注解 比较粗暴: 

@Data =

@Getter+@Setter+@ToString+@NoArgsConstructor +@RequiredArgsConstructor  

 六. 应用分层

为了不使我们的代码看起来比较杂乱, 我们使用应用分层来对代码进行分层管理.

Spring项目常见的三层应用分层:

Controller (接口层) : 负责与外部做交互.

Service (逻辑层) : 负责做逻辑处理.

Mapper / Dao (持久层) : 负责从数据库拿数据 (相当于数据库的客户端).

还有最底层的数据库 (DB) : 使用MySQL或Oracle (不在三层分层中).

MVC和三层架构的关系:

软件设计原则: 高内聚+低耦合

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

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

相关文章

数据分析系列--③RapidMiner算子说明及数据预处理

一、算子说明 1 新建过程 2 算子状态灯 状态灯说明: (1)状态指示灯&#xff1a; 红色:指示灯说明有参数未被设置或输入端口未被连接等问题; 黄色:指示灯说明还未执行算子&#xff0c;不管配置是否基本齐全; 绿色:指示灯说明一切正常&#xff0c;已成功执行算子。 (2)三角…

NLP自然语言处理通识

目录 ELMO 一、ELMo的核心设计理念 1. 静态词向量的局限性 2. 动态上下文嵌入的核心思想 3. 层次化特征提取 1. 双向语言模型&#xff08;BiLM&#xff09; 2. 多层LSTM的层次化表示 三、ELMo的运行过程 1. 预训练阶段 2. 下游任务微调 四、ELMo的突破与局限性 1. 技术突破 2. …

Time Constant | RC 和 RL 电路中的时间常数

注&#xff1a;本文为 “Time Constant” 相关文章合辑。 机翻&#xff0c;未校。 How To Find The Time Constant in RC and RL Circuits June 8, 2024 &#x1f4a1; Key learnings: 关键学习点&#xff1a; Time Constant Definition: The time constant (τ) is define…

无心剑七绝《除夕快乐》

七绝除夕快乐 除旧迎新瑞气扬 夕阳烂漫映红妆 快言美酒佳肴味 乐享天伦福满堂 2025年1月28日 平水韵七阳平韵 无心剑这首七绝以“除夕快乐”为题&#xff0c;巧妙地运用了藏头手法&#xff0c;将“除夕快乐”四字分别嵌入诗的每一句首字&#xff0c;构思精巧&#xff0c;富有新…

Object类(3)

大家好&#xff0c;今天继续给大家介绍一下object类中的方法&#xff0c;那么话不多说&#xff0c;来看。 hashcode()这个方法,帮我们算了一个具体的对象位置,这里面涉及到数据结构,简单认为它是个内存地址,然后调用Integer.toHexString ()将这个地址以16进制输出。 该方法是一…

GPU上没程序在跑但是显存被占用

原因&#xff1a;存在僵尸线程&#xff0c;运行完但是没有释放内存 查看僵尸线程 fuser -v /dev/nvidia*关闭僵尸线程 pkill -9 -u 用户名 程序名 举例&#xff1a;pkill -9 -u grs python参考&#xff1a;https://blog.csdn.net/qq_40206371/article/details/143798866

2007-2020年各省国内专利申请授权量数据

2007-2020年各省国内专利申请授权量数据 1、时间&#xff1a;2007-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、国内专利申请授权量(项) 4、范围&#xff1a;31省 5、指标解释&#xff1a;专利是专利权的简称&…

python:洛伦兹变换

洛伦兹变换&#xff08;Lorentz transformations&#xff09;是相对论中的一个重要概念&#xff0c;特别是在讨论时空的变换时非常重要。在四维时空的背景下&#xff0c;洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中&#xff0c;洛伦兹变换通常…

电路研究9.2.3——合宙Air780EP中FTP——FTPGET 命令使用方法研究

怎么说呢&#xff0c;之前也是看的&#xff0c;但是也很迷茫&#xff0c;感觉上虽然是对的&#xff0c;但是无法联系到应用里面&#xff0c;今天研究一下FTP 命令使用方法吧。 15.29 使用方法举例 这里发现下面那些看的不懂呢&#xff0c;于是就返回FTP的应用了。 9.5.4 FTP 应…

ANSYS学习笔记(十)网格质量的诊断和提高

网格质量的好坏不能单纯只看meshing给出的网格质量结果&#xff0c;要根据实际的计算物理场景来判断&#xff0c;需要求解的地方物理量大梯度的位置网格越密越好。 网格质量&#xff1a;在有限网格数量限制下&#xff0c;离散误差小的网格是好网格&#xff0c;是高质量网格。网…

2024收尾工作

目录 开场白 栈与队列 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 堆&#xff08;优先级队列&#xff09; 堆排序 LeetCode215. 数组中的第 k 个最大元素 总结 开场白 今天是除夕&…

搭建Spring Boot开发环境

JDK&#xff08;1.8及以上版本&#xff09; Apache Maven 3.6.0 修改settings.xml 设置本地仓库位置 <localRepository>D:/repository</localRepository> 设置远程仓库镜像 <mirror><id>alimaven</id><name>aliyun maven</name&…

jmeter中对接口进行循环请求后获取相应数据

1、工作中遇到一个场景就是对某个单一接口进行循环请求&#xff0c;并需要获取每次请求后返回的相应数据&#xff1b; 2、首先就在jmeter对接口相关组件进行配置&#xff0c;需要组件有&#xff1a;循环控制器、CSV数据文件设置、计数器、访问接口、HTTP信息头管理器、正则表达…

网络工程师 (4)存储系统

一、多级存储结构 &#xff08;一&#xff09;组成 寄存器&#xff1a; 寄存器是与CPU直接协调工作的高速存储器&#xff0c;用于加速存储器的访问速度。它通常用于存放操作数或作为地址寄存器&#xff0c;以加快地址转换速度。寄存器的数量有限&#xff0c;一般在几个到几百个…

oracle比较一下统计信息差异吧

统计信息发生了哪些变化&#xff1f; 从上次收集到最近一次收集有什么不同&#xff1f; set long 999999 longc 99999 line 100 select report, maxdiffpct from table(dbms_stats.diff_table_stats_in_history(SYS,T1,to_timestamp(2025-01-22 09:01:46,YYYY-MM-DD hh24:mi:s…

Hive:内部表和外部表,内外转换

内部表和外部表 内部表示例 给表添加数据 外部表示例 给表添加数据 外部表示例 用location指定表目录位置,那么表的位置在实际指定的位置,但是可以被映射 外部表和内部表的区别 删除表后使用show tables in shao; 已经没有被删除的表,说明元数据已经被删除(mysql里面存放),但是…

P1030 [NOIP2001 普及组] 求先序排列(c++)详解

题目链接&#xff1a;P1030 [NOIP2001 普及组] 求先序排列 - 洛谷 | 计算机科学教育新生态 思路&#xff1a; 1.先确定跟节点 2.根据根节点&#xff0c;划分出左右子树 中&#xff1a;BADC 后&#xff1a;BDCA 分析&#xff1a; 根据后序遍历&#xff0…

Mac cursor设置jdk、Maven版本

基本配置 – Cursor 使用文档 首先是系统用户级别的设置参数&#xff0c;运行cursor&#xff0c;按下ctrlshiftp&#xff0c;输入Open User Settings(JSON)&#xff0c;在弹出的下拉菜单中选中下面这样的&#xff1a; 在打开的json编辑器中追加下面的内容&#xff1a; {"…

提升企业内部协作的在线知识库架构与实施策略

内容概要 在当前快速变化的商业环境中&#xff0c;企业对于提升内部协作效率的需求愈显迫切。在线知识库作为信息存储与共享的平台&#xff0c;成为了推动企业数字化转型的重要工具。本文将深入探讨如何有效打造与实施在线知识库&#xff0c;强调架构设计、知识资产分类管理及…

Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )

本章主要是关于整体页面布局及样式处理&#xff0c;在进行这一章代码前&#xff0c;先将前两章中的示例代码部分删除&#xff08;如Home.vue、About.vue、counter.ts、App.vue中引用等&#xff09; 1 整体页面布局 页面整体布局构成了产品的框架基础&#xff0c;通常涵盖主导…