目录

一、Get请求

二、Post请求

三、小结


一、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基础编程有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

一站式 AI 云服务平台

更多推荐