跟我一起学“仓颉Web”基础编程-Http请求
·
目录
一、Get请求
创建数据库
create database web_study;
use web_study;
创建数据表
CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int DEFAULT NULL,
`sex` int DEFAULT NULL,
`grade` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
);
给数据表添加数据
INSERT INTO `student` VALUES
(1,'白小黑',24,1,'研二'),
(2,'刘小辉',21,1,'大四'),
(3,'胡小静',25,0,'研三'),
(4,'漆小孟',18,0,'大一'),
(5,'林小茂',23,1,'研一');
INSERT INTO `user` VALUES
(1,'bxh','123456'),
(2,'lxh','234567'),
(3,'hxj','345678'),
(4,'qxm','456789'),
(5,'lxm','567890');
核心代码
package WebStudy
import stdx.net.http.*
import std.database.sql.*
import std.convert.*
import mariadb.cdbc.*
main(): Unit {
getRequest()
}
// 根据id获取学生信息
public func getStudentById(id: Int64): String {
// 学生信息
var studentInfo = ''
// 创建驱动
let driver = DriverManager.getDriver('mariadb').getOrThrow()
// 数据库的链接
let url = 'mariadb://127.0.0.1:3306'
// 数据库用户
let username = ('username', 'root')
// 数据库密码
let password = ('password', 'YGBG372S1')
// 需要连接数据库
let database = ('database', 'web_study')
// 启动驱动获取数据资源
let dataSource = driver.open(url, [username, password, database])
// 创建连接
let connection = dataSource.connect()
let sql = 'select * from student where id=?'
let statement = connection.prepareStatement(sql)
statement.set<Int64>(1, id)
let resultSet = statement.query()
while (resultSet.next()) {
let id = resultSet.get<Int64>(1)
let name = resultSet.get<String>(2)
let age = match (resultSet.getOrNull<Int64>(3)) {
case Some(v) => v
case None => 0
}
let sex = if(resultSet.getOrNull<Int64>(4) == 1){'男'}else{'女'}
let grade = resultSet.get<String>(5)
studentInfo = """
学生信息<br>
编号: ${id}<br>
姓名: ${name}<br>
年龄: ${age}<br>
性别: ${sex}<br>
年级: ${grade}<br>
"""
}
// 释放资源
resultSet.close()
statement.close()
connection.close()
dataSource.close()
return studentInfo
}
// Get请求
public func getRequest(): Unit {
let server: Server = ServerBuilder().addr('127.0.0.1').port(8080).build()
let studentInfo = FuncHandler{ httpContext =>
let request = httpContext.request
// 获取Form
let form = request.form
let id = Int64.parse(form.get('id') ?? '')
let info = getStudentById(id)
// 设置中文编码 UTF-8
httpContext.responseBuilder.header('Content-Type', 'text/html;charset=UTF-8')
httpContext.responseBuilder.body(info)
}
server.distributor.register('/studentInfo', studentInfo)
println('Web服务已启动...')
server.serve()
}
在浏览器访问:http://localhost:8080/studentInfo?id=1
运行结果

二、Post请求
核心代码
package WebStudy
import stdx.net.http.*
import std.database.sql.*
import mariadb.cdbc.*
main(): Unit {
postRequest()
}
// 登录
public func login(u: String, p: String): String {
var info = ''
// 创建驱动
let driver = DriverManager.getDriver('mariadb').getOrThrow()
// 数据库的链接
let url = 'mariadb://127.0.0.1:3306'
// 数据库用户
let username = ('username', 'root')
// 数据库密码
let password = ('password', 'YGBG372S1')
// 需要连接数据库
let database = ('database', 'web_study')
// 启动驱动获取数据资源
let dataSource = driver.open(url, [username, password, database])
// 创建连接
let connection = dataSource.connect()
let sql = 'select * from user where username=? and password=?'
let statement = connection.prepareStatement(sql)
statement.set<String>(1, u)
statement.set<String>(2, p)
let resultSet = statement.query()
var uname = ''
var pwd = ''
while (resultSet.next()) {
let id = resultSet.get<Int64>(1)
uname = resultSet.get<String>(2)
pwd = resultSet.get<String>(3)
}
if (u == uname && p == pwd) {
info = '登录成功, 欢迎您: ${u}!'
} else {
info = '用户名或密码错误, 登录失败!'
}
// 释放资源
resultSet.close()
statement.close()
connection.close()
dataSource.close()
return info
}
// 登录的post请求
public func postRequest() {
let server: Server = ServerBuilder().addr('127.0.0.1').port(8080).build()
let handler = FuncHandler { httpContext =>
let request = httpContext.request
// 获取Form
let form = request.form
// 用户名
let username = form.get('username') ?? ''
// 密码
let password = form.get('password') ?? ''
// 设置中文编码 UTF-8
httpContext.responseBuilder.header('Content-Type', 'text/html;charset=UTF-8')
httpContext.responseBuilder.body(login(username, password))
}
server.distributor.register('/login', handler)
println('Web服务已启动...')
server.serve()
}
Html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录表单</title>
</head>
<body>
<h2>用户登录</h2>
<!-- 登录表单 -->
<form action="http://localhost:8080/login" method="post">
<!-- 用户名输入框 -->
<div>
<label>用户名:</label>
<input type="text" name="username" required>
</div>
<br>
<!-- 密码输入框 -->
<div>
<label>密码:</label>
<input type="password" name="password" required>
</div>
<br>
<!-- 提交按钮 -->
<input type="submit" value="登录">
</form>
</body>
</html>
运行结果




三、小结
本章为大家详细的介绍了Http请求的内容,下一章为大家介绍Web架构设计的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉Web基础编程有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!
更多推荐



所有评论(0)