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

583 篇文章 127 订阅
196 篇文章 13 订阅

目录

 

 

官方解析

博主例子


 

官方解析

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("<html><body>");
    response.write("Hello ");
    response.write(username);
    response.write("</body></html>");
}

// 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();
}

 

博主例子

程序运行截图如下:

关键源码如下:

程序结构如下:

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 <QWidget>

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 <QApplication>
#include <QSettings>
#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 <QByteArray>
#include <QDebug>

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("<html><body>");
    response.write("<h1>");
    response.write("Hello ");
    response.write(username);
    response.write("</h1>");
    response.write("</body></html>");
}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值