c++怎么从主网页中读取子网站_如何用C++写一个网站

news/2024/5/12 11:04:32/文章来源:https://blog.csdn.net/weixin_36221082/article/details/113050356

1.前言

用各种语言写过一些网站之后,我不禁开始好奇,C++能不能写网站呢,实际上想到这个问题的时候,我就大致有了答案。

本文中我们将尝试用C++写一个简单的网站,探索一些细节性的问题,并报告用C++写网站的体验如何。

2.准备工作

无论是之前比较传统的PHP,java,还是新兴的python或Go,在运行网站项目的时候都必须依托于一个webserver。通常我们选用的是Apache的httpd,不过近年来Nginx凭借着卓越的性能和优秀的高并发也脱颖而出。本文中我们选用Apache的httpd来进行探索。

首先我们应该前往Apache官网去下载这个httpd的server。然而之前的我的机器上装过wampserver,这是一个集成了Apache httpd,mysql数据库以及PHP的一个集成环境。正巧这个wampserver中涵盖了Apache httpd,因此我们就不用再去单独下载了。

同时推荐朋友们也可以下载一个wampserver,毕竟它比单独的httpd没大多少。万一以后要写PHP,还能用的上,再怎么说,PHP也是公认的世界上最好的语言。

我们可以很轻易的从Apache的根目录下找到这个cgi-bin文件夹,下面我们只要把编译好的二进制文件放进这个文件夹内,就可以通过web访问了。abcf53ce2c92e290cf69568a1ab47d9c.png

3.编写第一个C++网站

这里的一些步骤是参考菜鸟教程的C++web编程的。然而在菜鸟教程中,C++web编程只占了一个小节,并没有过多叙述。以下是菜鸟教程给出的demo

#include 
using namespace std;

int main ()
{

cout << "Content-type:text/html\r\n\r\n";
cout << "\n";
cout << "\n";
cout << "Hello World - 第一个 CGI 程序\n";
cout << "\n";
cout << "\n";
cout << "

Hello World! 这是我的第一个 CGI 程序

\n";
cout << "\n";
cout << "\n";

return 0;
}

特别说明:Content-type:text/html\r\n\r\n的含义是要求浏览器以页面的方式进行读取,否则有可能会报错,或使浏览器下载这个index.exe。

接着我们进行编译,将编译好的可执行程序放到上面说的那个目录下。0723811dd6a376179660d1b99c9d7444.png
这时候访问浏览器localhost/cgi-bin/index.exe,可以看到如下效果,我的是Windows机器,因此编译链接之后得到exe文件。

c464ff97d7110391bff454ec373ab85b.png
发明这种技术的人将其命名为CGI(Common Gateway Interface),按照习惯,一般会将C++编译得到的可执行文件进行重命名,改为以.cgi结尾,但经过我的尝试,命名并不影响其运行,哪怕没有后缀名也可以。

4.对demo进行改进

我们发现,CGI技术就好像把C++的输出流接在了客户端的浏览器一样,只要通过cout对象就可以展示网页。但是显然,上述demo只能实现一个静态网页,且网页的维护难度也比较大。显然我们值得拥有更好的办法。我们将这个程序做如下修改:

#include 
#include
#include
using namespace std;

int main ()
{

cout << "Content-type:text/html\r\n\r\n";
fstream f("index.html");
string line;
while(getline(f,line)){
cout << line << endl;
}
f.close();

return 0;
}

用这种方法,我们可以事先写好一个index.html的页面文件,利用这个index.exe程序对我们写好的页面逐行读取并显示在客户端的浏览器上。如此一来我们只需要动态的修改页面并保存,不需要再对cpp进行编译,就可以在线的调试页面。(此处使用相对路径,故编译得到的index.exe和index.html应当一同放在cgi-bin目录下)

5.与C++后台进行交互

到此为止我们已经实现了基本的C++网站,但是还只停留在静态网站上。我们只能让C++帮我们向客户端返回一个静态的页面,但没有实现与后台交互。

这里我们简单的试验一下用C++做后台处理post请求。对于C++处理post请求来说,真可谓大道至简,只要用cin对象就可以了。

下面我们尝试用post方法将一张表单的内容发给另一个可执行文件,由另一个可执行文件将post的数据显示出来。具体细节如下

首先我们准备一个用来进行post提交的表单页面

<html lang="en"><head><meta charset="UTF-8"><title>INDEXtitle>head><body><form action="post_test.exe" method="post">
username<input type="text" name="username"><br>
password<input type="password" name="password"><br><input type="submit">form>body>html>

在表单中让用户填入用户名密码,然后提交给post_test.exe这个可执行文件。
这个post_test.exe的可执行文件,其C++代码更加简单

#include 
#include
using namespace std;

int main ()
{
cout << "Content-type:text/html\r\n\r\n";
string post_data;
cin >> post_data;
cout << post_data;
}

只需要一行cin,就可以拿到这个post请求的数据,然后再通过cout将其显示到客户端上。

将这些文件放到cgi-bin目录下,就可以运行了。32a82f4891c128afab3220de67a1e68a.gif
可以看到表单信息以字符串“username=123&password=123”的形式被post_test.exe这个程序接收到了。

6.应用

光说不练假把式,于是我们用C++网站做一个简单的行列式计算器。实际上小规模行列式用js求解效率就足够感人了,但为了突出C++的前后端交互,我们将用户的输入数据发送到后台,由C++计算并给出结果。dea6d8741b25e6cfd08bf7ed75147c1d.gif
这个页面可以通过www.fgb2019.top/cgi-bin/index进行访问,也可以点击下方阅读原文,来体验一下C++网站的独特魅力。GitHub链接放在附录中,有兴趣也可以查看。

7.缺陷

我的机器是Windows平台,起初我是在本机上进行开发,之后要部署到服务器的时候我就傻眼了——我的服务器是linux机,显然linux一般是不能直接跑exe这种可执行文件的。无奈只好又把cpp源码拷贝到服务器上,再编译得到linux上的可执行文件进行部署。此时此刻我才体会到优越的跨平台性能在某些特定场合也是非常重要的!
顺便提一下,在linux上使用G++编译,默认的并不是C++11的版本,可以通过-std指定

g++ -std=c++11 xxx.cpp -o xxx

否则在C++11下写的某些代码可能会被报错。

8.总结

总的来说,C/C++并不是非常适合网站开发。古代的程序员前辈们似乎也意识到了这一点,因此他们在C的基础上融合了许多便捷的工具,得到了PHP。同时Java等跨平台性能卓越的语言也在web开放中占据了一席之地。这里我就简单对比一下C++和我比较熟悉的PHP在开发网站上的异同。

角度C++PHP
性能卓越稍慢
开发难度很大较小
可用工具较少较多
页面可否在线调试
后台可否在线调试否,需要重新编译

9.附录

https://github.com/RadiumScriptTang/CppWebsite
http://www.fgb2019.top/cgi-bin/index

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_717105.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的大学生招聘网站系统

1.项目简介 1.1 系统研究背景 伴随着中国经济的飞速发展&#xff0c;城市化进程的加快&#xff0c;求职者队伍的不断壮大&#xff0c;传统人才招聘的弊端初露端倪。首先&#xff0c;传统人才应聘的形式是求职者和企业的负责人面对面地交流。这就需要企业和求职者提前规划自己…

Springboot+vue项目体用用品销售商城网站

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;体用用品销售商城网站当然也不能排除在外。体用用品销售商城网站是以实际运用为开发背景&#xff0c;运用软件工程原理…

Springboot+vue项目点餐平台网站

文末获取源码 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本&#xff1a;jdk1.8 本系统主要实现了管理员&#xff1a;首页、个人中心、用户管理、菜品分类管理、菜品信息管理、菜品评价管理…

Springboot+vue项目音乐网站与分享平台

文末获取源码 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本&#xff1a;jdk1.8 音乐网站与分享平台的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;首页、个人中…

Springboot+vue前后端分离的租房网站

开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本&#xff1a;jdk1.8 本系统有管理员&#xff1b;首页、个人中心、用户管理、房屋类型管理、房屋信息管理、预约看房管理、在线签约管理、租赁…

SpringBoot+vue实现前后端分离的宠物销售商城网站

开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 使用框架:springbootvue JDK版本&#xff1a;jdk1.8 本选题则旨在通过标签分类管理等方式&#xff0c;实现管理员&#xff1a;首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理…

SpringBoot+vue实现前后端分离的垃圾分类网站系统

文末获取源码 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 使用框架:springbootvue JDK版本&#xff1a;jdk1.8 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S…

SpringMVC+Vue项目旅游资源网站

末获取源码 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架ssmvue JDK版本&#xff1a;jdk1.8 前言介绍 旅游资源网站的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;首页、个人中心、用户管…

SpringMVC+Vue项目中国风音乐推介网站

末获取源码 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架ssmvue JDK版本&#xff1a;jdk1.8 前言介绍 近年来&#xff0c;随着我国经济的不断发展&#xff0c;平台的管理制度越来越多。每个音乐推介网站也都将通过计…

SpringMVC+Vue实现前后端的志愿者招募网站

末获取源码 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架ssmvue JDK版本&#xff1a;jdk1.8 前言介绍 志愿者招募的需求和管理上的不断提升&#xff0c;志愿者招募网站的潜力将无限扩大&#xff0c;志愿者招募网站在…

SpringBoot+Vue项目漫画网站

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

SpringBoot+Vue+Element-UI实现校园新闻网站

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

SSM+Vue+Element-UI实现移动电商网站

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器&am…

Java毕设项目——人才招聘网站(java+SpringBoot+Maven+Mysql+Jsp)

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SpringBoot 技术&#xff1a;Jsp JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…

SpringBoot+Vue实现前后端分离的旅游推荐网站

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

mysql5.7.18压缩包下载_【云服务器Centos7.x建站】MySQL 5.7安装、使用、错误总结

MySQL环境搭建进入本机源文件目录 cd /usr/local/src wget下载yum源的rpm包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 安装rpm包 rpm -ivh mysql57-community-release-el7-11.noarch.rpm 使用yum安装mysql-server yum install -y mysql-se…

获取php网站源码安卓,Windows下获取Android 源码的实例教程

本篇文章是对在Windows下获取Android 源码的方法进行了详细的分析介绍&#xff0c;需要的朋友参考下前言&#xff1a;略&#xff01;获取源码的原因千千万~~~1.安装GIT工具。GIT是林纳斯托瓦兹大神为了管理器Linux内核开发而创立的分布式版本控制软件。下载地址&#xff1a;cod…

一个网站只能用一个服务器吗,Web服务器只能持有一个网站吗? | MOS86

当您第一次开始学习域名&#xff0c;IP地址&#xff0c;Web服务器和网站是否适合并共同合作时&#xff0c;有时候会有点混乱或压倒一切。这一切如何顺利开展工作&#xff1f;今天今天的问题照片由Rosmarie Voegtli(Flickr)提供。问题SuperUser reader user3407319想知道网络服务…

发现一个不错的讲pixhawk(PX4)的网站

https://www.ncnynl.com/archives/201810/2628.html 这个网站似乎涉及的东西很多。

阿木实验室的一个专门教程的网站(现在知道这是P200的wiki地址)

https://amov-wiki.readthedocs.io/zh_CN/latest/docs/%E8%87%AA%E4%B8%BB%E9%A3%9E%E8%A1%8C%E4%B9%8B%E5%85%A5%E9%97%A8.html