欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

超级课表

发布时间:2024/3/13 编程问答 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 超级课表 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

项目整体介绍

项目功能:

  • 注册用户
    • 注册用户需要提供学校,专业,姓名
  • 登录用户
    • 登录用户需要提供之前注册的学校,专业,姓名
  • 查询课表
    • 查询课表需要输入学校,专业,班级(班级中包括了年级,例:151就是15级1班)

项目模块:

  • 1.HTTP服务器框架
  • 2.业务实现
    • 1.爬学校的网站
    • 2.数据库操作
    • 3.页面制作

一.多线程HTTP服务器框架

1.1 读取请求并解析

1.1.1 解析首行(从socket中读取到数据按空格且切分)

  • 解析方法:切分出来的第一部分就是方法
  • 解析出URL
  • 解析URL中的path
  • 解析出query_string

1.1.2 解析heade

  • 解析出Content_Length
  • 解析出Content_Type

1.1.3 解析header

  • 请求都是表单形式所以按照表单格式解析

1.2 计算请求计算响应并写回客户端

1.2.1 处理静态页面

写一个HTML文

1.2.2 处理动态页面

根据页面输入参数不同返回不同页面使用了CGI技术
CGI技术(通用网关接口,一种协议,一种标准)
CGI技术功能: 让HTTP服务器的底层框架和上层应用解耦合
CGI技术优点:对编程语言的要求低(只要可以访问标准输入输出就可以(SQL语言不能访问标准输入输出))
CGI技术缺点:进程的频繁创建销毁效率低(进程池,FastCGI)

  • 服务器创建子进程
  • 子进程进行程序替换(替换为url_path指定的可执行程序即 CGI程序)
    • CGI程序:根据业务的具体需要,获取到用户输入的参数并进行动态页面的计算
    • 子进程是通过匿名管道+环境变量获取到用户输入的参数
    • 子进程进行重定向(把标准输入输出匿名管道的读端)
    • 子进程通过匿名管道(匿名管道的写端)把计算得到的动态HTML写会父进程
  • 父进程拿到子进程结果后拼装出一个HTTP响应
  • 把响应写回socket中

二.业务实现

2.1 爬取有用信息

2.1.1借助libcurl第三方库实现获取网页的功能

  • 输入目标是URL
  • 输出结果是html
    使用

  • 1.初始化句柄(curl_easy_init())

  • 2.设置响应如何处理
  • 3.发送请求
  • 4.清理对象
    2.2.2解析html文件

  • 解析出HTML中需要的专业,班级,课表

  • 将解析出来的结果写进数据库之中的专业,班级写入学校表
  • 将解析出来的课表写入课表中

2.2数据库操作

2.2.1 注册实现

  • 获取到用户定义的参数
  • 解析获取到的参数
  • 将获取到的参数插入数据库之中

2.2.2登录实现

  • 获取到参数(方法,query_string,body)
  • 获取到Content_Length,再从标准输入中读取body
  • 解析读取到的数据
  • 将读取到的数据拼装到查询SQL语句中
  • 执行查询语句对学校表中的数据进行查找,
    • 找到了就跳转至搜索页面
    • 找不到就跳转至注册页面

2.2.3 查询实现

  • 获取到参数(方法,query_string,body)
  • 获取到Content_Length,再从标准输入中读取body
  • 解析读取到的数据
  • 将读取到的数据拼装到查询SQL语句中
  • 执行查询语句对课表中的数据进行查找,
    • 找到了就讲课表打印出来
    • 找不到就提示用户占时没有该课表

总结

以上是生活随笔为你收集整理的超级课表的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。