Vue3 -- 基于Websocket实现简易聊天室_vue3聊天室排版-程序员宅基地

技术标签: Vue  前端  typescript  javascript  

标题

接上一篇博文
这里使用 Vue3 + Typescript + Websocket 实现在线聊天功能的前端部分
部分后台接口需要自己实现调用(查询用户列表以及查询聊天记录)。

代码地址

https://gitee.com/zhang_deming_1995/vue-vben-admin/tree/master/src/views/business/domain/chat-online

表情包资源

点击这里

chat.data.ts

消息展示的时候,需要动态生成加载图标和消息发送失败时的感叹号图标,直接使用base64的方式显示

export const errorImg =
'data:image/png;base64,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';

export const loadingImg =
  'data:image/png;base64,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';

index.vue

<template>
  <div style="width: 100%; height: 100%">
    <div class="chat_horline"> </div>
    <div class="content">
      <div class="content__verline"></div>
      <div class="content__left">
        <!-- 分为聊天室和私聊窗口 -->
        <!-- 聊天室按钮 -->
        <div class="content__left_chatroom">
          <div
            v-for="(value, key) in filterUserList('room', '')"
            :key="key"
            :class="key == currentTalkUserId ? 'content__left_item_selected' : 'content__left_item'"
            @click.stop="clickCard(key)"
            ><Badge :count="value.unread" :offset="[22, 0]">
              <div> {
    {
     value.realname }}</div>
            </Badge>

            <div style="font-weight: 500"> 用户A:我发了个消息 </div>
          </div>
        </div>
        <!-- 成员列表 -->
        <div class="content__left_user_searcher">
          <a-input-search v-model:value="searchValue" placeholder="搜索联系人" @search="onSearch"
        /></div>
        <!-- <p>用户列表</p> -->
        <div class="content__left_user">
          <div
            v-for="(value, key) in filterUserList('user', searchValue)"
            :key="key"
            :class="key == currentTalkUserId ? 'content__left_item_selected' : 'content__left_item'"
            @click.stop="clickCard(key)"
          >
            <Badge :count="value.unread" :offset="[0, 0]">
              <div>
                <img style="float: left; height: 35px; width: 40px; padding-left: 5px" />
              </div>
            </Badge>
            <div style="top: 10px; display: inline-block; margin-left: 15px">
              {
    {
     value.realname }}
              <div v-if="value.login"><Badge style="color: green" color="green" text="在线" /></div>
              <div v-else><Badge style="color: gray" color="gray" text="离线" /></div>
            </div>
          </div>
        </div>
      </div>
      <div class="content__verline"></div>
      <div class="content__right">
        <div class="content__right_room">
          <!-- 聊天框 -->
          <div class="chat_content_parent">
            <div ref="messageBoxRef" class="chat_content_child">
              <div
                style="margin-bottom: 0px"
                v-for="(value, key, index) in messageList"
                :key="index"
              >
                <div v-html="showMessage(value)"></div>
              </div>
            </div>
          </div>
          <!-- 分割线 -->
          <div class="chat_line"> </div>
          <!-- 输入框 + 发送按钮 -->
          <div class="chat_sender">
            <div class="sender_header">
              <Popover v-model:visible="popoverVisible" trigger="click" placement="topLeft">
                <template #content>
                  <div style="height: 260px; overflow: auto">
                    <!-- 表情列表 -->
                    <a-card title="" style="width: 337px; height: 100%">
                      <a-card-grid
                        v-for="(value, name, index) in emojisList"
                        :key="index"
                        style="width: 30px; height: 30px; text-align: center; padding: 0px"
                      >
                        <img :src="value" @click="clickEmo(name)" />
                      </a-card-grid>
                    </a-card>
                  </div>
                </template>
                <SmileOutlined class="icon_left" />
              </Popover>
              <Popover trigger="click" placement="topLeft">
                <template #content> </template>
                <PlusCircleOutlined class="icon_left" />
              </Popover>
              <Button class="btn_right" size="small" @click="clickSend"> 发送</Button>
            </div>
            <a-textarea ref="textareaRef" v-model:value="messageText" :bordered="false" />
          </div>
        </div>
      </div>
      <div class="content__verline"></div>
      <div class="content__components"></div>
      <div class="content__verline"></div>
    </div>
    <div class="chat_horline"> </div>
  </div>
</template>
<script lang="ts">
  import {
     PlusCircleOutlined, SmileOutlined } from '@ant-design/icons-vue';
  import {
     Button, Popover, Badge } from 'ant-design-vue';
  import {
     defineComponent, ref } from 'vue';
  import {
     errorImg, loadingImg } from './chat.data.ts';
  import {
     useMessage } from '/@/hooks/web/useMessage';
  import {
     Persistent } from '/@/utils/cache/persistent';
  import {
     getUserListApi, getMessListApi } from '/@/api/business/chatonline';
  import {
     getUserInfo } from '/@/api/sys/user';

  export default defineComponent({
    
    components: {
     Button, Popover, Badge, SmileOutlined, PlusCircleOutlined },
    setup() {
    
      //表情列表
      const emojisList = ref({
    });
      //当前用户
      const currentUser = ref('');
      //其他用户列表
      //{
    
      //  realname: 真实姓名,
      //  login: 登陆状态,
      //  type: 类型 用户/群组,
      //  unread:  未读消息,
      //};
      const usersList = ref({
    });
      //当前聊天的对象或者是群组的ID
      const currentTalkUserId = ref(null);
      //准备发送的消息
      const messageText = ref('');
      //查询用户条件
      const searchValue = ref('');
      //表情popover是否显示
      const popoverVisible = ref(false);
      //输入框组件
      const textareaRef = ref(null);
      //消息展示框
      const messageBoxRef = ref(null);
      //消息列表
      // {
    
      //   id: {
    
      //     isSelf: false, 是否是自己发送的消息
      //      message: data.message, 消息
      //      senderId: data.senderId,发送人ID
      //      receiverId: data.receiverId,接收人ID
      //      loading: true,发送中?
      //      success: false,发送成功?
      //   }
      // }
      const messageList = ref({
    });

      const {
     notification, createErrorModal } = useMessage();
      //定义一个websocket
      var websocket = null;
      // 初始化用户列表
      const initUserList = async () => {
    

        //先加上一个聊天室这是固定的
        usersList.value['group_181eaae57ee84b1296efa45bd1d86801'] = {
    
          realname: '聊天室',
          login: true,
          type: 'room',
          unread: 0,
        };
        //调用接口查询用户列表
        const users = await getUserListApi();
        if (users !== undefined && users.length > 0) {
    
          for (let i = 0; i < users.length; i++) {
    
            usersList.value[users[i].id] = {
    
              realname: users[i].realName,
              //默认登陆状态都是未登录
              login: false,
              type: 'user',
              unread: 0,
            };
          }
        }

        //默认选中聊天室
        clickCard('group_181eaae57ee84b1296efa45bd1d86801');
      };
      //初始化WebSocket
      const wsInit = async () => {
    
        if (websocket) {
    
          return;
        }
        //获取当前用户的信息
        currentUser.value = await getUserInfo();
        //判断当前浏览器是否支持WebSocket(固定写法)
        if ('WebSocket' in window) {
    
          websocket = new WebSocket('ws://localhost:16001/websocket/' + currentUser.value.userId);
        } else {
    
          notification.error({
    
            description: '浏览器不支持websocket',
            duration: 3,
          });
        }

        //连接发生错误的回调方法
        websocket.onerror = function (e) {
    
          console.log('发生错误', e);
        };

        //连接成功建立的回调方法
        websocket.onopen = function () {
    
          console.log('建立连接' + 'event');
        };

        //接收到消息的回调方法
        websocket.onmessage = function (event) {
    
          var data = JSON.parse(event.data);
          if (data.messageType === 3) {
    
            const uuid = data.uuid;
            console.log(uuid, messageList.value[uuid]);
            if (messageList.value[uuid] && messageList.value[uuid].isSelf == true) {
    
              //当前聊天信息列表中在该条消息 并且发回到了自己 表示消息发送成功
              messageList.value[uuid].loading = false;
              messageList.value[uuid].success = true;
            } else {
    
              //用户聊天消息
              //判断接受人是群组还是自己
              //是自己表示是有人单独给自己发消息
              let id = '';
              if (data.receiverId.indexOf('group_') > -1) {
    
                id = data.receiverId;
              } else {
    
                id = data.senderId;
              }
              //判断当前聊天窗口的用户/群组ID 是不是发送消息的用户ID 或 群组ID
              if (id === currentTalkUserId.value) {
    
                const uuid = guid();
                messageList.value[uuid] = {
    
                  isSelf: false,
                  message: data.message,
                  senderId: data.senderId,
                  receiverId: data.receiverId,
                  loading: false,
                  success: true,
                };
              } else {
    
                //如果不是的话 就在卡片上显示一个有消息的框
                usersList.value[id].unread = usersList.value[id].unread + 1;
              }
            }
          } else if (data.messageType === 4) {
    
            //弹窗提示 并直接关闭聊天窗口
            createErrorModal({
    
              title: '警告',
              content: '用户异地登录聊天室,当前连接已断开',
              getContainer: () => document.body,
            });
            //断开连接
            closeSocket();
          } else if (data.messageType === 1 || data.messageType === 2) {
    
            const logined = data.userLists;
            //等一会再处理 第一次打开的时候用户列表没有加载完
            setTimeout(() => {
    
              Object.keys(usersList.value).reduce((data, key) => {
    
                if (contains(logined, String(key))) {
    
                  usersList.value[key].login = true;
                } else {
    
                  usersList.value[key].login = false;
                }
              }, {
    });
            }, 200);
          }
        };

        //连接关闭的回调方法
        websocket.onclose = function () {
    
          console.log('关闭连接');
        };
      };
      //判断数组中是否存在某个值
      function contains(arr, val) {
    
        if (!arr) {
    
          return false;
        }
        for (var i = 0; i < arr.length; i++) {
    
          if (arr[i] == val) {
    
            return true;
          }
        }
        return false;
      }
      // 关闭socket
      const closeSocket = () => {
    
        websocket.close();
      };
      // 初始化表情列表
      const initEmoji = () => {
    
        const key = 'EMOJI_LIST';
        //初始化本地缓存对象
        const fn_get = Persistent.getLocal;
        //判断对象是不是已经加载
        const emojis = fn_get(key);
        const fn_set = Persistent.setLocal;
        if (emojis === undefined || JSON.stringify(emojis) == '{}') {
    
          //读取表情文件并放入缓存中
          const files = import.meta.globEager('./emojis/*.gif');
          const emojilib = {
    };
          for (let key in files) {
    
            const url = files[key].default;
            const id = '[emo#' + url.split('/').slice(-1)[0].split('.')[0] + ']';
            emojilib[id] = url;
          }
          //缓存信息
          emojisList.value = emojilib;
          fn_set(key, emojilib, true);
        } else {
    
          emojisList.value = emojis;
          // fn_set(key, {
    }, true);
        }
      };
      // 点击表情事件
      const clickEmo = (name) => {
    
        popoverVisible.value = false;
        messageText.value = messageText.value + name;
        //焦点还原到输入框中
        textareaRef.value.focus();
      };
      //是否显示叹号
      function showImg(loading, success) {
    
        if (loading === false && success === false) {
    
          return 'inline-block';
        } else {
    
          return 'None';
        }
      }
      //是否显示加载圈
      function showLoading(loading) {
    
        if (loading === false) {
    
          return 'None';
        } else {
    
          return 'inline-block';
        }
      }
      // 显示信息动态解析
      const showMessage = (value) => {
    
        const message = value.message;
        const isLoginBoard = value.isLoginBoard;
        const isSelf = value.isSelf;
        const loading = value.loading;
        const success = value.success;
        const senderId = value.senderId;

        const sds = message.split(/(\[emo#\d+\])/);
        let mesShow = '';
        const showType = showImg(loading, success);
        const showLoad = showLoading(loading);
        const divStyle =
          '<div style="background-color:#e9e7e7;display:inline-block;text-align:left;white-space: pre-wrap;white-space: -moz-pre-wrap;' +
          'white-space: -pre-wrap;white-space: -o-pre-wrap;word-wrap: break-word;width: fit-content;width: -webkit-fit-content;' +
          'width: -moz-fit-content;max-width: 500px;min-height: 31px;font-size: 16px;padding-left: 5px;padding-right: 5px;margin: 5px;' +
          'border: #222222 2px solid;border-radius: 5px;">';
        if (isLoginBoard) {
    
          mesShow =
            mesShow +
            '<div style="width:100%;text-align:center">' +
            '<p style="background-color:#e9e7e7;font-size:12px;border:1px black solid;border-radius: 10px;">' +
            '欢迎进入聊天室</p></div>';
        } else {
    
          if (isSelf) {
    
            mesShow +=
              '<div style="width:100%;text-align:right">' +
              '<img style="height:26px;width:26px;display:' +
              showType +
              '" src="' +
              errorImg +
              '"/>' +
              '<img style="height:22px;width:22px;display:' +
              showLoad +
              '" src="' +
              loadingImg +
              '"/>' +
              divStyle;
          } else {
    
            mesShow +=
              '<div style="width:100%:height:100px">' +
              '<div style="padding-left:42px;color:#7c7a7a;font-size:12px;font-weight:600">' +
              // '在这里是名字' +
              usersList.value[senderId]?.realname +
              '</div><img style="float:left;height:35px;width:40px;padding-left: 5px;"></img>' +
              divStyle;
          }

          var re = new RegExp(/(\[emo#\d+\])/);
          for (let i = 0; i < sds.length; i++) {
    
            //拼接内部显示的东西
            if (sds[i].length === 0) {
    
              continue;
            }
            if (sds[i].match(re) && emojisList.value.hasOwnProperty(sds[i])) {
    
              // 表情替换
              mesShow =
                mesShow +
                '<img style="height:26px;width:26px;display:inline-block" src="' +
                emojisList.value[sds[i]] +
                '"/>';
            } else {
    
              // 直接拼接
              mesShow = mesShow + sds[i];
            }
          }
          // 处理头像
          if (isSelf) {
    
            // 在右边
            mesShow =
              mesShow +
              '</div><img style="display:inline-block;float:right;height:35px;width:40px;padding-right: 5px;"></img></div>';
          } else {
    
            mesShow = mesShow + '</div></div>';
          }
        }

        setTimeout(() => {
    
          messageBoxRef.value.scrollTop = messageBoxRef.value.scrollHeight;
        }, 20);
        return mesShow;
      };
      // 点击发送事件
      const clickSend = () => {
    
        const message = messageText.value;
        if (message.trim().length === 0) {
    
          notification.error({
    
            description: '不能发送空信息',
            duration: 3,
          });
          textareaRef.value.focus();
          return;
        }
        //解析消息中的表情
        const uuid = guid();
        messageList.value[uuid] = {
    
          isSelf: true,
          message: message,
          loading: true,
          success: false,
        };
        //调用消息接口传消息
        try {
    
          const param = {
    };
          param.uuid = uuid;
          param.message = message;
          param.receiverId = currentTalkUserId.value;
          wsInit();
          websocket.send(JSON.stringify(param));

          //消息发送之后
          //十五秒后判断当前 uuid 的消息是否已经成功 若loading仍是true 那么就认为是失败了
          //后台不会放弃该任务 所以可能会导致 前端已经判断消息发送失败,前端显示感叹号 但是后端在15秒之后发送成功 
          //此时消息状态会再次被修改
          setTimeout(() => {
    
            if (messageList.value[uuid].loading === true) {
    
              messageList.value[uuid].loading = false;
              messageList.value[uuid].success = false;
            }
          }, 15000);
        } catch (e) {
    
          messageList.value[uuid].success = false;
        }
        //焦点还原到输入框中
        messageText.value = '';
        textareaRef.value.focus();
      };
      //guid生成
      function guid() {
    
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    
          var r = (Math.random() * 16) | 0,
            v = c == 'x' ? r : (r & 0x3) | 0x8;
          return v.toString(16);
        });
      }
      //点击用户或聊天室
      const clickCard = (index) => {
    
        if (currentTalkUserId.value !== index) {
    
          currentTalkUserId.value = index;
          usersList.value[index].unread = 0;
          changeUsers();
        }
      };
      //筛选用户
      const filterUserList = (type, sv) => {
    
        let filterData = {
    };
        Object.keys(usersList.value).reduce((data, key) => {
    
          if (usersList.value[key].type === type) {
    
            if (sv && usersList.value[key].realname.indexOf(sv) > -1) {
    
              filterData[key] = usersList.value[key];
            } else if (!sv) {
    
              filterData[key] = usersList.value[key];
            }
          }
        }, {
    });
        return filterData;
      };
      //切换用户的操作
      async function changeUsers() {
    
        //点击好友或者群组之后,清空当前聊天面板并 =查询历史记录(待更新)
        //先清空当前面板
        messageList.value = {
    };
        //查询对应用户的聊天信息并加载(TODOconst message = await getMessListApi(currentTalkUserId.value);
        if (message) {
    
          for (let i = 0; i < message.length; i++) {
    
            const uuid = guid();
            const data = message[i];
            function isSelfFunc() {
    
              return data.senderId == currentUser.value.userId;
            }
            messageList.value[uuid] = {
    
              isSelf: isSelfFunc(),
              message: data.message,
              senderId: data.senderId,
              receiverId: data.receiverId,
              sendTime: data.sendTime,
              loading: false,
              success: true,
            };
          }
        }
      }
      const onSearch = () => {
    
        // console.log('searchValue', searchValue);
      };
      return {
    
        initUserList,
        emojisList,
        initEmoji,
        messageText,
        clickEmo,
        popoverVisible,
        textareaRef,
        messageBoxRef,
        clickSend,
        showMessage,
        messageList,
        wsInit,
        usersList,
        closeSocket,
        currentTalkUserId,
        clickCard,
        filterUserList,
        searchValue,
        onSearch,
      };
    },
    mounted() {
    
      //初始化用户列表
      this.initUserList();
      //初始化表情
      this.initEmoji();
      //初始化ws
      this.wsInit();
    },
    beforeUnmount() {
    
      this.closeSocket();
    },
  });
</script>
<style lang="less" scoped>
  .chat_horline {
    
    width: 100%;
    height: 2px;
    background-color: rgb(49, 49, 49);
  }
  .content {
    
    display: flex;
    width: 100%;
    height: calc(100% - 4px);
    &__ {
    
      &left {
    
        width: 220px;
        height: 100%;
        flex-shrink: 0;
        &_chatroom {
    
          width: 220px;
          border-radius: 10px;
        }
        &_user_searcher {
    
          //预留一个搜索框的位置
          height: 40px;
          padding: 5px;
          background-color: #fffbfb;
        }
        &_user {
    
          width: 220px;
          position: absolute;
          top: 97px; //要算上边框的宽度
          bottom: 0px;
          overflow-y: auto;
          &::-webkit-scrollbar {
    
            display: none;
          }
        }
        &_item {
    
          padding: 5px;
          padding-top: 10px;
          color: #444444;
          font-weight: 600;
          margin-top: 2px;
          margin-left: 3px;
          margin-right: 3px;
          width: auto;
          height: 55px;
          background-color: transparent;
          border-radius: 10px;
          &:hover {
    
            background-color: rgb(180, 180, 180);
          }
        }
        &_item_selected {
    
          padding: 5px;
          padding-top: 10px;
          margin-left: 3px;
          margin-right: 3px;
          width: auto;
          color: #444444;
          font-weight: 600;
          margin-top: 2px;
          height: 55px;
          background-color: transparent;
          border-radius: 10px;
          background-color: rgb(200, 200, 200);
        }
      }
      &verline {
    
        width: 2px;
        flex-shrink: 1;
        background-color: rgb(49, 49, 49);
      }
      &right {
    
        flex: 2;
        background-color: whitesmoke;
        border-top-right-radius: 5px;
        border-bottom-right-radius: 5px;
        &_room {
    
          width: 100%;
          height: 100%;
          .chat_content_parent {
    
            position: relative;
            height: calc(100% - 162px);
            ::-webkit-scrollbar {
    
              display: none;
            }
          }
          .chat_content_child {
    
            position: absolute;
            width: 100%;
            overflow-y: auto;
            height: 100%;
            background-color: whitesmoke;
            padding: 5px;
          }
          .chat_line {
    
            width: 100%;
            height: 2px;
            background-color: rgb(49, 49, 49);
          }
          .chat_sender {
    
            padding: 5px;
            width: 100%;
            height: 160px;
            .sender_header {
    
              height: 30px;
              width: 100%;
              .btn_right {
    
                color: whitesmoke !important;
                font-weight: 600;
                float: right;
                margin-left: 8px;
                color: rgb(36, 36, 36);
                background: rgb(36, 36, 36);
                border: #222222 2px solid;
              }
              .icon_left {
    
                float: left;
                margin-right: 4px;
                font-size: 24px;
                color: rgb(36, 36, 36);
                background: whitesmoke;
              }
            }
            textarea {
    
              padding: 3px;
              color: rgb(24, 23, 23);
              resize: none;
              width: 100%;
              height: calc(100% - 30px);
              background-color: whitesmoke;
              border: #222222 2px solid;
              border-radius: 5px;
            }
          }
        }
      }
      &components {
    
        flex-shrink: 3;
        width: 50px;
        height: 100%;
        border-top-right-radius: 5px;
        border-bottom-right-radius: 5px;
        background-color: whitesmoke;
      }
    }
  }
  // 在代码中书写 因为会影响其他页面所以 样式使用scoped限制 但是scoped的会导致动态生成的元素样式失效
  .textMessage {
    
    // 原文本格式显示 识别空格 并且自动换行
    white-space: pre-wrap;
    white-space: -moz-pre-wrap;
    white-space: -pre-wrap;
    white-space: -o-pre-wrap;
    // 自动换行
    word-wrap: break-word;
    // 宽度自适应内容
    width: fit-content;
    width: -webkit-fit-content;
    width: -moz-fit-content;
    // 最大宽度
    max-width: 500px;
    min-height: 31px;
    font-size: 16px;
    padding-left: 5px;
    padding-right: 5px;
    margin: 2px;
    border: #e9e7e7 2px solid;
    border-radius: 5px;
  }
</style>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40096897/article/details/125221462

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签