前后端分离式项目架构流程复盘之宿舍管理系统

news2024/11/26 14:56:32

文章目录

  • 🐒个人主页
  • 🏅JavaEE系列专栏
    • 📖前言:
    • 【🎇前端】先创建Vue-cli项目(版本2.6.10,仅包含babel),请选择此项目并创建
  • 【整理简化项目模板】
    • 【🎀创建路由】
      • 打开命令行工具,进入你的项目目录,输入下面命令。并回车下载
      • 1.在src路径下创建 router 目录~创建 index.js 文件,在其中配置路由
      • 2.在🧸APP.vue中添加路由视图
      • 3.在🧸 main.js 中配置路由
    • 【🎀配置Element UI】
    • 【🏨创建组件并利用 Element UI修饰】
    • 【🎀如何使背景图片最大自适应】
    • 【🎀登录组件模板】
    • 【🎀注册组件模板】
    • 【🎇前端配置】
      • 安装ajax(异步请求)之axios---网络请求库.
      • 🎀在main.js中导入
  • 【🎀创建后端项目+数据库,先完成注册与登陆功能】
    • 1.在idea中创建一个项目,然后右键单击
    • 2.配置后端服务器tomcat
    • 3.创建处理程序,导入jar包
  • 🏨[这是需要导入的jar包下载地址---阿里云盘](https://www.aliyundrive.com/s/gox2K1pR8RL)
      • 记得配置servlet处理程序的地址,配置xml文件时,记得在标签里面写,优先配置编码过滤器EcondFilter
    • 🧸创建公共类(记得util包中定义commentResoult类)
      • 🧸可以在util包中定义JDBC的封装类(使代码更加简洁)
      • 🏅【采用json格式的打印】
        • 🪂后端借助ObjectMapper类将对象转为json格式的字符串
        • 🪂【前端发送数据时,由于axios发出的异步请求格式为json格式,利用jsonToString()方法转为默认键值对格式】
      • 🧸如果使用前端ajax的axios,后端记得使用“跨域请求声明”
  • 🎀【🐒持续更新中...】

🐒个人主页

🏅JavaEE系列专栏

📖前言:

本篇博客主要以巩固前后端分离式项目架构流程,通过开发一个宿舍管理系统为例,系统地梳理所学知识以及提高业务逻辑能力,欢迎大家来交流经验🐒

【🎇前端】先创建Vue-cli项目(版本2.6.10,仅包含babel),请选择此项目并创建

在这里插入图片描述

这个是创建完成后的样子

在这里插入图片描述

执行npm run serve命令,按回车进入浏览器,生成此页面,说明项目创建完成·在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLvKFhdA-1685517220725)(../AppData/Roaming/Typora/typora-user-images/1685279544519.png)]

【整理简化项目模板】

1.直接删掉components文件下的HelloWorld.vue组件

在这里插入图片描述

在这里插入图片描述

2.清理APP.vue默认组件内容:在这里插入图片描述

【🎀创建路由】

打开命令行工具,进入你的项目目录,输入下面命令。并回车下载

npm i vue-router@3.5.3

在这里插入图片描述在这里插入图片描述

1.在src路径下创建 router 目录~创建 index.js 文件,在其中配置路由

在这里插入图片描述

【🧸在index.js配置】

import Vue from 'vue';
import router from 'vue-router'; /* 导入路由 */
import login from '../views/login'; /* 导入其他组件--【回头得改!】 */
import content from '../components/content'; /* 导入其他组件【回头得改!】 */
Vue.use(router)


/* 定义组件路由 */
var rout = new router({
	routes: [{
			path: '/index',
			name: 'index',
			component: index
		},
		{
			path: '/content',
			component: content
		}
	]
})

//导出路由对象
export default rout;

2.在🧸APP.vue中添加路由视图

<!-- 【路由组件】显示不同组件,就像一个画布 -->
    <router-view/>

在这里插入图片描述

3.在🧸 main.js 中配置路由

在这里插入图片描述

/* 【导入路由】 */
import router from './router/index.js'
Vue.use(router);

new Vue({//【一个Vue对象】
	render: h => h(App),
	router,
}).$mount('#app')

【🎀配置Element UI】

🦓安装 Element UI

npm i element-ui -S

在这里插入图片描述
🪂在 main.js 中写入以下内容:

//【导入Element UI 并声明vue项目使用Element UI】
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

在这里插入图片描述

🦓进入 Element UI官网网站

https://element.eleme.cn/#/zh-CN
在这里插入图片描述

【🏨创建组件并利用 Element UI修饰】

1.在src路径components路径下创建组件login.vue,注意:《template》《/template》中只能有一个根标签《div》《/div》(就是可以理解为所有标签写在根标签div的里面)在这里插入图片描述
2.在index.js中导入该组件
在这里插入图片描述
3.利用 Element UI修饰
在这里插入图片描述
在这里插入图片描述

【🎀如何使背景图片最大自适应】

#divbox{
		width: 100%;
		  height: 100vh;
		  background-image: url("[图片链接]"); /*将图片路径替换为你自己的图片路径*/
		  background-size: cover; /*保持图片比例并完全覆盖元素*/
		  background-position: center center; /*将图片居中对齐*/ 
	}

在这里插入图片描述

【🎀登录组件模板】

<template>
	<div id="divbox">
		<!-- 【此图像是圆圈头像logo】 -->
		<img src="https://ts1.cn.mm.bing.net/th/id/R-C.3aeeb6d5725738095a7ad521d46ce428?rik=prLV4puYz%2btYuw&riu=http%3a%2f%2fwww.gx8899.com%2fuploads%2fallimg%2f2018021008%2fjrmgrhcgro0.jpg&ehk=Im%2fy1GA0xuqdwYNnKtzfue2b09jzjym4jjUXy7e0Seo%3d&risl=&pid=ImgRaw&r=0"
			alt="Your Image">
		<div class="login-form">
			<div id="logo">
				<span style="font-family: 'Microsoft YaHei';letter-spacing: 0.5px; font-weight: bold; font-size: 40px;">
					&nbsp;<span style="color:#4F5155"> 欢迎登录</span><span style="color:rgb(137, 204, 255) ;">宿舍管理系统</span>
				</span>
			</div>
			<el-form ref="form" :rules="rules" :model="form" label-width="80px">
				<el-form-item label="用户名" prop="account">
					<el-input v-model="form.account" class="input"></el-input>
				</el-form-item>
				<el-form-item label="密码" prop="password">
					<el-input type="password" v-model="form.password" class="input"></el-input>
				</el-form-item>
				<el-form-item>

					<el-button type="primary" @click="onSubmit('form')" style="width: 300px;">登录</el-button>
					<br />
					<span style="color: #006A5A;" @click="reg()">没有账号?点击注册</span>
				</el-form-item>
			</el-form>
		</div>


	</div>
</template>

<script>
	export default {
		data() {
			return {
				form: {
					account: '',
					password: '',
				},
				rules: {
					 account: [
					            { required: true, message: '请输入账户', trigger: 'blur' },
					            { min: 3, max: 5, message: '长度在 3 到 10 个字符~', trigger: 'blur' }
					          ],
					 password: [
					            { required: true, message: '请输入密码', trigger: 'blur' },
					            { min: 3, max: 5, message: '长度在 1 到 10 个字符~', trigger: 'blur' }
					          ],
				}
			}
		},
		methods: {
			reg() {
				alert("注册");
			},
			onSubmit(form) {//【登录】
				
					//数据向后端发送进行验证
					//$refs是一个引用
					this.$refs[form].validate((valid) => {
					  if (valid) {
					    //如果发送成功,跳转到其他组件
						//【跳转语句】
						this.$message({showClose: true,message: '恭喜你,账户正确✔',type: 'success'});
						/* this.$message({showClose: true,message: '输入的账户或密码错误~', type: 'error'});
						this.$message({showClose: true,message: '系统忙,维修人员正在抢修!',type: 'warning'}); */
					  }
					});
				}
			}
	}
</script>

<style>
	#divbox {
		width: 100%;
		height: 100vh;
		/*将🎀页面背景  图片路径替换为你自己的图片路径*/
		background-image: url("https://ts1.cn.mm.bing.net/th/id/R-C.b923d0630782b4e46dcbb2121b22bdbf?rik=l7wVr9wcUyyTzw&riu=http%3a%2f%2fpic.bizhi360.com%2fbbpic%2f68%2f768.jpg&ehk=anhoZ%2fxmeecIhRHc2n9reoQbtJ2xXrvIEx0sJbLLMiI%3d&risl=&pid=ImgRaw&r=0");
		/*保持图片比例并完全覆盖元素*/
		background-size: cover;
		background-position: center center;
		/*将图片居中对齐*/
	}

	.login-form {
		width: 442px;
		height: 400px;
		background-color: rgba(248, 242, 235, 0.5);
		;
		position: relative;
		left: 455px;
		top: 170px;


	}

	#logo {
		width: 100%;
		height: 60px;
		/* background-color: aquamarine; */
		margin-bottom: 60px;
	}

	.input {
		max-width: 300px;
	}

	img {
		border-radius: 50%;
		width: 100px;
		position: absolute;
		left: 638px;
		top: 50px;
	}
</style>

【🎀注册组件模板】

在这里插入图片描述

在这里插入图片描述

<template>
	<div id="divbox">
		<!-- 【此图像是圆圈头像logo】 -->
		<img src="https://ts1.cn.mm.bing.net/th/id/R-C.3aeeb6d5725738095a7ad521d46ce428?rik=prLV4puYz%2btYuw&riu=http%3a%2f%2fwww.gx8899.com%2fuploads%2fallimg%2f2018021008%2fjrmgrhcgro0.jpg&ehk=Im%2fy1GA0xuqdwYNnKtzfue2b09jzjym4jjUXy7e0Seo%3d&risl=&pid=ImgRaw&r=0"
			alt="Your Image">
		<div class="login-form">
			<div id="logo">
				<span style="font-family: 'Microsoft YaHei';letter-spacing: 0.5px; font-weight: bold; font-size: 40px;">
					&nbsp; 欢迎注册🐒平台系统
				</span>
			</div>
			<el-form ref="form" :rules="rules" :model="form" label-width="80px">
				<el-form-item label="用户名" prop="account">
					<el-input v-model="form.account" class="input"></el-input>
				</el-form-item>
				<el-form-item label="密码" prop="password">
					<el-input type="password" v-model="form.password" class="input" show-password></el-input>
				</el-form-item>
				<el-form-item label="确认密码" prop="password1">
					<el-input type="password" v-model="form.password1" class="input" show-password></el-input>
				</el-form-item>

				<el-form-item>
					<el-button type="primary" @click="RegAccount('form')" style="width: 300px;">注册</el-button>
					<br />
					<span style="color: #006A5A;" @click="login()">已有账号?点击返回</span>
				</el-form-item>
			</el-form>
		</div>


	</div>
</template>

<script>
	export default {
		data() {
			var validatePass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入密码'));
        } else {
          if (this.form.password1 !== '') {
            this.$refs.form.validateField('password1');
          }
          callback();
        }
      };
      var validatePass2 = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请再次输入密码'));
        } else if (value !== this.form.password) {
          callback(new Error('两次输入密码不一致!'));
        } else {
          callback();
        }
      };
			return {
				form: {
					account: '',
					password: '',
					password1: ''
				},
				rules: {
					account: [{
							required: true,
							message: '请输入注册的管理员账户!',
							trigger: 'blur'
						},
						{
							min: 3,
							max: 10,
							message: '长度在 3 到 10 个字符',
							trigger: 'blur'
						}
					],
					password: [{
							required: true,
							message: '请输入账户密码!',
							trigger: 'blur'
						},
						{
							min: 3,
							max: 10,
							message: '长度在 3 到 10 个字符',
							trigger: 'blur'
						},{ validator: validatePass, trigger: 'blur' }
					],
					password1: [{
							required: true,
							message: '请再次确认账户密码!',
							trigger: 'blur'
						},
						{
							min: 3,
							max: 10,
							message: '长度在 3 到 10 个字符',
							trigger: 'blur'
						},{ validator: validatePass2, trigger: 'blur' }
					]
				}
			}
		},
		methods: {
			login() {
				 alert("登录页面");
				//this.$router.push('/');
			},
			RegAccount(reffrom) { //【注册】
					//数据向后端发送进行验证
					//$refs是一个引用
					
				this.$refs[reffrom].validate((valid) => {
					if (valid) {
						//如果发送成功,跳转到其他组件
						//【跳转语句】
						this.$message({
							showClose: true,
							message: '恭喜你,账户已注册✔',
							type: 'success'
						});
						/* this.$message({showClose: true,message: '输入的账户或密码错误~', type: 'error'});
						this.$message({showClose: true,message: '系统忙,维修人员正在抢修!',type: 'warning'}); */
					}
				});
			}
		}
	}
</script>

<style>
	#divbox {
		width: 100%;
		height: 100vh;
		/*将🎀页面背景  图片路径替换为你自己的图片路径*/
		background-image: url("https://ts1.cn.mm.bing.net/th/id/R-C.b923d0630782b4e46dcbb2121b22bdbf?rik=l7wVr9wcUyyTzw&riu=http%3a%2f%2fpic.bizhi360.com%2fbbpic%2f68%2f768.jpg&ehk=anhoZ%2fxmeecIhRHc2n9reoQbtJ2xXrvIEx0sJbLLMiI%3d&risl=&pid=ImgRaw&r=0");
		/*保持图片比例并完全覆盖元素*/
		background-size: cover;
		background-position: center center;
		/*将图片居中对齐*/
	}

	.login-form {
		width: 442px;
		height: 400px;
		background-color: rgba(248, 242, 235, 0.5);
		;
		position: relative;
		left: 455px;
		top: 170px;


	}

	#logo {
		width: 100%;
		height: 60px;
		/* background-color: aquamarine; */
		margin-bottom: 30px;
	}

	.input {
		max-width: 300px;
	}

	img {
		border-radius: 50%;
		width: 100px;
		position: absolute;
		left: 638px;
		top: 50px;
	}
</style>

【🎇前端配置】

安装ajax(异步请求)之axios—网络请求库.

npm install axios

🎀在main.js中导入

// 导入 axios
import axios from ‘axios’;
// 设置访问后台服务器地址
/* axios.defaults.baseURL=“http://127.0.0.1:8088/TsetWebProject/”; 这里记得模仿修改后端服务器地址 */
axios.defaults.baseURL = “http://127.0.0.1:8088/Test/”;
// 将 axios 挂载到 vue 全局对象中,使用 this 可以直接访问
Vue.prototype.$http = axios;

在这里插入图片描述

🏅操作方法

this.$http.get(地址?Key=value&key2=val1).then(function(response){ }

this.$http.post(“login”,{key:“value”,key2:“val2”}).then(function(response){ }

【🎀创建后端项目+数据库,先完成注册与登陆功能】

1.在idea中创建一个项目,然后右键单击

在这里插入图片描述
在这里插入图片描述

2.配置后端服务器tomcat

在这里插入图片描述
先点+,在滑动选择Tomcat Server 服务器,最好保存ok
在这里插入图片描述
点击路径配置,选择apache-Tomcat所在文件夹进行路径配置
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3.点击运行,出现✔就算运行成功了在这里插入图片描述

3.创建处理程序,导入jar包

在这里插入图片描述

🏨这是需要导入的jar包下载地址—阿里云盘

记得配置servlet处理程序的地址,配置xml文件时,记得在标签里面写,优先配置编码过滤器EcondFilter

在这里插入图片描述
在这里插入图片描述

🧸创建公共类(记得util包中定义commentResoult类)

来规定代码传输格式:code , data , message

package util;

public class CommentResoult {
    private int code;
    private Object data;
    private String message;

    public CommentResoult(int code, Object data, String message) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    @Override
    public String toString() {
        return "CommentResoult{" +
                "code=" + code +
                ", data=" + data +
                ", message='" + message + '\'' +
                '}';
    }
}

🧸可以在util包中定义JDBC的封装类(使代码更加简洁)

在这里插入图片描述

package util;

import com.mysql.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Created by 罗铠威 on 2023/8/8 13:57
 * type: 对jdbc代码进行一个封装
 */
public class JDBCUtil {
    static {/*加载启动项*/
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    /*获取数据库连接对象*/
    public static Connection getConnection(String dataBaseName) throws SQLException {
        String url="jdbc:mysql://127.0.0.1:3306/"+dataBaseName+"?serverTimezone=Asia/Shanghai";
        return DriverManager.getConnection(url,"root","newpassword");
    }
    /*关闭连接管道*/
    public static void close(Connection connection, PreparedStatement ps) throws SQLException {
        if(connection!=null){
            connection.close();
        }
        if(ps!=null){
            ps.close();
        }
    }
}

🏅【采用json格式的打印】

🪂后端借助ObjectMapper类将对象转为json格式的字符串

在这里插入图片描述
在这里插入图片描述

🪂【前端发送数据时,由于axios发出的异步请求格式为json格式,利用jsonToString()方法转为默认键值对格式】

//将json对象序列化为键=值&键=值
	function jsonToString(jsonObj){
		console.log(jsonObj);
		var str="";
		for (var s in jsonObj) {
			str+=s+"="+jsonObj[s]+"&";
		}
		return str.substring(0,str.length-1);
	}

🧸如果使用前端ajax的axios,后端记得使用“跨域请求声明”

在这里插入图片描述

🎀【🐒持续更新中…】

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

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

相关文章

kubesphere 部署 ingress 并使用 80 端口

文章目录 创建集群网关创建应用路由访问域名使用 80 端口 创建集群网关 官方文档&#xff1a;集群网关 点击左上角的平台管理并选择集群管理 点击导航面板中集群设置下的网关设置&#xff0c;选择集群网关选项卡&#xff0c;并点击启用网关 选择 NodePort 模式&#xff0c;配…

如何在风控引擎中快速增加策略

风控策略是由规则和模型组成的、用以实现风险控制目标的集合。模型与规则相辅相成&#xff0c;相互补充&#xff0c;在不同的业务阶段彼此的侧重点不同。新业务上线期&#xff0c;数据量不足&#xff0c;策略以规则为主&#xff1b;当业务运行一段时候后&#xff0c;数据有了一…

【逗老师的PMP学习笔记】7、项目的成本管理

目录 一、规划成本管理二、估算成本1、【关键工具】数据分析-考虑质量成本 三、制定预算1、【关键输出】成本基准2、【关键输出】资金需求 四、控制成本1、【定义】成本类型2、【关键工具】挣值分析 一、规划成本管理 成本管理计划是项目管理计划的组成部分&#xff0c;描述将如…

springboot+jpa+mysql电子数码商城含后台管理源码

#开发技术 #前端 bootstarp框架 html页面 #后端技术 SpringBoot SpringMvc jpa #开发工具 eclipse或者idea jdk1.8 mysql5点几版本 maven环境 maven3.5 前端地址&#xff1a;&#xff1a;http://localhost:8080/mall 后台地址&#x…

知识图谱推荐系统研究综述

基于协同过滤的推荐是当前应用最为广泛的推荐方法,但也存在着新用户或新项目的冷启动以及数据稀疏等问题。针对上述两种方法出现的问题,研究者进一步提出了混合推荐系统。混合推荐系统结合上述两种方法的优点,可以有效缓解其中的不足,增加推荐的准确性。但是,混合推荐系统…

原型模式(C++)

定义 使用原型实例指定创建对象的种类&#xff0c;然后通过拷贝这些原型来创建新的对象。 应用场景 在软件系统中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化&#xff0c;这些对象经常面临着剧烈的变化&#xff0c;但是它们却拥有比较稳定一致的…

并发编程2:如何进行对象共享?

目录 1、对象的可见性&#xff1a;Volatile 变量 2、发布和逸出 3、线程封闭&#xff1a;ThreadLocal 4、对象的不变性 5、安全发布 5.1 - 安全发布常用的模式 5.2 - 可变对象 5.3 - 安全地共享对象 同步在用于实现原子性或者确定 “临界区(Critical Section)” 的同时…

大公司搞网络部署,关键在哪步?

下午好&#xff0c;我是老杨。 很久没有聊网络部署&#xff0c;今天就说这事儿。 要进行网络部署&#xff0c;涉及的技术点/知识有哪些&#xff1f; 最基本的&#xff0c;你需要掌握vlan划分、路由选择、出口nat处理&#xff1b;你可能还需要懂得链路聚合、mstp、vrrp、ospf…

恒运资本:沪指震荡微涨,医药、酿酒板块反弹,传媒板块活跃

8日早盘&#xff0c;沪指早盘弱势震动下探&#xff0c;临近午盘翻红&#xff1b;深成指、创业板指均止跌回升&#xff1b;两市半日成交超5000亿元&#xff0c;北向资金净卖出超40亿元。 截至午间收盘&#xff0c;沪指微涨0.01%报3269.29点&#xff0c;深成指跌0.06%&#xff0c…

案例分享:NetApp SSD 硬盘重启后全部故障

近日连续处理了几个NetApp FAS存储系统SSD磁盘重启后&#xff0c;全部故障的案例。这里是case的总结和分享&#xff0c;以后有遇到的可以参考处理。 案例1&#xff1a;客户一套FAS8020&#xff0c;带一个DS2246盘柜&#xff0c;内置24个800G X447A的磁盘&#xff0c;机房掉电后…

2023网络安全常用工具汇总(附学习资料+工具安装包)

几十年来&#xff0c;攻击方、白帽和安全从业者的工具不断演进&#xff0c;成为网络安全长河中最具技术特色的灯塔&#xff0c;并在一定程度上左右着网络安全产业发展和演进的方向&#xff0c;成为不可或缺的关键要素之一。 话不多说&#xff0c;网络安全10款常用工具如下 1、…

SQL力扣练习(十)

目录 1.体育馆的人流量(501) 示例 1 解法一&#xff08;row_number&#xff08;&#xff09;&#xff09; 解法二&#xff08;自定义变量&#xff09; 解法三 2.好友申请&#xff08;602&#xff09; 示例 解法一&#xff08;union all&#xff09; 解法二 3.销售员&…

hive修改表或者删除表时卡死问题的解决(2023-08-08)

背景&#xff1a;前阶段在做hive表的改表名时&#xff0c;总是超时&#xff0c;表是内部表&#xff0c;数据量特别大&#xff0c;无论你是修改表名还是删除表都是卡死的状态&#xff0c;怎么破&#xff1f; 终于&#xff1a;尝试出来一个新的方法 将内部表转化成外部表&#…

面试常问:tcp的三次握手和四次挥手你了解吗?

三次握手和四次挥手是各个公司常见的考点&#xff0c;一个简单的问题&#xff0c;却能看出面试者对网络协议的掌握程度&#xff0c;对问题分析与解决能力&#xff0c;以及数据流管理理解和异常情况应对能力。所以回答好一个tcp的三次握手和四次挥手的问题对于我们的面试成功与否…

【雕爷学编程】Arduino动手做(193)---移远 BC20 NB+GNSS模块13

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

保障容器应用安全的6个建议

虽然容器技术出现已经超过了十年时间&#xff0c;但由于其应用的轻量性、快捷性和灵活性&#xff0c;使得容器应用的流行程度一直保持了快速的增长趋势&#xff0c;并逐渐成为云原生环境中部署业务应用和工作负载的不二选择。在容器应用快速普及的发展背景下&#xff0c;要确保…

塔里木水系分布图

声明&#xff1a;来源网络&#xff0c;仅供学习&#xff01;

Netty自定义编码解码器

上次通信的时候用的是自带的编解码器&#xff0c;今天自己实现一下自定义的。 1、自定义一下协议 //协议类 Data public class Protocol<T> implements Serializable {private Long id System.currentTimeMillis();private short msgType;// 假设1为请求 2为响应privat…

小兔鲜项目 uniapp (1)

目录 项目架构 uni-app小兔鲜儿电商项目架构 小兔鲜儿电商课程安排 创建uni-app项目 1.通过HBuilderX创建 2.通过命令行创建 pages.json和tabBar案例 uni-app和原生小程序开发区别 用VS Code开发uni-app项目 拉取小兔鲜儿项目模板代码 基础架构–引入uni-ui组件库 操…

大模型:突破AI的边界

引言 人工智能&#xff08;AI&#xff09;在过去几年中取得了巨大的进展&#xff0c;其中大模型被认为是取得这些进展的关键因素之一。大模型具有更多的参数、更强的表达能力和更高的预测性能&#xff0c;对自然语言处理、计算机视觉和强化学习等任务产生了深远的影响。本文将探…