【C++】9.web应用:oatpp-web框架入门

2023-05-16

说到web开发,大家肯定会想到JS、Python,甚至Java,但应该不会想到C++。

用C++开发web也不是不行,这不,oatpp就是一个轻量、跨平台、高性能的web框架。

文章目录

    • 1. oatpp介绍
    • 2. 环境搭建
    • 3. 示例程序

1. oatpp介绍

官网:https://oatpp.io/
文档:https://oatpp.io/docs/start
github地址:https://github.com/oatpp/oatpp

oatpp可在Linux和Windows上通用,无需其他依赖。

在这里插入图片描述

2. 环境搭建

编译安装:

下载源码:
git clone https://github.com/oatpp/oatpp.git

编译:
cd oatpp
mkdir build && cd build
cmake ..
sudo make && sudo make install

在这里插入图片描述

3. 示例程序

运行一个基于oatpp框架的示例程序(响应hello world):

创建oatpp_demo目录,并创建CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(helloworld)
 
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp handler.h)
 
# 查找 oatpp 依赖
find_package(oatpp REQUIRED)
 
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
 
# 将目标文件与库文件进行链接
target_link_libraries(${PROJECT_NAME} oatpp::oatpp)

头文件handler.h,实现响应HttpRequestHandler:

// handler.h
#ifndef HANDLER_H
#define HANDLER_H
 
#include "oatpp/web/server/HttpRequestHandler.hpp"
 
#define O_UNUSED(x) (void)x;
 
// 自定义请求处理程序
class Handler : public oatpp::web::server::HttpRequestHandler
{
public:
    // 处理传入的请求,并返回响应
    std::shared_ptr<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest>& request) override {
        O_UNUSED(request);
 
        return ResponseFactory::createResponse(Status::CODE_200, "Hello, World! This is oatpp_demo!");
    }
};
 
#endif // HANDLER_H

主程序main.cpp,提供路由Router请求:

// main.cpp
#include "oatpp/web/server/HttpConnectionHandler.hpp"
#include "oatpp/network/tcp/server/ConnectionProvider.hpp"
#include "oatpp/network/Server.hpp"
#include "handler.h"
 
void run()
{
    // 为 HTTP 请求创建路由器
    auto router = oatpp::web::server::HttpRouter::createShared();
 
    // 路由 GET - "/hello" 请求到处理程序
    router->route("GET", "/hello", std::make_shared<Handler>());
 
    // 创建 HTTP 连接处理程序
    auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);
 
    // 创建 TCP 连接提供者
    auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost", 8080, oatpp::network::Address::IP_4});
 
    // 创建服务器,它接受提供的 TCP 连接并将其传递给 HTTP 连接处理程序
    oatpp::network::Server server(connectionProvider, connectionHandler);
 
    // 打印服务器端口
    OATPP_LOGI("MyApp", "Server running on port %s", connectionProvider->getProperty("port").getData());
 
    // 运行服务器
    server.run();
}
 
int main()
{
    // 初始化 oatpp 环境
    oatpp::base::Environment::init();
 
    // 运行应用
    run();
 
    // 销毁 oatpp 环境
    oatpp::base::Environment::destroy();
 
    return 0;
}

cmake工程编译:

mkdir build && cd build
cmake ..
make

然后在浏览器打开:http://127.0.0.1:8080/hello

在这里插入图片描述

以上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】9.web应用:oatpp-web框架入门 的相关文章

  • 使用“邮递员”chrome 应用程序的肥皂请求正文

    假日网络服务 的肥皂请求正文会是什么样子 http www holidaywebservice com HolidayService v2 HolidayService2 asmx wsdl http www holidaywebservi
  • Firebase Auth - 最近登录多长时间

    我有一个个人资料选项卡 用户可以在其中按编辑并编辑他们的个人资料 我只想在必要时才需要他们的密码 所以想知道用户登录的时间是多少毫秒 这使得它不是最近登录 其中firebase会抛出错误 auth requires recent login
  • MVC4更新部分视图

    我正在开发一个简单的 MVC 应用程序 我有主视图 部分视图和控制器 这是我的主要视图 model partitalViewTest Models Qset div class transbox style height 1 Html Pa
  • Chrome:网络元素自动移动

    我正在开发一个网络项目 在过去的两周里 我正在进行学期考试 所以我要休息一下 现在 既然他们已经结束了 我又继续我的工作了 但我发现我的一些Web 元素 如按钮 span 在 Chrome 上移动了一些像素 在 IE 和 Mozilla 上
  • VBA - 如何从网站下载.xls并将数据放入Excel文件

    我设法使用 VBA 达到准备从网络下载 Excel 文件的程度 但我无法弄清楚如何实际下载该文件并将其内容放入我正在使用的 Excel 文件中 有什么建议么 谢谢 这是到目前为止的代码 Sub GetData Dim IE As Inter
  • Azure Web 角色中的网站项目

    我正在研究一个新的 ASP Net 项目 我们希望将其托管在 Windows Azure Web 角色中 该项目的技术要求之一是利用 ASP Net 的完整预编译选项 不可更新 单页程序集 Web Site项目模型 与 ASP Net 相反
  • CSS3 与 JavaScript

    所以我试图在网页上创建一个动画 并试图找到一种使用 CSS3 来实现它的方法 但我对如何做到这一点感到非常困惑 我需要发生的是 当用户单击链接元素时 我希望 div 展开并填充特定于所单击的链接元素的内容 例如 当用户单击标题为 About
  • wix 安装程序/创建网站并分配新的或现有的 Web 应用程序池

    我尝试使用 wix 安装创建一个新网站 没关系 没有问题 但我无法将新的或现有的网络应用程序池分配给新网站 iis website 标记不包含 WebAppPool 属性 我如何将网络应用程序池分配给网站 你可以在下面看到我的代码 感谢您的
  • 确定网站的唯一访问者

    我正在创建一个 django 网站 使用 Apache2 作为服务器 我需要一种方法来以完整的证据方式确定我的网站 特别是每个页面 的唯一访问者数量 不幸的是 用户会有很大的动机去尝试 玩弄 跟踪系统 所以我正在努力证明这一点 有什么办法可
  • 如何修复/解决 java.lang.reflect.InitationTargetException

    我有一个关于一个特别烦人的错误的问题 我一直无法弄清楚 更不用说克服了 每当我尝试在网站上运行 Java 小程序 Applet 或 JApplet 时 都会弹出此错误 java lang reflect InvocationTargetEx
  • 如果谷歌的主页如此之小,为什么源代码只有数百行代码? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 代码被缩小了 但重新格式化后只有几百行代码 我想象这样一个最小的页面也有最少的代码 源代码这么长 Google 到底在做什么 我可以看到很多都是
  • 在 Ruby 中创建带有静态页面的博客的最佳方法

    我刚刚访问了静态网站生成 http www ruby toolbox com categories static website generation html on 红宝石工具箱 http www ruby toolbox com 我不知
  • Angular 2 RC 4“(SystemJS)无法解析[对象位置]的所有参数:”在 IE 11 中

    我的 Web 应用程序在 Chrome Firefox 和 Edge 中运行良好 但在 IE 11 中当然不行 旧版本的 IE 可能也没有 这是一个使用 Angular Cli 生成应用程序的最小应用程序 完整错误 EXCEPTION Ca
  • 如何对基于 HTML5-JavaScript 的视频播放器进行快照?

    实际上 我有一个带有 JavaScript 函数的 HTML5 页面 可以让我播放 wmv 视频文件 我需要在视频播放时 有暂停或没有暂停 拍摄快照并以任何图像格式 JPG 或 BMP 保存 任何帮助将不胜感激 谢谢
  • 使用脚本从网站中提取电子邮件地址

    给定一个网站 我想知道以编程方式和 或使用脚本的最佳程序是什么 以纯文本形式提取每个页面上存在的所有电子邮件地址 电子邮件受保护 cdn cgi l email protection从该链接和下面的所有站点 递归或直到某个固定深度 使用 s
  • 获取url,给定的url重定向到

    我从 rss 链接中挖掘数据并获得一堆网址 例如 http feedproxy google com r electricpig 3 qoF8XbocUbE http feedproxy google com r electricpig 3
  • 可靠的在线手册复制工具

    我经常需要在没有互联网的情况下开发项目 不幸的是 越来越多的程序不再有离线手册 在本地复制在线帮助的最佳方法是什么 HTTrack 网站复制器经常失败 哪个 Windows 工具最可靠 感谢你的建议 如果您有使用 HTTrack Websi
  • Spring:自定义验证器未被调用

    我正在查看有关 Spring 自定义验证器的其他问题 但不幸的是我无法用建议的答案解决我的问题 我的问题如下 我有一个实体 帐户 并且创建了一个自定义验证器 AccountValidator 我在控制器 RegisterController
  • 如何从 pl/sql 包运行 http Web 服务请求

    我开发了一个新的程序来调用 Web 服务 但当我运行它时 它显示 Oracle 适配器错误 您能指导我如何解决此错误吗 下面的代码有问题吗 Formatted on 17 07 2014 16 49 02 QP5 v5 185 11230
  • 缺少带有 {:locale=>[:en], :formats=>[:html], 的模板布局/邮件程序

    我正在关注 Michael harlt Rails 教程 但出现此错误 缺少带有 locale gt en formats gt html variants gt handlers gt raw erb html builder 的模板布局

随机推荐

  • 使用Galileo SDK跨局域网遥控机器人

    原链接 GalileoSDK是由我们开发的机器人导航系统SDK 通过SDK用户能够方便的操控机器人 现在小强用户已经可以免费体验到SDK的功能了 SDK内部集成了物联网连接功能 设置完成后用户能够通过SDK跨局域网遥控和获取机器人状态 下面
  • zcu102网口不通

    新建工程采用的板子默认配置 xff0c 启动后执行命令 xff1b dmesg grep ethernet 1 545671 macb ff0e0000 ethernet Not enabling partial store and for
  • zcu102开发板实现 虚拟jtag

    开发板zcu102 xff1b petalinux2020 1 需要自备一个FMC转JTAG的子卡 xff1b 此篇记录自己实现的过程 xff0c 以备查询 xff1b 1 整个流程连接 xff1a https xilinx wiki at
  • 查看ubuntu系统的版本信息、内存大小及使用、磁盘大小等常用命令

    一 ubuntu系统的版本信息 xff1a 方法 步骤 xff1a 1 进入Ubuntu系统 xff0c 点击左侧图标栏中的黑框 xff0c 打开终端 xff1b 2 左侧没有终端图标的情况 xff0c 可以搜索按钮 图中左侧第一个 xff
  • CentOS7 无法进入图形界面 黑屏

    问题现象描述 xff1a CentOS有界面的系统 xff0c 开机后进入界面 xff0c 在开机界面背景为 7 的地方卡住 xff0c 然后界面就黑掉 解决办法 xff1a 1 开机后 xff0c 按下 ctrl 43 alt 43 F2
  • 重装win10提示“Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装...”

    背景 xff1a 因为GHOST系统会捆绑大量软件 xff0c 主页被强制修改 xff0c 并且系统还可能存在删减的可能性 xff0c 所以越来越多的用户考虑安装官方MSDN原版系统 xff0c 但是呢 xff0c 近期总是有用户称自己在安
  • 在petalinux下提示:Failed to menu config project component....

    现象 xff1a 在petalinux下配置硬件描述语言时 xff0c 提示错误 xff1a 命令 xff1a petalinux config get hw description 61 hdf path 错误提示 xff1a ERROR
  • petalinux下修改系统空间笔记

    该文档是自己记录的笔记 xff0c 方便后面自己查看 在petalinux设置系统空间中需要注意的点 xff01 1 在menuconfig界面下设置系统空间为了在内核启动输出显示 xff1b Subsystem AUTO Hardware
  • PetaLinux 去除用户登陆 (Login into target without pass word)

    PetaLinux 自动登录登陆 1 初始化 PetaLinux 运行环境 xff1a source PetaLinux安装目录 settings sh 2 更改 PetaLinux 配置 xff1a 1 cd 到项目工程目录下 xff1b
  • PetaLinux 使用外部代码 (u-boot)

    背景 xff1a 在petalinux编译工程时 xff0c 我们可能有修改u boot源码的需求 xff0c 这时就需要我们使用外部的代码进行编译 实现步骤 xff1a 在配置前 xff0c 请确认我们已经在github上把对应的uboo
  • 异常的抛出和处理

    自定义输出异常 package error import java util ArrayList public class Exception public static void main String args TODO Auto ge
  • 在ROS中使用UDP进行通信

    原链接 ROS的网络通信提供了两种方式 xff0c 一种是TCP协议 xff0c 一种是UDP协议 默认采用TCP进行通信 但是在实际的WIFI网络使用中发现用户经常反馈客户端和机器人连接中断且无法重新建立连接 在ROS wiki中官方也有
  • 网络编程TCP/IP和UDP以及HTTP协议

    OSI的七层模型和TCP IP的四层模型 TCP IP协议是从OSI的七层模型中简化出来的 四层模型的详图 什么是HTTP协议 HTTP称为 超文本传输协议 是一种基于应用层的通信协议 xff0c 它允许将超文本标记语言 HTML 文档从W
  • 网络字节序之大小端(字节序与比特序)

    引言 xff1a 最近在网上看了很多博客 xff0c 想要深入了解大小端问题 xff0c 主要是做毕设时 xff0c RTP包协议的结构体定义有两种方式 xff0c 即大端和小端 但是一些博客并没有讲到理解大小端的本质问题 xff0c 在这
  • C++的编译流程

    C C 43 43 的编译流程 编译流程分为四个阶段 xff1a 预处理 编译 汇编 链接 以Linux系统下g 43 43 编译为例 xff1a 通过g 43 43 的选项可以查看过程中的每一步 预处理 xff1a 处理一些 号定义的命令
  • 【Autoware规控】Lattice规划节点

    文章目录 1 Lattice规划介绍2 相关代码 1 Lattice规划介绍 Lattice Planner 是一种基于栅格地图的规划算法 xff0c 通过搜索和优化实现路径规划的目的 Lattice Planner 的核心思想是将路径规划
  • 【Autoware规控】OpenPlanner规划节点

    文章目录 1 OpenPlanner介绍2 相关代码 1 OpenPlanner介绍 OpenPlanner是Autoware种使用的一种运动规划算法 xff0c 通过对全局路径采样后生成一系列的候选路径 xff0c 结合矢量地图 传感器结
  • 【C++】8.高效编程:Effective C++学习

    Effective C 43 43 改变程序与设计的55个具体做法 文章目录 1 将C 43 43 视为federation of languages xff08 语言联合体 xff09 2 用consts enums 和 inlines取
  • 【Qt web】内嵌CEF制作浏览器

    文章目录 1 CEF介绍2 环境配置3 示例程序 1 CEF介绍 Qt自带QWebEngine模块 xff0c 可以快速实现浏览器 xff0c 但在实际使用中 xff0c 某些AMD显卡电脑运行使用了QWebEngine的qt软件 xff0
  • 【C++】9.web应用:oatpp-web框架入门

    说到web开发 xff0c 大家肯定会想到JS Python xff0c 甚至Java xff0c 但应该不会想到C 43 43 用C 43 43 开发web也不是不行 xff0c 这不 xff0c oatpp就是一个轻量 跨平台 高性能的