国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

這篇具有很好參考價值的文章主要介紹了Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

??網(wǎng)頁很多時候是動態(tài)的,于是本篇文章目標實現(xiàn)一個簡答的動態(tài)頁面—頁靜態(tài)頁面互相跳轉(zhuǎn),點擊可以跳轉(zhuǎn)到子頁面。

?

Demo

??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

下載地址

??鏈接:https://pan.baidu.com/s/1bbhcu1XTiaJRYGRQRG5a0g?pwd=1234

?

HTML基本頁面交換

??上一篇的“Hello World”應(yīng)用程序確實輸出了簡單的純文本。但網(wǎng)絡(luò)的語言是HTML。因此,讓看看如何生成HTML。將輸出當(dāng)前時間,并顯示列表對象中的一些數(shù)據(jù)。

創(chuàng)建新的請求處理

??與第一個HelloWorldController類似,創(chuàng)建另一個名為ListDataController的新類。

listdatacontroller.h:

#ifndef LISTDATACONTROLLER_H
#define LISTDATACONTROLLER_H

#include <QList>
#include <QString>
#include "httprequesthandler.h"

using namespace stefanfrings;

class ListDataController: public HttpRequestHandler {
    Q_OBJECT
public:
    ListDataController(QObject* parent=0);
    void service(HttpRequest& request, HttpResponse& response);
private:
    QList<QString> list;
};

#endif // LISTDATACONTROLLER_H

listdatacontroller.cpp:

#include <QTime>
#include "listdatacontroller.h"

ListDataController::ListDataController(QObject* parent)
    : HttpRequestHandler(parent) {
    list.append("Robert");
    list.append("Lisa");
    list.append("Hannah");
    list.append("Ludwig");
    list.append("Miranda");
    list.append("Francesco");
    list.append("Kim");
    list.append("Jacko");
}

void ListDataController::service(HttpRequest &request, HttpResponse &response) {
    response.setHeader("Content-Type", "text/html; charset=UTF-8");
    response.write("<html><body>");

    response.write("The time is ");
    QString now=QTime::currentTime().toString("HH:mm:ss");
    response.write(now.toUtf8());

    response.write("<p>List of names:");
    response.write("<table border='1' cellspacing='0'>");
    for(int i=0; i<list.size(); i++) {
        QString number=QString::number(i);
        QString name=list.at(i);
        response.write("<tr><td>");
        response.write(number.toUtf8());
        response.write("</td><td>");
        response.write(name.toUtf8());
        response.write("</td></tr>");
    }
    response.write("</table>");

    response.write("</body></header>",true);
}

??構(gòu)造函數(shù)用一些名稱填充列表。該服務(wù)方法輸出一個具有當(dāng)前時間的HTML文檔和一個顯示列表對象內(nèi)容的表。
??請注意,在編寫文檔之前設(shè)置了一個HTTP響應(yīng)頭,它告訴瀏覽器使用的文件格式(請參閱Internet Media Types)和字符編碼。
??用新的控制器替換main.cpp中的控制器:

#include "listdatacontroller.h"

    new HttpListener(listenerSettings,new ListDataController(&app),&app);

??運行并測試應(yīng)用程序。輸出應(yīng)該是這樣的:
??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

請求映射器

??現(xiàn)在在應(yīng)用程序中有兩個不同的控制器類,但一次只能使用一個。現(xiàn)在創(chuàng)建一個“RequestMapper”類,它將在兩個控制器之間切換。和以前一樣,新類再次從HttpRequestHandler繼承。

requestmapper.h:

#ifndef REQUESTMAPPER_H
#define REQUESTMAPPER_H

#include "httprequesthandler.h"

using namespace stefanfrings;

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

#endif // REQUESTMAPPER_H

requestmapper.cpp:

#include "requestmapper.h"
#include "helloworldcontroller.h"
#include "listdatacontroller.h"

RequestMapper::RequestMapper(QObject* parent)
    : HttpRequestHandler(parent) {
    // empty
}

void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
    QByteArray path=request.getPath();
    qDebug("RequestMapper: path=%s",path.data());

    if (path=="/" || path=="/hello") {
        HelloWorldController().service(request, response);
    }
    else if (path=="/list") {
        ListDataController().service(request, response);
    }
    else {
        response.setStatus(404,"Not found");
        response.write("The URL is wrong, no such document.",true);
    }

    qDebug("RequestMapper: finished request");
}

??用新的請求映射程序替換main.cpp中的舊控制器:

#include "requestmapper.h"

    new HttpListener(listenerSettings,new RequestMapper(&app),&app);

??請求映射器根據(jù)請求的路徑調(diào)用兩個控制器中的一個。所以

  • 當(dāng)打開http://localhost:8080/或http://localhost:8080/hello,會看到“Hello World”頁面。
  • 當(dāng)打開http://localhost:8080/list,獲得姓名列表。

??例如,如果試圖打開任何錯誤的URLhttp://localhost:8080/lalala,然后會收到錯誤消息“URL錯誤…”以及狀態(tài)代碼404,這是“未找到”的技術(shù)值。一些程序使用它來處理錯誤。如果沒有設(shè)置狀態(tài)代碼,那么將使用默認的200,這意味著“成功”。請參閱維基百科中的HTTP狀態(tài)代碼列表。
如果多個并發(fā)HTTP請求同時傳入,那么service()方法將并行執(zhí)行多次。所以這個方法是多線程的。當(dāng)訪問在service()方法外部聲明的變量時,必須考慮這一點。
??請求映射器是“singleton”或處于“application scope”,因為它只有一個實例。
兩個控制器類(HelloWorldController和ListDataController)位于“請求范圍”中,這意味著每個請求都由該類的新實例處理。這會降低一些性能,但會稍微簡化編程。

一個接口對一個控制器優(yōu)化效率

??一個小的修改將兩個控制器類的范圍更改為“應(yīng)用程序范圍”。(PS:這個就是每次運行的時候,不是去新new)
??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

new requestmapper.h

#ifndef REQUESTMAPPER_H
#define REQUESTMAPPER_H

#include "httprequesthandler.h"
#include "helloworldcontroller.h"
#include "listdatacontroller.h"

using namespace stefanfrings;

class RequestMapper : public HttpRequestHandler {
    Q_OBJECT
public:
    RequestMapper(QObject* parent=0);
    void service(HttpRequest& request, HttpResponse& response);
private:
    HelloWorldController helloWorldController;
    ListDataController listDataController;
};

#endif // REQUESTMAPPER_H

new requestmapper.cpp

#include "requestmapper.h"

RequestMapper::RequestMapper(QObject* parent)
    : HttpRequestHandler(parent) {
    // empty
}

void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
    QByteArray path=request.getPath();
    qDebug("RequestMapper: path=%s",path.data());

    if (path=="/" || path=="/hello") {
        helloWorldController.service(request, response);
    }
    else if (path=="/list") {
        listDataController.service(request, response);
    }
    else {
        response.setStatus(404,"Not found");
        response.write("The URL is wrong, no such document.");
    }

    qDebug("RequestMapper: finished request");
}

??現(xiàn)在,每個請求都只重新使用一個HelloWorldController或ListDataController實例。在啟動期間只創(chuàng)建一次,因為HttpRequestMapper也只存在一次。
??使用會話后,還可以為每個會話創(chuàng)建控制器實例,并將它們存儲在會話存儲中。然后就有了一個“會話范圍”。會話將在后面進行解釋。

請求映射程序項目

??按照上面得,實際上就是剛開始出一個列表,/和/hello會出現(xiàn)helloworld,而/list則會返回list列表,這是直接通過url后得子網(wǎng)頁來切換(PS:并不是通過點擊主頁面來切換,這個后面會解說到)。

Web頁面跳轉(zhuǎn)觸發(fā)

??其實這個對于做網(wǎng)頁得很簡單,就是一個點擊超連接,只是跳轉(zhuǎn)到內(nèi)部,使用<a>來實現(xiàn)的。

?

Demo增量:實戰(zhàn)頁面跳轉(zhuǎn)

步驟一:準備代碼模板

??準備之前的demo模板:
???Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

步驟二:新建一個主入口的消息處理

??copy原來的helloworld改成index(PS:不管又不有index,直接網(wǎng)站也是跳入index.html頁面)。
??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互
??修改完類相關(guān)信息。

步驟三:網(wǎng)頁代碼中入口切換

??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

    // 啟動http的監(jiān)聽
    {
        if(!_pHttpListenerSettings)
        {
            _pHttpListenerSettings = new QSettings(httpServerPath, QSettings::IniFormat);
        }
        _pHttpListenerSettings->beginGroup("listener");
//        _pHttpListener = new HttpListener(_pHttpListenerSettings, new HelloWorldRequestHandler);
        _pHttpListener = new HttpListener(_pHttpListenerSettings, new IndexRequestHandler);
    }

步驟四:寫一個簡單html跳轉(zhuǎn)頁面

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>長沙紅胖子Qt</title>
</head>
<body>
    <p>好, 長沙紅胖子 QQ:21497936 www.hpzwl.com"</p>
    <p><a href="helloworld">Hello world!</a></p>
    <p><a href="list">list</a></p>
</body>

list.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>長沙紅胖子Qt</title>
</head>
<body>
    <a href="javascript:history.back(-1);">返回上一頁</a>
    <table border="2"> 
        <tr>
            <td>row 1, cell 1</td>
            <td>row 1, cell 2</td>
        </tr>
        <tr>
            <td>row 2, cell 1</td>
            <td>row 2, cell 2</td>
        </tr>
    </table>
</body>

步驟五:修改index.html的消息處理類

??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

??這里有個亂碼問題,請查看“入坑一”:

??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

void IndexRequestHandler::service(HttpRequest &request, HttpResponse &response)
{

    QString str;

    QString path = request.getPath();
    LOG << path;

    if(path == "/" || path == "/index")
    {
        str += "<!DOCTYPE html>"
               "<html lang=\"en\">"
               "<head>"
               "<meta charset=\"UTF-8\">"
               "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">"
               "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">"
               "<title>長沙紅胖子Qt</title>"
               "</head>"
               "<body>"
               "    <p>好, 長沙紅胖子 QQ:21497936 www.hpzwl.com</p>"
               "    <p><a href=\"helloworld\">Hello world!</a></p>"
               "    <p><a href=\"list\">list</a></p>"
               "</body>";
    }else if(path == "/helloworld")
    {
        helloWorldRequestHandler.service(request, response);
        return;
    }else if(path == "/list")
    {
        listRequestHandler.service(request, response);
        return;
    }else {
        response.setStatus(404,"Not found");
        str = "The URL is wrong, no such document.";
    }

    // 返回文本(需要在瀏覽器上看,所以將Qt內(nèi)部編碼都轉(zhuǎn)成GBK輸出即可,不管他本身是哪個編碼)
//    QByteArray byteArray = _pTextCodec->fromUnicode(str);
    QByteArray byteArray = str.toUtf8();
    response.write(byteArray);
}

步驟六:新建一個list.html修改消息處理類

??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

??修改好宏類名,然后嵌入list.html頁面:
??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

void ListRequestHandler::service(HttpRequest &request, HttpResponse &response)
{
    QString str;

    LOG << request.getPath();

    str = "<!DOCTYPE html>"
          "<html lang=\"en\">"
          "<head>"
          "<meta charset=\"UTF-8\">"
          "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">"
          "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">"
          "<title>長沙紅胖子Qt</title>"
          "</head>"
          "<body>"
          "<a href=\"javascript:history.back(-1);\">返回上一頁</a>"
          "<table border=\"2\">"
          "        <tr>"
          "            <td>row 1, cell 1</td>"
          "            <td>row 1, cell 2</td>"
          "        </tr>"
          "        <tr>"
          "            <td>row 2, cell 1</td>"
          "            <td>row 2, cell 2</td>"
          "        </tr>"
          "    </table>"
          "</body>";

    // 返回文本(需要在瀏覽器上看,所以將Qt內(nèi)部編碼都轉(zhuǎn)成GBK輸出即可,不管他本身是哪個編碼)
//    QByteArray byteArray = _pTextCodec->fromUnicode(str);
    QByteArray byteArray = str.toUtf8();
    response.write(byteArray);
}
?

Demo源碼

IndexRequestHandler.h

#ifndef INDEXREQUESTHANDLER_H
#define INDEXREQUESTHANDLER_H

#include "httprequesthandler.h"

#include "HelloWorldRequestHandler.h"
#include "ListRequestHandler.h"

using namespace stefanfrings;

class IndexRequestHandler : public HttpRequestHandler
{
public:
    IndexRequestHandler(QObject *parent = 0);

public:
    void service(HttpRequest& request, HttpResponse& response);

private:
    QTextCodec *_pTextCodec;

private:
    HelloWorldRequestHandler helloWorldRequestHandler;  // hellowold消息處理
    ListRequestHandler listRequestHandler;              // list消息處理

};

#endif // INDEXREQUESTHANDLER_H

IndexRequestHandler.cpp

#include "IndexRequestHandler.h"

#include "ListRequestHandler.h"

#include <QTextCodec>

#include <QDebug>
#include <QDateTime>
//#define LOG qDebug()<<__FILE__<<__LINE__
//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__
//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()
//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")

using namespace stefanfrings;

IndexRequestHandler::IndexRequestHandler(QObject *parent)
    : HttpRequestHandler(parent)
{
    // 返回文本(需要在瀏覽器上看,所以將Qt內(nèi)部編碼都轉(zhuǎn)成GBK輸出即可,不管他本身是哪個編碼)
    // WINDOWS: GBK  GB2312
    // LINUX  : urf-8
//    _pTextCodec = QTextCodec::codecForName("utf-8");
    _pTextCodec = QTextCodec::codecForName("GBK");
}

void IndexRequestHandler::service(HttpRequest &request, HttpResponse &response)
{

    QString str;

    QString path = request.getPath();
    LOG << path;

    if(path == "/" || path == "/index")
    {
        str += "<!DOCTYPE html>"
               "<html lang=\"en\">"
               "<head>"
               "<meta charset=\"UTF-8\">"
               "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">"
               "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">"
               "<title>長沙紅胖子Qt</title>"
               "</head>"
               "<body>"
               "    <p>好, 長沙紅胖子 QQ:21497936 www.hpzwl.com</p>"
               "    <p><a href=\"helloworld\">Hello world!</a></p>"
               "    <p><a href=\"list\">list</a></p>"
               "</body>";
    }else if(path == "/helloworld")
    {
        helloWorldRequestHandler.service(request, response);
        return;
    }else if(path == "/list")
    {
        listRequestHandler.service(request, response);
        return;
    }else {
        response.setStatus(404,"Not found");
        str = "The URL is wrong, no such document.";
    }

    // 返回文本(需要在瀏覽器上看,所以將Qt內(nèi)部編碼都轉(zhuǎn)成GBK輸出即可,不管他本身是哪個編碼)
//    QByteArray byteArray = _pTextCodec->fromUnicode(str);
    QByteArray byteArray = str.toUtf8();
    response.write(byteArray);
}

ListRequestHandler.h

#ifndef LISTREQUESTHANDLER_H
#define LISTREQUESTHANDLER_H

#include "httprequesthandler.h"

using namespace stefanfrings;

class ListRequestHandler : public HttpRequestHandler
{
public:
    ListRequestHandler(QObject *parent = 0);

public:
    void service(HttpRequest& request, HttpResponse& response);

private:
    QTextCodec *_pTextCodec;
};

#endif // LISTREQUESTHANDLER_H

ListRequestHandler.cpp

#include "ListRequestHandler.h"

#include <QTextCodec>

#include <QDebug>
#include <QDateTime>
//#define LOG qDebug()<<__FILE__<<__LINE__
//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__
//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()
//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")

using namespace stefanfrings;

ListRequestHandler::ListRequestHandler(QObject *parent)
    : HttpRequestHandler(parent)
{
    // 返回文本(需要在瀏覽器上看,所以將Qt內(nèi)部編碼都轉(zhuǎn)成GBK輸出即可,不管他本身是哪個編碼)
    // WINDOWS: GBK  GB2312
    // LINUX  : urf-8
//    _pTextCodec = QTextCodec::codecForName("utf-8");
    _pTextCodec = QTextCodec::codecForName("GBK");
}

void ListRequestHandler::service(HttpRequest &request, HttpResponse &response)
{
    QString str;

    LOG << request.getPath();

    str = "<!DOCTYPE html>"
          "<html lang=\"en\">"
          "<head>"
          "<meta charset=\"UTF-8\">"
          "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">"
          "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">"
          "<title>長沙紅胖子Qt</title>"
          "</head>"
          "<body>"
          "<a href=\"javascript:history.back(-1);\">返回上一頁</a>"
          "<table border=\"2\">"
          "        <tr>"
          "            <td>row 1, cell 1</td>"
          "            <td>row 1, cell 2</td>"
          "        </tr>"
          "        <tr>"
          "            <td>row 2, cell 1</td>"
          "            <td>row 2, cell 2</td>"
          "        </tr>"
          "    </table>"
          "</body>";

    // 返回文本(需要在瀏覽器上看,所以將Qt內(nèi)部編碼都轉(zhuǎn)成GBK輸出即可,不管他本身是哪個編碼)
//    QByteArray byteArray = _pTextCodec->fromUnicode(str);
    QByteArray byteArray = str.toUtf8();
    response.write(byteArray);
}
?

工程模板v1.2.0

??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

?

入坑

入坑一:編碼問題亂碼

問題

?? 亂碼
??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互

原因

??之前的網(wǎng)頁沒有編碼,直接轉(zhuǎn)換的,新建的頁面有編碼,標識了utf-8,所以無需轉(zhuǎn)碼gbk了。

解決

??當(dāng)表示好頁面的編碼未utf-8之后,則無需字符轉(zhuǎn)換編碼。
??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互
??Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互文章來源地址http://www.zghlxwxcb.cn/news/detail-457171.html

到了這里,關(guān)于Qt+QtWebApp開發(fā)筆記(三):http服務(wù)器動態(tài)html連接跳轉(zhuǎn)基礎(chǔ)交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Qt+QtWebApp開發(fā)筆記(五):http服務(wù)器html中使用json觸發(fā)ajax與后臺交互實現(xiàn)數(shù)據(jù)更新傳遞

    Qt+QtWebApp開發(fā)筆記(五):http服務(wù)器html中使用json觸發(fā)ajax與后臺交互實現(xiàn)數(shù)據(jù)更新傳遞

    ??前面完成了頁面的跳轉(zhuǎn)、登錄,很多時候不刷新頁面就想刷新局部數(shù)據(jù),此時ajax就是此種技術(shù),且是異步的。 ??本篇實現(xiàn)網(wǎng)頁內(nèi)部使用js調(diào)用ajax實現(xiàn)異步交互數(shù)據(jù)。 ??在js中使用 ajax是通過XMLHttpRequest來實現(xiàn)的。 ? ?? ??鏈接:https://pan.baidu.com/s/1tJMTPhIIyVE40qWxRW

    2024年02月08日
    瀏覽(34)
  • QtWebApp介紹、下載和搭建http輕量級服務(wù)器Demo

    QtWebApp介紹、下載和搭建http輕量級服務(wù)器Demo

    QtWepApp是一個C++中的HTTP服務(wù)器庫,其靈感來自Java Servlet。適用于Linux、Windows、Mac OS和Qt Framework支持的許多其他操作系統(tǒng)。 ??QtWebApp包含以下組件: ? HTTP(S)1.0和1.1服務(wù)器 ? 模板引擎 ? 緩沖記錄器 ??這些組件可以相互獨立地使用。一個非常小的用法示例: 官方: http:

    2024年02月12日
    瀏覽(35)
  • QtWebApp開發(fā)https服務(wù)器,完成客戶端與服務(wù)器基于ssl的雙向認證,純代碼操作

    引言:所謂http協(xié)議,本質(zhì)上也是基于TCP/IP上服務(wù)器與客戶端請求和應(yīng)答的標準,web開發(fā)中常用的http server有apache和nginx。Qt程序作為http client可以使用QNetworkAccessManager很方便的進行http相關(guān)的操作。 Qt本身并沒有http server相關(guān)的庫 ,也許是因為很少有這種需求吧。但是實際開發(fā)中

    2024年02月14日
    瀏覽(27)
  • Flask框架小程序后端分離開發(fā)學(xué)習(xí)筆記《2》構(gòu)建基礎(chǔ)的HTTP服務(wù)器

    Flask框架小程序后端分離開發(fā)學(xué)習(xí)筆記《2》構(gòu)建基礎(chǔ)的HTTP服務(wù)器

    Flask是使用python的后端,由于小程序需要后端開發(fā),遂學(xué)習(xí)一下后端開發(fā)。本節(jié)提供一個構(gòu)建簡單的本地服務(wù)器的代碼,仔細看注釋,學(xué)習(xí)每一步的流程,理解服務(wù)器接收請求,回復(fù)響應(yīng)的基本原理。 代碼效果,運行之后,在瀏覽器輸入:localhost:2000 總結(jié) 1.導(dǎo)入socket庫:這個庫

    2024年01月18日
    瀏覽(26)
  • 【Qt-4】QT基于qhttp-server搭建http服務(wù)器

    【Qt-4】QT基于qhttp-server搭建http服務(wù)器

    寫在前面 :雖然qhttp-server編譯成功,已生成dll庫,但在使用過程中,仍出現(xiàn)無法打開文件: “QtSslServer/QtSslServer”的問題,在多次解決無果后,決定放棄qhttp-server,選擇了QWebAPP,望知道的大佬可以幫忙解答一下,感謝~~ 一、環(huán)境搭建 1、下載及解壓源文件 下載QtHttpServer源碼,

    2024年02月08日
    瀏覽(20)
  • Nginx與Tomcat的區(qū)別,什么是HTTP服務(wù)器(處理靜態(tài)資源的服務(wù)器),什么是處理動態(tài)資源的服務(wù)器

    Nginx與Tomcat的區(qū)別,什么是HTTP服務(wù)器(處理靜態(tài)資源的服務(wù)器),什么是處理動態(tài)資源的服務(wù)器

    Nginx和Tomcat都是常用的Web服務(wù)器,但它們的主要作用不同。 Nginx是一個HTTP服務(wù)器,反向代理服務(wù)器和通用TCP/UDP代理服務(wù)器。 它通常用于靜態(tài)內(nèi)容、媒體流和負載均衡。在高流量和高并發(fā)負載下,Nginx表現(xiàn)更出色,并且能夠輕松處理靜態(tài)文件、壓縮和SSL/TLS卸載等任務(wù),以減輕

    2024年02月14日
    瀏覽(27)
  • QT實現(xiàn)客戶端服務(wù)器HTTP(get請求、post請求)

    QT實現(xiàn)客戶端服務(wù)器HTTP(get請求、post請求)

    服務(wù)器代碼如下: QtHttpForS.h QtHttpForS.cpp main.cpp QtHttpForS.ui 客戶端代碼: QtHttpForC.h QtHttpForC.cpp mian.cpp QtHttpForC.ui 程序運行效果: GET請求: POST請求: POST請求使用postman測試: 注意: 可以發(fā)現(xiàn),在使用postman進行POST請求發(fā)送時,服務(wù)器接收到的請求頭與QTSocket的POST請求的請求頭

    2023年04月22日
    瀏覽(23)
  • 用Java開發(fā)HTTP代理服務(wù)器

    HTTP代理服務(wù)器是一種網(wǎng)絡(luò)應(yīng)用,它充當(dāng)位于客戶端和目標服務(wù)器之間的中間節(jié)點,將客戶端發(fā)出的HTTP請求轉(zhuǎn)發(fā)給目標服務(wù)器,并將目標服務(wù)器返回的HTTP響應(yīng)內(nèi)容回傳給客戶端。通過使用代理服務(wù)器,客戶端可以避免直接訪問目標服務(wù)器,從而更加安全地訪問互聯(lián)網(wǎng)資源。

    2024年02月16日
    瀏覽(39)
  • 〖Web全棧開發(fā)③〗—HTTP協(xié)議和靜態(tài)web服務(wù)器

    〖Web全棧開發(fā)③〗—HTTP協(xié)議和靜態(tài)web服務(wù)器

    ??????個人簡介:以山河作禮。 ??????: Python領(lǐng)域新星創(chuàng)作者,CSDN實力新星認證,阿里云社區(qū)專家博主 ????:Web全棧開發(fā)專欄:《Web全棧開發(fā)》免費專欄,歡迎閱讀! TCP (Transmission Control Protocol) 是在互聯(lián)網(wǎng)協(xié)議(IP)上的一種基于連接(面向連接)的傳輸層協(xié)議 。數(shù)據(jù)

    2024年02月05日
    瀏覽(21)
  • linux高并發(fā)web服務(wù)器開發(fā)(web服務(wù)器)18_函數(shù)解析http請求, 正則表達式,sscanf使用,http中數(shù)據(jù)特殊字符編碼解碼

    linux高并發(fā)web服務(wù)器開發(fā)(web服務(wù)器)18_函數(shù)解析http請求, 正則表達式,sscanf使用,http中數(shù)據(jù)特殊字符編碼解碼

    pdf詳情版 編寫函數(shù)解析http請求 ○ GET /hello.html HTTP/1.1rn ○ 將上述字符串分為三部分解析出來 編寫函數(shù)根據(jù)文件后綴,返回對應(yīng)的文件類型 sscanf - 讀取格式化的字符串中的數(shù)據(jù) ○ 使用正則表達式拆分 ○ [^ ]的用法 通過瀏覽器請求目錄數(shù)據(jù) ○ 讀指定目錄內(nèi)容 ? opendir ?

    2024年02月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包