QT 实现 httpserver
1、百度搜索QtWebApp ,进入官网,下载它的源码,参考下图所示


2、QtWebApp 本身是基于qt creator开发的,如果你也想使用vs2013打开,需要安装vs2013和qt的vs插件,下面是解压后的文件

3、在菜单栏里打开一个qt的工程文件

4、加载工程完成后,是这样子的,工程是可以直接编译通过,和运行的


5、你将QtWebApp添加到你的工程中,自己实现处理的接口就可以简单的实现一个httpserver了,主要是图2的类,
class RequestHandler : public HttpRequestHandler {
Q_OBJECT
Q_DISABLE_COPY(RequestHandler)
public:
/**
Constructor.
@param parent Parent object
*/
RequestHandler(QObject* parent=0);
/**
Process an incoming HTTP request.
@param request The received HTTP request
@param response Must be used to return the response
*/
void service(HttpRequest& request, HttpResponse& response);
};
你从HttpRequestHandler派生实现一个子类,实现service的接口就可以,非常简单,所有的请求都是在service的接口处理的


6、你可以将你的业务逻辑,放在这个接口里就可以了,下面是它的部份实现代码
void RequestHandler::service(HttpRequest& request, HttpResponse& response)
{
QByteArray path=request.getPath();
qDebug("Conroller: path=%s",path.data());
// Set a response header
response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");
// Return a simple HTML document
response.write("<html><body>Hello World</body></html>",true);
qDebug("RequestHandler: finished request");
// Clear the log buffer
if (logger)
{
logger->clear();
}
}

7、然后是启动的初始化,关键代码就是下面这块
QString configFileName = ".\\etc\\Demo3.ini";
// Configure logging into a file
QSettings* logSettings = new QSettings(configFileName, QSettings::IniFormat, this);
logSettings->beginGroup("logging");
logger=new FileLogger(logSettings,10000);
logger->installMsgHandler();
// Configure and start the TCP listener
qDebug("ServiceHelper: Starting service");
QSettings* listenerSettings = new QSettings(configFileName, QSettings::IniFormat, this);
listenerSettings->beginGroup("listener");
listener = new HttpListener(listenerSettings, new RequestHandler(this), this);
qWarning("Startup: Service has started");
