基于Linux的C++轻量级web服务器/webserver/httpserver——MySQL数据库的使用
MySQL數據庫的使用
常見的服務器設計,其結構組成一般都是:I/O處理模塊、業務邏輯模塊、數據模塊。
我的另一個項目:chatserver聊天服務器其設計模式也是這樣:使用Muduo處理網絡I/O,編寫業務模塊代碼、數據代碼和業務代碼要能夠實現分離。
這個項目開發的http服務器支持用戶的【登陸】和【注冊】業務。為了保存用戶的登陸名稱和密碼,采用MySQL數據庫進行落地存儲。
MySQL使用介紹
這部分大家自行學習吧。簡單的使用掌握就行,對數據庫的增刪改查命令要熟悉。書籍這邊推薦《MySQL必知必會》,幾天就能學會MySQL的基礎使用
看書的同時,還可以配合牛客網的刷題網站,通過刷題加深記憶
環境配置
為了讓這個項目成功編譯,你需要提前配置好mysql的庫。
本項目需要安裝mysql-server以及對應的開發包。ubuntu環境安裝mysql-server和mysql開發包,包括mysql頭文件和動態庫文件,命令如下:
安裝完成后需要設置MySQL的登錄用戶和密碼,按下面步驟修改mysql的root用戶密碼為123456:
【step 1】tony@tony-virtual-machine:~$ sudo cat /etc/mysql/debian.cnf [client] host = localhost user = debian-sys-maint 《============== 初始的用戶名 password = Kk3TbShbFNvjvhpM 《=============== 初始的密碼 socket = /var/run/mysqld/mysqld.sock 【step 2】用上面初始的用戶名和密碼,登錄mysql server,修改root用戶的密碼,命令如下: tony@tony-virtual-machine:~$ mysql -u debian-sys-maint -pKk3TbShbFNvjvhpM 命令解釋: -u后面是上面查看的用戶名 -p后面緊跟上面查看的密碼 mysql> update mysql.user set authentication_string=password('123456') where user='root' and host='localhost'; mysql> update mysql.user set plugin="mysql_native_password"; mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> exit Bye如果用戶名和密碼無法修改成功,也可以在CSDN上找到對應的解決方法
為了能夠正確運行項目中的代碼,還需導入項目要用到的表
導入文件在:thirdparty/httpserver.sql
導入的方法請自行查詢,也是很簡單的
設計方法
對于網頁上用戶的登陸和注冊業務,從項目業務邏輯上分析的話,這個服務器需要以下的功能支持:
- 支持POST請求。用戶名和密碼會通過POST請求被傳輸到服務器上。所以,httpconnect模塊要能夠解析出POST請求中攜帶的用戶名和密碼
- 解析得到的用戶名和密碼在MySQL數據庫中進行查驗。賬號密碼正確,服務器回報登陸成功頁面;如果錯誤也需要告知客戶端。登陸和注冊業務在服務器端很好區別,通過解析URL地址能夠獲知客戶端是在登陸頁面,還是在注冊頁面發送過來的POST請求
MySQL的開發方式
與MySQL數據庫相關的代碼文件總共有三個:
include/db/database.h
include/db/user.h
include/model/usermodel.h
database.h
這個頭文件的作用是操作數據庫的,負責完成對數據庫的連接、更新、查詢操作。
連接的數據庫名稱、主機名等信息,我預先定義在了文件起始位置。如果你的數據庫設置和我的不一樣的話,請按照你的配置進行修改
// 數據庫配置信息 static std::string server = "127.0.0.1"; static std::string user = "root"; static std::string password = "123456"; static std::string dbname = "webserver";user.h
user類是一個ORM類。ORM全稱Object Relational Mapping,即對象關系映射。這個類是將我們數據庫中的user表的信息映射到類中。對于數據的操作,我們無需再去編寫原生sql,取代代之的是基于面向對象的思想去編寫類、對象、調用相應的方法等,ORM會將其轉換/映射成原生SQL然后交給database.h中的MYSQL類去執行。
usermodel.h
這個類才算是真正在數據庫中查詢user表的一個類的。
定義了兩個方法:
// 在數據庫中新增一個用戶信息 bool insert(User &usr); // 在數據庫中查找用戶信息 User query(std::string &name);insert方法會往user表中插入一個新的用戶信息(賬號名稱和密碼)。這個方法是針對注冊業務使用的
query方法在user表中查詢用戶名為name的信息,返回值是一個User對象。如果沒有找到用戶名,該User對象的成員信息都是空值。
實戰使用
具體代碼使用,請查看:src/httprequest.cpp:_getPost()
總結
以上是生活随笔為你收集整理的基于Linux的C++轻量级web服务器/webserver/httpserver——MySQL数据库的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html轮播图下面小点,jq轮播图,一组
- 下一篇: 使用transform制作书本翻页效果