Web框架业务层设计与实现
Web框架业务层设计与实现
模块概述
这是一个轻量级但功能完整的Web MVC框架,支持常见的Web应用功能,包括路由、控制器、请求处理、响应生成等。通过反射机制实现了优雅的控制器注册和方法调用。
类结构设计
1. Request类
处理HTTP请求:1
2
3
4
5
6
7
8
9class Request {
private:
string m_method; // 请求方法(GET/POST)
string m_uri; // 完整URI
string m_path; // 请求路径
string m_body; // 请求体
Json m_post; // POST数据
std::map<string, FileUpload> m_files; // 上传文件
};
2. Response类
1 | class Response { |
3. Server类
1 | class Server { |
4. 控制器示例
1 | class Form : public Controller { |
继承于Controller就实现了/Form/reply的路由注册
常见问题解答(Q&A)
Q1: 请描述该Web框架的整体架构设计和主要组件?
A1: 框架主要包含以下核心组件:
Server组件
1
2
3
4
5
6
7
8
9class Server {
void start(); // 启动服务器
void bind(const string & path, server_handler handler); // 路由绑定
string handle(const Request & req); // 请求处理
private:
std::map<string, server_handler> m_handlers; // 路由表
string m_template_folder; // 模板目录
string m_static_folder; // 静态资源目录
};请求处理流程:
- URL解析
- 路由匹配
- 控制器调用
- 响应生成
Q2: 框架如何处理文件上传功能?
A2: 主要通过以下机制实现:
FileUpload类:
1
2
3
4
5
6
7
8class FileUpload {
void parse(const char * buf, int len); // 解析上传数据
bool save(const string & filename); // 保存文件
private:
string m_name; // 表单字段名
string m_filename; // 文件名
string m_type; // 文件类型
};处理流程:
- 解析multipart/form-data
- 提取文件信息和内容
- 保存到指定目录
Q3: 框架支持哪些响应类型?如何处理不同类型的响应?
A3: 支持多种响应类型:
- Response类型枚举:
- HTML
- JSON
- JS
- CSS
- 图片(JPG/PNG/GIF)
- ICO
- 响应处理示例:
1
2
3
4
5void Response::data(Type type, const string & data) {
m_type = type;
m_data = data;
// 根据类型设置不同的Content-Type
}
Q4: 请详细描述框架的路由实现机制?
A4: 路由实现包含:
URL解析:
1
2std::vector<string> arr = String::split(String::trim(path, " /"), '/');
// 解析为控制器名和方法名路由匹配优先级:
- 显式路由绑定
- 静态资源匹配
- 控制器方法映射
- 反射调用:
1
2Object * ctrl = factory->create_class(classname);
ctrl->call(methodname, req, resp);
评论