【Vue+Element-UI】实现登陆注册界面及axios之get、post请求登录功能实现、跨域问题的解决

目录

一、实现登陆注册界面

1、前期准备

2、登录静态页实现

2.1、创建Vue组件

2.2、静态页面实现

2.3、配置路由

2.4、更改App.vue样式

2.5、效果

3、注册静态页实现

3.1、静态页面实现

3.2、配置路由

3.3、效果

二、axios

1、前期准备

1.1、准备项目

1.2、安装axios

1.3、更改端口

2、GET请求

2.1、导入axios

2.2、编写get请求

3、POST请求

3.1、get、post的区别

3.2、导入qs

3.3、编写post请求

3.4、优化处理

3.4.1、下载安装vue-axios

3.4.2、写入api模块添加全局配置

3.4.2.1、action.js

3.4.2.2、http.js

3.4.3、main.js配置vue-axios

3.4.3、使用封装后的axios发送请求

3.4.4、修改后的提交事件

三、跨域

1、什么是跨域问题

2、解决跨域问题


一、实现登陆注册界面

1、前期准备

使用vue-cli构建SPA项目:

  1. 进入你想创建项目的目录位置
  2. 使用命令vue init webpack 项目名,构建一个vue项目
    vue init webpack element_ui_spa
  3. 使用命令npm install element-ui -S,添加Element-UI模块
    1. npm install element-ui -S:后面有 -s,他们分别是:
      1. -g:将依赖下载node_global全局依赖。
      2. -d:下载依赖da到spa工程中,不会参与打包。
      3. -s:下载依赖da到spa工程中,会参与打包。
  4. 打开项目的package.json文件可查看具体添加模块信息。
  5. src目录下创建views目录(该目录用于存放vue组件)。
  6. main.js中引入element-ui模块
    // The Vue build version to load with the `import` command
    // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    import Vue from 'vue'
    // 新添加1
    import ElementUI from 'element-ui'
    // 新添加2,避免后期打包样式不同,要放在import App from './App';之前
    import 'element-ui/lib/theme-chalk/index.css'import App from './App'
    import router from './router'// 新添加3----实例进行一个挂载
    Vue.use(ElementUI)
    Vue.config.productionTip = false/* eslint-disable no-new */
    new Vue({el: '#app',router,components: {App},template: '<App/>'
    })
    

    在指定位置!!!在指定位置!!!在指定位置!!!---添加三行代码

2、登录静态页实现

2.1、创建Vue组件

在我们src里面创建我们的登录注册的vue组件

2.2、静态页面实现

设置我们的html样式,当然我们也可以在组件 | Element里面自己进行一个自定义

<template><div class="Login"><el-form class="login-container"><h1 class="title">用户登录</h1><el-form-item label=""><el-input type="text" v-model="username" placeholder="登录账号" autocomplete="off"></el-input></el-form-item><el-form-item label=""><el-input type="password" v-model="password" placeholder="登录密码" autocomplete="off"></el-input></el-form-item><el-form-item><el-button type="primary" style="width:100%;" @click="doSubmit()">提交</el-button></el-form-item><el-row style="text-align: center;margin-top:-10px"><el-link type="primary">忘记密码</el-link><el-link type="primary" @click="gotoRegister()">用户注册</el-link></el-row></el-form></div>
</template>
<script>
export default {name: "Login",data() {return {msg: "登录界面",username: "",password: ""}},methods: {gotoRegister() {this.$router.push("/Register");},doSubmit() {}}
}
</script><style scoped>
.login-wrap {box-sizing: border-box;width: 100%;height: 100%;padding-top: 10%;background-image: url(https://pic4.zhimg.com/v2-c5880f5a6d44766feb085c3ae94899c7_r.jpg);//background-image: url();background-repeat: no-repeat;background-position: center right;background-size: 100%;
}.login-container {border-radius: 10px;margin: 0px auto;width: 350px;padding: 30px 35px 15px 35px;background: #fff;border: 1px solid #eaeaea;text-align: left;box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.1);
}.title {margin: 0px auto 40px auto;text-align: center;color: #505458;
}
</style>

2.3、配置路由

router/index.js中修改vue项目默认显示路由

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Login from '@/views/Login'Vue.use(Router)export default new Router({routes: [{path: '/Login',name: 'Login',component: Login}]
})

2.4、更改App.vue样式

更改原有<style>样式

<template><div id="app"><!--    <img src="./assets/logo.png"><br>--><br><router-view/></div>
</template><script>
export default {name: 'App'
}
</script><style>
html,
body {width: 100%;height: 100%;box-sizing: border-box;padding: 0px;margin: 0px;
}#app {font-family: "Avenir", Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;color: #2c3e50;widows: 100%;height: 100%;
}
</style>

2.5、效果

3、注册静态页实现

在登陆的基础上实现一样的操作

3.1、静态页面实现

<template><div class="Register"><el-form class="login-container"><h1 class="title">用户注册</h1><el-form-item label=""><el-input type="text" v-model="username" placeholder="注册账号" autocomplete="off"></el-input></el-form-item><el-form-item label=""><el-input type="password" v-model="password" placeholder="注册密码" autocomplete="off"></el-input></el-form-item><el-form-item><el-button type="primary" style="width:100%;" @click="doSubmit()">提交</el-button></el-form-item><el-row style="text-align: center;margin-top:-10px"><el-link type="primary">忘记密码</el-link><el-link type="primary" @click="gotoLogin()">用户注册</el-link></el-row></el-form></div>
</template>
<script>
export default {name: "Register",data() {return {msg: "注册界面",username: "",password: ""}},methods: {gotoLogin() {this.$router.push("/Login");},doSubmit() {}}
}
</script><style scoped>
.login-wrap {box-sizing: border-box;width: 100%;height: 100%;padding-top: 10%;background-image: url();background-repeat: no-repeat;background-position: center right;background-size: 100%;
}.login-container {border-radius: 10px;margin: 0px auto;width: 350px;padding: 30px 35px 15px 35px;background: #fff;border: 1px solid #eaeaea;text-align: left;box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.1);
}.title {margin: 0px auto 40px auto;text-align: center;color: #505458;
}
</style>

3.2、配置路由

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Login from '@/views/Login'
import Register from '@/views/Register'Vue.use(Router)export default new Router({routes: [{path: '/Login',name: 'Login',component: Login},{path: '/Register',name: 'Register',component: Register}]
})

3.3、效果

二、axios

使用SSM项目构建Java后台,模拟提供一个用户登录的action地址,Vue通过请求指定的用户登录接口。

1、前期准备

1.1、准备项目

需要准备自己做好的一个项目,比如SSM的项目、maven项目、SpringMVC的项目都可,如果不会写可以参考我以前的博客内容spring系列_无法自律的人的博客-CSDN博客,

1.2、安装axios

进入项目里面CMD窗口进行下载,必须要在你的项目文件路径里面进行CMD的窗口

npm i axios -S

在我们的package.json里面可以看到我们下载的

1.3、更改端口

config/index.js目录下修改vue项目运行端口

2、GET请求

2.1、导入axios

在登录的vue文件里面导入我们需要的axios。

import axios from 'axios'

2.2、编写get请求

测试的时候记得开启你的项目

//提交事件doSubmit() {//设置登录访问地址let url = "http://localhost:8080/ssm/user/userLogin";// 使用json格式进行传值let params = {username: this.username,password: this.password}
//get请求axios.get(url, {params: params}).then(r => {console.log(r);if (r.data.success) {//判断success是否为true// 为true给一个提示框this.$message({//message: '登陆成功',message: r.data.msg,type: 'success'});} else {this.$message({//message: '登陆失败',message: r.data.msg,type: 'warning'});}}).catch(e => {// console.log(e);});}

3、POST请求

3.1、get、post的区别

GET 请求和 POST 请求是两种常见的 HTTP 请求方法,它们的区别:

  1. 数据传输方式:GET 请求通过 URL 参数传输数据,而 POST 请求通过请求体传输数据。GET 请求的数据会附加在 URL 的末尾,可见于 URL 地址栏而 POST 请求的数据则被放置在请求体中,不会在 URL 中暴露
  2. 数据长度限制:由于 GET 请求的数据附加在 URL 中,URL 的长度有限制,一般约为 2048 个字符,超过该限制会导致 URL 过长,而 POST 请求则没有明确的数据长度限制。
  3. 安全性:GET 请求的参数以明文形式附加在 URL 上,因此不适合传输敏感信息,而 POST 请求的数据放置在请求体中,相对而言更安全。
  4. 缓存:GET 请求可以被浏览器缓存下来,可以被重复使用,而 POST 请求对浏览器不可缓存,每次都需要重新发送请求。
  5. 特殊字符处理:GET 请求会对特殊字符进行 URL 编码,如空格会被替换为 "%20",而 POST 请求不会对特殊字符进行编码。
  6. 幂等性:GET 请求是幂等的,即多次相同的 GET 请求不会对服务器产生副作用,而 POST 请求不具有幂等性,每次 POST 请求都可能有副作用,如创建资源或修改数据。

3.2、导入qs

如上面的请求一样,怎么导入axios的,我们照样导入qs。

import qs from 'qs'

3.3、编写post请求

唯一和get请求不一样的是

  • get:axios.get(url, {params: params}).then(r => {}).catch(e => {});
  • post:axios.get(url,qs.stringify(params)).then(r => {}).catch(e => {});
//提交事件doSubmit() {//设置登录访问地址let url = "http://localhost:8080/ssm/user/userLogin";// 使用json格式进行传值let params = {username: this.username,password: this.password}
//post请求axios.post(url, qs.stringify(params)).then(r => {console.log(r);if (r.data.success) {//判断success是否为true// 为true给一个提示框this.$message({//message: '登陆成功',message: r.data.msg,type: 'success'});} else {this.$message({//message: '登陆失败',message: r.data.msg,type: 'warning'});}}).catch(e => {// console.log(e);});}

3.4、优化处理

3.4.1、下载安装vue-axios

在CMD命令窗口进行下载vue-axios。

3.4.2、写入api模块添加全局配置

在src目录下新建api文件夹,在下面建立两个文件action.jshttp.js

3.4.2.1、action.js
/*** 文件接口地址定义文件* 对后台请求的地址的封装,URL格式如下:* 模块名_实体名_操作*/
export default {'SERVER': 'http://localhost:8080/ssm', //服务器访问地址'SYSTEM_USER_DOLOGIN': '/user/userLogin', //登陆请求'SYSTEM_USER_DOREG': '/user/userRegister', //注册请求'getFullPath': k => { //获得请求的完整地址,用于mockjs测试时使用return this.SERVER + this[k];}
}
3.4.2.2、http.js
/*** vue项目对axios的全局配置*/
import axios from 'axios'
import qs from 'qs'//引入action模块,并添加至axios的类属性urls上
import action from '@/api/action'
axios.urls = action// axios默认配置
axios.defaults.timeout = 10000; // 超时时间
// axios.defaults.baseURL = 'http://localhost:8080/j2ee15'; // 默认地址
axios.defaults.baseURL = action.SERVER;//整理数据
// 只适用于 POST,PUT,PATCH,transformRequest` 允许在向服务器发送前,修改请求数据
axios.defaults.transformRequest = function(data) {data = qs.stringify(data);return data;
};// 请求拦截器
axios.interceptors.request.use(function(config) {return config;
}, function(error) {return Promise.reject(error);
});// 响应拦截器
axios.interceptors.response.use(function(response) {return response;
}, function(error) {return Promise.reject(error);
});export default axios;
3.4.3、main.js配置vue-axios

main.js文件中引入api模块和vue-axios模块

import axios from '@/api/http'                 
import VueAxios from 'vue-axios' Vue.use(VueAxios,axios)

3.4.3、使用封装后的axios发送请求

Login.vue组件中移除导入的axios和qs模块

import axios from 'axios'
import qs from 'qs'
3.4.4、修改后的提交事件
doSubmit() {//设置登录访问地址let url = this.axios.urls.SYSTEM_USER_DOLOGIN;// 使用json格式进行传值let params = {username: this.username,password: this.password}this.axios.post(url, params).then(r => {console.log(r);if (r.data.success) {//判断success是否为true// 为true给一个提示框this.$message({message: r.data.msg,type: 'success'});} else {this.$message({message: r.data.msg,type: 'warning'});}}).catch(e => {});}

4、注册功能实现

4.1、页面实现

当然可以根据自己的数据库和自己的需求来定义自己的页面

<template><div class="Register"><el-form class="login-container"><h1 class="title">用户注册</h1><el-form-item label=""><el-input type="text" v-model="username" placeholder="输入账号" autocomplete="off"></el-input></el-form-item><el-form-item label=""><el-input type="password" v-model="password" placeholder="输入密码" show-password autocomplete="off"></el-input></el-form-item><el-form-item label="账号名称" label-width="80px" style="margin-left: 5px;" prop="name"><el-input v-model="realname"></el-input></el-form-item><el-form-item label="性别" style="margin-left: 20px;"><el-radio-group v-model="sex"><el-radio label="1">男</el-radio><el-radio label="2">女</el-radio><el-radio label="3">其他</el-radio></el-radio-group></el-form-item><el-form-item label="身 份 证" label-width="80px" style="margin-left: 0px;" prop="name"><el-input v-model="idcard"></el-input></el-form-item><el-input type="textarea" :rows="2" placeholder="请输入地址" v-model="address"></el-input><el-form-item style="margin-top: 30px;"><el-button type="primary" style="width:100%;"@click="Register()">注&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;册</el-button></el-form-item><el-row style="text-align: center;margin-top:-10px"><el-link type="primary">忘记密码</el-link><el-link type="primary" @click="Login()">用户登入</el-link></el-row></el-form></div>
</template><script>
export default {name: 'Register',data() {return {username: "",password: "",realname: '',sex: 0,idcard: '',address: '',msg: '嗨!嗨!嗨!',rules: {realname: [{required: true,message: '请输入账号名称',trigger: 'blur'},{min: 3,max: 18,message: '长度在 3 到 18 个字符',trigger: 'blur'}]}}},methods: {Login() {this.$router.push('/Login');},Register() {let params = {username: this.username,password: this.password,realname: this.realname,sex: this.sex,idcard: this.idcard,address: this.address};//定义后端都请求地址var url = this.axios.urls.SYSTEM_USER_DOREG;console.log(params);console.log(url);//以下是post请求及整合资源//通过qs中的stringify方法进行格式转换//注意数据是保存到json对象的params属性this.axios.post(url, params).then(r => {console.log(r);//如果携带的参数数据跟后端数据对应正确,说明登入成功,提示if (r.data.success) {this.$message({showClose: true,message: r.data.msg,type: 'success'});//注册完成后自动进入登入界面this.$router.push('/Login');} else {//如果携带的参数数据跟后端数据对应错误,说明登入失败,提示this.$message.error(r.data.msg);}}).catch(e => {console.log(e);});}}
}
</script><style scoped>
.login-wrap {padding-top: 30px;box-sizing: border-box;width: 100%;height: 100%;background-image: url();background-repeat: no-repeat;background-position: center right;background-size: 100%;
}.login-container {border-radius: 10px;margin: 0px auto;width: 350px;padding: 30px 35px 15px 35px;background: #fff;border: 1px solid #eaeaea;text-align: left;box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.1);
}.title {margin: 0px auto 40px auto;text-align: center;color: #505458;
}
</style>

4.2、定义接口、接口实现类

接口

int insertSelective(User record);

接口实现

    @Overridepublic int insertSelective(User record) {return userMapper.insertSelective(record);}

4.3、Controller层

在Controller编写方法,需要一定springmvc的基础

 @RequestMapping("/userRegister")@ResponseBodypublic JsonResponseBody<?> userRegister(UserVo userVo, HttpServletResponse response) {//状态新注册默认为0userVo.setStatus("0");//因为ID为String类型需要手动设置,当然可以根据自己的需要改为Int类型userVo.setId("6");int i = userService.insertSelective(userVo);if (i > 0) {return new JsonResponseBody<>("用户注册完成!快去登入吧!", true, 0, null);} else {return new JsonResponseBody<>("用户注册失败!重新输入。", false, 0, null);}}

4.4、测试

三、跨域

1、什么是跨域问题

        跨域问题(Cross-Origin Resource Sharing,CORS)指的是在浏览器端,由于安全策略限制,不同源(域/协议/端口)之间的网页(或者Ajax请求)无法直接进行交互或访问对方的资源。同源策略是浏览器的一种安全机制,用于保护用户信息和防止恶意攻击。

        同源策略要求网页只能与相同源的资源进行交互,源(Origin)由协议、域名和端口号组成。当源不一致时,浏览器会阻止跨域的请求。例如,一个网页在域A中运行,试图通过JavaScript向域B发送AJAX请求,此时就会触发跨域问题。

2、解决跨域问题

在你的项目里编写跨域过滤器CorsFilter2

package com.zking.ssm.util;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;/*** 配置tomcat允许跨域访问* * @author Administrator**/
public class CorsFilter2 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;// Access-Control-Allow-Origin就是我们需要设置的域名// Access-Control-Allow-Headers跨域允许包含的头。// Access-Control-Allow-Methods是允许的请求方式httpResponse.setHeader("Access-Control-Allow-Origin", "*");// *,任何域名httpResponse.setHeader("Access-Control-Allow-Headers", "responseType,Origin, X-Requested-With, Content-Type, Accept");httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");//允许客户端处理一个新的响应头jwt//httpResponse.setHeader("Access-Control-Expose-Headers", "jwt,Content-Disposition");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}
}

在web.xml里面添加过滤器的配置,然后就能解决我的跨域问题了。

  <!--CrosFilter跨域过滤器--><filter><filter-name>corsFilter</filter-name><filter-class>com.zking.ssm.util.CorsFilter2</filter-class></filter><filter-mapping><filter-name>corsFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

我的分享就到这里,欢迎各位大佬在评论区讨论!!!

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

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

相关文章

原生HTML实现marquee向上滚动效果

实现原理&#xff1a;借助CSS3中animation动画以及原生JS克隆API <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /…

Northstar 量化平台

基于 B/S 架构、可替代付费商业软件的一站式量化交易平台。具备历史回放、策略研发、模拟交易、实盘交易等功能。兼顾全自动与半自动的使用场景。 已对接国内期货股票、外盘美股港股。 面向程序员的量化交易软件&#xff0c;用于期货、股票、外汇、炒币等多种交易场景&#xff…

OpenCV中的HoughLines函数和HoughLinesP函数到底有什么区别?

一、简述 基于OpenCV进行直线检测可以使用HoughLines和HoughLinesP函数完成的。这两个函数之间的唯一区别在于,第一个函数使用标准霍夫变换,第二个函数使用概率霍夫变换(因此名称为 P)。概率版本之所以如此,是因为它仅分析点的子集并估计这些点都属于同一条线的概率。此实…

php文件上传功能(文件上传)

实现文件上传是Web开发中常用的功能之一&#xff0c;而PHP也是支持文件上传的。那么&#xff0c;下面我们就来介绍一下常用的PHP实现文件上传的方法。 使用HTML表单实现文件上传 HTML表单是Web开发中最基本的元素之一&#xff0c;它可以接收用户输入的数据&#xff0c;并通过…

论文阅读_大语言模型_Llama2

英文名称: Llama 2: Open Foundation and Fine-Tuned Chat Models 中文名称: Llama 2&#xff1a;开源的基础模型和微调的聊天模型 文章: http://arxiv.org/abs/2307.09288 代码: https://github.com/facebookresearch/llama 作者: Hugo Touvron 日期: 2023-07-19 引用次数: 11…

C语言数组和指针笔试题(四)(一定要看)

目录 二维数组例题一例题二例题三例题四例题五例题六例题七例题八例题九例题十例题十一 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412;个人主页 &#x1f978;&#x1f978;&#x1f978;C语言 &#x1f43f;️…

SWC 流程

一个arxml 存储SWC &#xff08;可以存多个&#xff0c;也可以一个arxml存一个SWC&#xff09;一个arxml 存储 composition &#xff08;只能存一个&#xff09;一个arxml 存储 system description (通过import dbc自动生成system) 存储SWC和composition的arxml文件分开&#…

如何用好免费的ChatGPT

如何用好免费的ChatGPT 前言ChatGPT使用入口在线体验地址&#xff1a;点我体验 ChatGPT介绍ChatGPT初级使用技巧初级使用技巧&#xff1a;清晰明了的问题表达 ChatGPT中级使用语法中级使用语法&#xff1a;具体化问题并提供背景信息 ChatGPT高级使用高级使用&#xff1a;追问、…

安防监控系统/视频云存储/视频监控平台EasyCVR无法级联上级平台,该如何解决?

安防视频监控系统EasyCVR平台能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也…

Linux三大搜索指令的区别

find&#xff1a;可以在指定的路径下进行文件的搜索 —— 真的在磁盘文件中查找 例如find /usr/bin/ -name ls which 可以在指令路径下&#xff0c;/usr/bin,搜索指令文件 例如&#xff1a;which ls whereis:在系统特定的路径下查找&#xff0c;既可以找到可执行程序&#xff…

设计模式之观察者(发布订阅)模式

观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己 class Program{static void Main(string[] args){ConcreteSubject concreteSu…

字符串函数

目录 一、求字符串长度 strlen 用法&#xff1a; 注意&#xff1a; 用例&#xff1a; 二、长度不受限制的字符串函数 strcpy 用法&#xff1a; 注意&#xff1a; 用例: strcat 用法&#xff1a; 注意&#xff1a; 用例&#xff1a; strcmp 用法&#xff1a; 三…

Vue系列(三)之 基础语法下篇【事件处理,表单综合案例,组件通信】

一. 事件处理 在 Vue.js 中&#xff0c;v-on 指令被用于监听 DOM 事件&#xff0c;并在事件触发时执行相应的方法&#xff0c;这些方法就是事件处理器。v-on 指令有简写形式 &#xff0c;例如 click"handleClick" 会监听点击事件并执行 handleClick 方法。 事件处理…

1小时掌握Python操作Mysql数据库之pymysql模块技术

大家好&#xff0c;我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战 近日锋哥又卷了一波课程&#xff0c;Python操作Mysql数据库的pymysql技术&#xff0c;文字版视频版。1小时掌握。 视频版教程 1小时掌握Python操作Mysql数据库之pymysql模块技术 文字版…

RHCSA_Linux 从命令行管理文件

目录 一、文件命令规范&#xff1a; 二、创建链接文件 1、创建软链接文件 2、创建硬链接文件 三、目录操作命令 1、创建目录 -- mkdir 2、统计目录及文件的空间占用情况 -- du 3、删除目录文件 四、创建、删除普通文件 1、创建普通文件 2、删除普通文件 五、数据流和…

golang实现远程控制主机

文章目录 ssh原理使用golang远程下发命令使用golang远程传输文件 ssh原理 说到ssh原理个人觉得解释最全的一张图是这张华为画的 Connection establishment 这一步就是建立tcp连接 version negotiation 这一步是ssh客户端(连接者)和被ssh服务端(连接者)进行协议的交换&#xf…

Redis桌面管理工具Redis Desktop Manager mac中文版功能特色

Redis Desktop Manager for Mac是一款实用的Redis可视化工具。RDM支持SSL / TLS加密&#xff0c;SSH隧道&#xff0c;基于SSH隧道的TLS&#xff0c;为您提供了一个易于使用的GUI&#xff0c;可以访问您的Redis数据库并执行一些基本操作&#xff1a;将键视为树&#xff0c;CRUD键…

Springboot整合分页插件pagehelper

首先需要有一定的springbootmybatis的基础&#xff0c;才能使用顺畅 项目结构如下 引入依赖&#xff0c;springboot版本选的是2.7.16版本&#xff0c;jdk选的17&#xff0c; <!--分页插件--> <dependency><groupId>com.github.pagehelper</groupId><…

静态通讯录

今天我们分享一下静态通讯录详细解释和代码&#xff0c;之前分享过的只是通讯录的代码&#xff0c;但是我们没有进行讲解和解释&#xff0c;今天我们一边分享它的代码一边解释原因&#xff0c;让大家可以手撕通讯录。现在开始我们的学习吧。 首先我们应该要有三个文件&#xf…

java面试题-jvm基础知识

1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&a…