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("<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