Qt文档阅读笔记-QtWebApp官方解析与实例(使用QtWebApp搭建HTTP服务器)

目录

 

 

官方解析

博主例子


 

官方解析

QtWepApp是一个C++的http服务器,受到了java Servlets的启发,因为是Qt写的,所以有跨平台的支持。
QtWebApp包含如下的组成部分:
             HTTP Server
             Template Engine
             File Logger
             Windows Service Installer
每一个部分都能独立的运行;

HTTP服务器以并行的线程处理请求。支持IPv4以及IPv6,持久连接,HTTPS,seesion,cookie和文件上传。

模板引擎用于基于模板文件的网站。支持多种语言和格式(HTML,XML,CSV等),以及其他的模板引擎,如ClearSilver。

日志插用于写日志文件,他还具有丰富的附加属性,如时间戳,线程ID,Session ID和其他信息。对日志程序配置文件的更改将在没有程序重启的情况下自动激活。

QtService组建用于Windows服务程序的注册;

在嵌入式系统里面,至少需要2MB的内存。

下面是一个简单的栗子:

// The request handler receives and responds HTTP requests
void MyRequestHandler::service(HttpRequest& request, HttpResponse& response)
{
    // Get a request parameters
    QByteArray username=request.getParameter("username");

    // Set a response header
    response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");

    // Generate the HTML document
    response.write("");
    response.write("Hello ");
    response.write(username);
    response.write("");
}

// The main program starts the HTTP server
int main(int argc, char *argv[])
{
    QCoreApplication app(argc,argv);
        
    new HttpListener(
        new QSettings("configfile.ini",QSettings::IniFormat,&app),
        new MyRequestHandler(&app),
        &app);

    return app.exec();
}

 

博主例子

程序运行截图如下:

Qt文档阅读笔记-QtWebApp官方解析与实例(使用QtWebApp搭建HTTP服务器)_第1张图片

关键源码如下:

Qt文档阅读笔记-QtWebApp官方解析与实例(使用QtWebApp搭建HTTP服务器)_第2张图片

程序结构如下:

Qt文档阅读笔记-QtWebApp官方解析与实例(使用QtWebApp搭建HTTP服务器)_第3张图片

myrequesthandler.h

#ifndef MYREQUESTHANDLER_H
#define MYREQUESTHANDLER_H

#include "httpserver/httprequesthandler.h"
using namespace stefanfrings;

class MyRequestHandler: public HttpRequestHandler
{
    Q_OBJECT
public:
    MyRequestHandler(QObject* parent=nullptr);
    void service(HttpRequest& request, HttpResponse& response);
};

#endif // MYREQUESTHANDLER_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

main.cpp

#include 
#include 
#include "httpserver/httplistener.h"
#include "myrequesthandler.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSettings *listenerSettings=new QSettings("E:\\Qt2019\\useQtWebAPP\\conf.ini", QSettings::IniFormat, &a);
    listenerSettings->beginGroup("listener");

    new HttpListener(listenerSettings, new MyRequestHandler, &a);

    return a.exec();
}

myrequesthandler.cpp

#include "myrequesthandler.h"
#include 
#include 

MyRequestHandler::MyRequestHandler(QObject* parent): HttpRequestHandler(parent)
{
    Q_UNUSED(parent)
}

void MyRequestHandler::service(HttpRequest &request, HttpResponse &response)
{
    QByteArray path=request.getPath();
    qDebug() << path;

    QByteArray username("IT1995");

    response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");

    response.write("");
    response.write("

"); response.write("Hello "); response.write(username); response.write("

"); response.write(""); }

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

 

源码打包下载地址

https://github.com/fengfanchen/Qt/tree/master/UseQtWebAppFrame

你可能感兴趣的:(C/C++,Qt,C++,http/https,文档阅读笔记)