Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件

2023-06-16 13:16:35 来源: 博客园

前言

前面做了一些交互,网页是直接通过html对response进行返回的,这里QtWebApp与传统的web服务器不同,传统的web服务器可以调用同级目录相对路径或者绝对路径下的js,而QtWebApp的httpserver是response返回当前页面的问题,默认是无法调用的。  为了解决调用一些依赖的如echarts等一些js的代码模块引入的问题,就需要静态文件了。本篇解说StaticFileController,在返回的html文本中调用外部js文件,类似的,其他文件都是一样了,只是引入的后缀名不一样。


(资料图片)

Demo

这里是调用静态文件js的  

这里是重定向测试的  

静态文件(重要功能,如调用服务器的js文件等)

如果QtWebapp无法传递存储在服务器文件夹中的静态文件,那么它将是不完整的。StaticFileController提供了这一功能。但在使用它之前,需要在ini文件中进行一些额外的配置设置:

[files]path=../docrootencoding=UTF-8maxAge=90000cacheTime=60000cacheSize=1000000maxCachedFileSize=65536
  • path:设置指定存储静态文件的基本文件夹。它是相对于配置文件的。还可以编写绝对路径名,如“/opt/server/docroot”或“C:/server/docroot”。
  • encoding:encoding参数仅用于*.txt和*.html文件,用于告诉浏览器这些文件的编码方式。如果同时需要不同的编码,则必须创建StaticFileController的多个实例——每个编码一个。其他参数控制高速缓存。首先,应该知道操作系统已经缓存了文件。然而,发现Linux和Windows在处理小文件时都表现不佳。因此,建议使用应用程序内部缓存,但仅适用于小文件。
  • cacheTime:cacheTime控制文件在内存中最多保存多少毫秒。值0表示,只要有足够的空间,文件就会保留在内存中。
  • cacheSize:cacheSize指定允许缓存占用的内存量。一兆字节是一个很好的开始值。如果用户请求的文件不在缓存中,则会删除最旧的文件,为新文件腾出空间。
  • maxCachedFileSize:maxCachedFileSize控制缓存中单个文件的最大大小。web服务器应用程序不会缓存较大的文件。但正如所写的那样,操作系统可以很好地缓存大文件。事实证明,64千字节是一个很好的开始值。
  • maxAge:maxAge参数的含义与cacheTime基本相同,但控制网络浏览器的缓存,而不是服务器。

需要一个指向StaticFileController实例的全局指针,以便整个程序都可以访问它。首先添加到global.h:

#ifndef GLOBAL_H#define GLOBAL_H#include "httpsessionstore.h"#include "staticfilefontroller.h"using namespace stefanfrings;extern HttpSessionStore* sessionStore;extern StaticFileController* staticFileController;#endif // GLOBAL_H

global.cpp:

#include "global.h"HttpSessionStore* sessionStore;StaticFileController* staticFileController;

在main.cpp中,配置StaticFileController的实例:

int main(int argc, char *argv[]){    QCoreApplication app(argc, argv);    QString configFileName=searchConfigFile();    // Session store    QSettings* sessionSettings=new QSettings(configFileName,QSettings::IniFormat,&app);    sessionSettings->beginGroup("sessions");    sessionStore=new HttpSessionStore(sessionSettings,&app);    // Static file controller    QSettings* fileSettings=new QSettings(configFileName,QSettings::IniFormat,&app);    fileSettings->beginGroup("files");    staticFileController=new StaticFileController(fileSettings,&app);    // HTTP server    QSettings* listenerSettings=new QSettings(configFileName,QSettings::IniFormat,&app);    listenerSettings->beginGroup("listener");    new HttpListener(listenerSettings,new RequestMapper(&app),&app);    return app.exec();}

现在可以在requestmapper.cpp中使用staticFileController:

#include "requestmapper.h"#include "httpsession.h"#include "global.h"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 if (path=="/login") {        loginController.service(request, response);    }    else if (path=="/cookie") {        cookieTestController.service(request, response);    }    else if (path.startsWith("/files")) {        staticFileController->service(request,response);    }    else {        response.setStatus(404,"Not found");        response.write("The URL is wrong, no such document.");    }    qDebug("RequestMapper: finished request");}

现在创建文件夹MyFirstWebApp/docroot/files,然后创建一个名为hello.HTML的HTML文件:

            Hello World!    

启动程序并打开http://localhost:8080/files/hello.html.浏览器将接收该文件的内容。  可以将其他文件(图像、css、javascript…)添加到该文件夹中,如果愿意,还可以创建更多的子文件夹。  如果出现“找不到文件”错误,调试消息将帮助找出服务器真正试图加载的文件。

HTTP重定向

有时想将浏览器重定向到另一个页面。这通常用于需要用户登录的网站。如果用户没有登录,他会被重定向到登录页面。当然,匿名用户必须可以访问登录页面本身。  requestmapper.cpp中的更改:

void RequestMapper::service(HttpRequest& request, HttpResponse& response) {    QByteArray path=request.getPath();    qDebug("RequestMapper: path=%s",path.data());    QByteArray sessionId=sessionStore->getSessionId(request,response);    if (sessionId.isEmpty() && path!="/login") {        qDebug("RequestMapper: redirect to login page");        response.redirect("/login");        return;    }    else if (path=="/login") {        ...    }    else if (path=="/whatever") {        ...    }    qDebug("RequestMapper: finished request");}

国际化(ps:在文本中返回中文)

HTTP服务器总是使用QByteArray而不是QString,原因很简单:性能。整个HTTP协议都是基于8位编码的,所以决定不浪费CPU时间,不必要地来回转换。但是当然可以使用Unicode。例子:

void UnicodeController::service(HttpRequest& request, HttpResponse& response) {    QString chinese=QString::fromUtf8("美丽的花朵需要重症监护");    response.setHeader("Content-Type", "text/html; charset=UTF-8");    response.write(chinese.toUtf8(),true);}

这是谷歌翻译(不会说中文)提供的“美丽的花朵需要重症监护”的中文翻译。  从QString到UTF-8的转换并不比到Latin1的转换慢。因此,如果需要,请随时使用Unicode。但千万不要忘记使用QString::fromUtf8。如果只写中文=“美丽的花朵需要重症监护“,只会得到乱码。

Demo增量:实战配置加载静态文件

步骤一:准备代码模板

准备之前的demo v1.4.0模板:

maxCachedFileSize=65536

步骤二:新增静态文件管理类用于全局使用

步骤三:新增静态配置

新增静态配置,路径调整问exe当前的子目录www(符合后端基本习惯)

[files]path=../wwwencoding=UTF-8maxAge=90000cacheTime=60000cacheSize=1000000

步骤四:初始化静态文件

步骤五:在Index进行路径文件分流

必须分流,静态文件指示的api和文件是先从处理过程然后再到静态文件管理类的,所以有些是请求数据则需要在代码中处理,这里之前是没有这样做,可查看“入坑一”。  

本Demo无法打开跳转的staticFileUserJs,可查看“入坑二”  本Demo静态文件无法调用js,请查看“入坑三”。

模块化(有一些新增调整)

Demo源码

etc/httpServer.ini(新增files)

[listener];ip=127.0.0.1port=8080readTimeout=60000maxRequestSize=16000maxMultiPartSize=10000000minThreads=4maxThreads=100cleanupInterval=60000[logging]fileName=../logs/httpserver.log;fileName=/dev/stdoutminLevel=CRITICALbufferSize=100maxSize=1000000maxBackups=2;timestampFormat=dd.MM.yyyy hh:mm:ss.zzztimestampFormat=yyyy-MM-dd hh:mm:ss.zzzmsgFormat={timestamp} {typeNr} {type} {thread} {msg};QT5 supports: msgFormat={timestamp} {typeNr} {type} {thread} {msg}\n  in {file} line {line} function {function}[files]path=../wwwencoding=UTF-8maxAge=90000cacheTime=60000cacheSize=1000000maxCachedFileSize=65536

www/index.html(新增文件,静态文件主页)

            长沙红胖子Qt

你好, 长沙红胖子 QQ:21497936 www.hpzwl.com

Hello world!

list

login

checkState

staticFileUseJs

www/staticFileUseJs.html(新增文件,测试跳转和js调用)

长沙红胖子Qt

这里是检测状态Demo v1.5.0了

123.567

123.567

<script>function reset() {document.getElementById("dt1").innerHTML="---.---";document.getElementById("dt2").innerHTML="---.---";document.getElementById("dt3").innerHTML="---.---";}function getDt1() {var xhr = new XMLHttpRequest();xhr.open("GET","/checkState/data",true);xhr.send();xhr.onreadystatechange = function() {if(xhr.readyState === 4 && xhr.status === 200){document.getElementById("dt1").innerHTML = xhr.responseText;}}}</script><script src="jquery.min.js"></script><script>function doJs() {alert($("li")[0]);}</script>

StaticFileManager.h(全局使用静态文件消息处理)

#ifndef STATICFILEMANAGER_H#define STATICFILEMANAGER_H#include #include #include "httplistener.h"#include "staticfilecontroller.h"using namespace stefanfrings;class StaticFileManager : public QObject{    Q_OBJECTprivate:    explicit StaticFileManager(QObject *parent = 0);public:    static StaticFileManager *getInstance();public:    StaticFileController *getStaticFileController() const;public:    void setStaticFileController(StaticFileController *pStaticFileController);private:    static StaticFileManager *_pInstance;    static QMutex _mutex;private:    StaticFileController *_pStaticFileController;};#endif // STATICFILEMANAGER_H

StaticFileManager.cpp

#include "StaticFileManager.h"#include "IndexRequestHandler.h"#include "HttpSessionStoreManager.h"#include #include #include #include //#define LOG qDebug()<<__FILE__<<__LINE__//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__//#define LOG qDebug()<<__FILE__<<__LINE__<

IndexRequestHandler.h

#ifndef INDEXREQUESTHANDLER_H#define INDEXREQUESTHANDLER_H#include "httprequesthandler.h"#include "HelloWorldRequestHandler.h"#include "ListRequestHandler.h"#include "LoginRequestHandler.h"#include "CheckStateRequestHandler.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消息处理    LoginRequestHandler _loginRequestHandler;            // login消息处理,Demo v1.3.0    CheckStateRequestHandler _checkStateRequestHandler;  // checkState实时检测状态};#endif // INDEXREQUESTHANDLER_H

IndexRequestHandler.cpp(调整了入口和放开静态文件)

#include "IndexRequestHandler.h"#include "StaticFileManager.h"#include #include #include //#define LOG qDebug()<<__FILE__<<__LINE__//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__//#define LOG qDebug()<<__FILE__<<__LINE__<"               ""               ""               ""               ""               "长沙红胖子Qt"               ""               ""               "    

你好, 长沙红胖子 QQ:21497936 www.hpzwl.com

" "

Hello world!

" "

list

" "

login

" "

checkState

" "

staticFileUseJs

" ""; QByteArray byteArray = str.toUtf8(); response.write(byteArray);#else // index使用文件 LOG << path; StaticFileManager::getInstance()->getStaticFileController()->service(request, response);#endif }else if(path == "/helloworld") { _helloWorldRequestHandler.service(request, response); }else if(path == "/list") { _listRequestHandler.service(request, response); }else if(path == "/login" || path == "/login/out") { _loginRequestHandler.service(request, response); }else if(path == "/checkState" || path == "/checkState/data") { _checkStateRequestHandler.service(request, response); }else if( path.startsWith("/staticFileUseJs") || path == "/favicon.ico" || path.endsWith(".js")) { LOG << path; StaticFileManager::getInstance()->getStaticFileController()->service(request, response); }else {#if 0 LOG; response.setStatus(404,"Not found"); QString str; str = "The URL is wrong, no such document."; QByteArray byteArray = str.toUtf8(); response.write(byteArray);#else // 这里进行重定向 LOG << "重定向至/"; response.redirect("/");#endif }}

工程模板v1.5.0

入坑

入坑一:直接从listerner切入静态文件后,ajax也是请求路径

问题

Ajax未代码捕捉,直接入静态文件本身就无法变成api接口了。    

原因

加载的静态文件,里面请求的任何东西只要调用静态文件处理类来处理,则会都变成本地静态文件(这里静态文件主要是可以调用未传递过去到客户端的文件,如.js文件等)

解决

先得从一个头部文件开始分流,一开始使用一个自定义的代码消息处理,这个消息处理通过第一层路径或者子路径来判断是否是静态文件,后再扔给静态文件,就可以绕开。  而接口也是通过路径进行判断,然后用代码进行返回,所以这种开发起来就混合了Qt和httpJs等静态文件了。

入坑二:添加js静态文件后直接跑飞404

问题

原因

去掉js的代码,未恢复正常  去掉js的文件,未恢复正常  检查代码发现,是重定向问题    请查询发现,favicon,即Favorites Icon的缩写,顾名思义,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站,就是网站的图标。  没有图标本来为空,而我们没有分流该路径,分流之后还是不行,再测试:  

经过摸索,还发现:    再后来发现,静态文件这个是文件,需要后缀html,因为我们做qt的这块使用代码api习惯了,导致忽略了这点

解决

入坑三:加载了js静态文件未弹窗

问题

但是点击没有弹窗:  

原因

检查,未放开.js,加载js没有真的加载进去  在静态文件分流的地方,放开后缀.js的  

还是不行,测试发现必须引入js在单独空的script里面。

解决

且发现要分开:  

标签:

Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件

前言前面做了一些交互,网页是直接通过html对response进行返回的,这里

06-16 13:16:35

世界新资讯:511开头的身份证是哪里的

1、510150303内蒙古乌海市海南区511150304内蒙古乌海市乌达区512150400内蒙古赤峰

06-16 13:05:09

在央广听见内蒙古|我国北方气温继续走高,各地多措并举保障城市运行和劳动者安全

6月15日《全国新闻联播》中央广播电视总台央广“中国之声”《全国新闻

06-16 12:37:24

广东台风警报(广东公安:直击:广东迎战台风“马鞍”)|全球快讯

【[话筒]突发路况:珠海市机场路珠海科技学院路段南往北方向有临时交通

06-16 12:00:55

麦考伊斯特:没人会质疑桑乔的天赋,他应该重返多特-天天信息

直播吧6月16日讯苏格兰名宿麦考伊斯特接受了媒体的采访,谈及曼联前锋

06-16 11:57:52

“小标签”关乎“大民生” 市质检院为食品质量安全“保驾护航”_当前资讯

食品质量安全关乎人民健康。其中,食品标签标示承载着产品的重要信息,

06-16 11:47:07

雪佛兰探界者首曝,越来越有美式肌肉车的味道

近日,我们在最新一期工信部新车申报目录中首次见到了全新一代雪佛兰探

06-16 11:21:16

环球精选!市州观察丨大竹建设“川渝制种产业新高地” 计划到2025年制种面积增至5万亩

程一凡邱椿博川观新闻记者袁城霖6月5日,大竹县与北京大北农科技集团股

06-16 10:57:42

梅西新工体闪电破门

6月15日,在北京工人体育场举行的一场国际足球邀请赛中,阿根廷队对阵

06-16 10:57:57

金宏气体:2023年整体营收增幅预计在20%左右

金宏气体在投资者关系活动记录表中披露,公司2023年整体营收增幅预计在

06-16 10:34:45

气道异物梗阻如何解除?心肺复苏怎么做?这个居民区开展公益救护培训

近日,彭浦镇万荣新苑党总支和万荣新苑儿童之家开展了一堂“家庭公益救

06-16 10:04:11

党参突破历史高价后变成了一匹脱缰野马!_当前热议

党参,短短不到一个月时间各个规格价格就上涨了一百元,让人感慨,你大

06-16 09:54:05

全球短讯!xd股票是什么意思 戏曲中有板有眼的意思

今天来聊聊d股票是什么意思,戏曲中有板有眼的意思的文章,现在就为大

06-16 09:55:19

监管“三问”后国联证券定增缩水20亿,年内券商再融资降温明显

没有定增落地,也没有配股预案发布,已公布的融资方案则出现募资额缩水

06-16 09:46:33

世界速讯:“一刀切”式售票难防黄牛 演出票不退换的“行规”能改改吗

随着线下演出市场回暖,演唱会、音乐节、话剧脱口秀等各类文化演出火热

06-16 09:18:10

今热点:4家公司进入退市倒计时!均为面值退市

又有四家上市公司进入“退市倒计时”!6月15日晚间,*ST宏图(600122)

06-16 09:04:27

宜章县杨梅山镇:村民代表显温情 传递关爱暖人心

“我们真的很开心,镇村干部记挂着我们,村民代表也时不时来给我们送温

06-16 08:56:06

我校在2022年度辽宁省共青团工作表彰中获得荣誉

本报讯(通讯员孔晓茵)在五四青年节到来之际,为充分发挥先进典型示范

06-15 19:02:28

好词好句好段摘抄大全 要有出处和感悟_好词好句好段摘抄大全 要有出处 热点聚焦

1、好段摘抄(含出处):将感情埋藏得太深有时是件坏事。2、如果一个女

06-15 18:47:07

7300吨大连樱桃从枝头飞到全国百姓餐桌!

大连市是世界公认的大樱桃最佳产区大连大樱桃曾获得农业农村部地理标志

06-15 18:20:49

逆势增长的母婴洗护市场,下一站走向何方?

近两年,中国人口出现了比较特殊的情况,“人口负增长”不再是危言耸听

06-15 17:52:59

小米QQ看不出有没有未读消息_天天热闻

1、未读消息数量未显示的问题可能是由于以下原因导致的:1-1、手机QQ没

06-15 17:11:57

天天简讯:异动快报:冠石科技(605588)6月15日14点54分触及跌停板

6月15日盘中消息14点54分冠石科技605588触及跌停板目前价格5049下跌100

06-15 16:42:54

只缘身在此山中 只缘身在此山中全诗

1、出自北宋诗人苏轼的《题西林壁》,全诗原文是:  横看成岭侧成峰

06-15 16:04:15

1.3-丙二胺商品报价动态(2023-06-15)

交易商品牌 产地交货地最新报价1 3-丙二胺 99%180kg 桶济南世纪通达化

06-15 15:44:09

笼络人心意思(笼络)-天天即时看

络人心意思,笼络这个问题很多朋友还不知道,来为大家解答以上的问题,

06-15 15:04:59

英可瑞6月15日盘中涨幅达5%-天天播报

以下是英可瑞在北京时间6月15日14:55分盘口异动快照:6月15日,英可瑞

06-15 14:41:13

斯基拉夫斯基(关于斯基拉夫斯基的简介)|当前视点

斯基拉夫斯基,基拉夫斯基的简介很多人还不知道,现在让我们一起来看看

06-15 14:04:06

郑州大学通报:男子扮女装进入女浴室偷拍

6月15日,郑州大学官方微博发出通报:2023年6月14日晚,学校南校区有一

06-15 13:32:20

佛系青年图片动漫-佛系青年图片 世界快看点

1、出自韩剧《请回答1988》。2、剧中人物叫做金正峰(安宰弘饰)。本文

06-15 12:52:40

北京大屯街道组织社会化退休人员走进“老字号”

千龙网讯(记者刘美君)近日,北京市朝阳区大屯街道便民服务中心联合北

06-15 12:01:41

126项文旅活动邀您“夏”扬州

扬州夏日风光美。资料图片游人在宝应荷园游玩。刘江瑞摄通讯员伏京京李

06-15 11:01:58

近13年总决赛勇士和热火共打进12次 但从未正面交锋 世界速看料

据NBA记者TimReynolds统计,联盟近13年总决赛中勇士和热火共战打进其中

06-15 10:56:37

台防务部门全民防务“应变手册”变“乌龙手册”

台当局防务部门日前公布2023年最新版《全民防务应变手册》,比起去年23

06-15 10:31:34

还差3人!凯斯勒成美国男篮第9人 梦之队星光黯淡世界杯恐难争冠|每日观点

还差3人!凯斯勒成美国男篮第9人梦之队星光黯淡世界杯恐难争冠,梦之队,

06-15 10:10:06

浙江民泰商业银行成都分行:提升适老服务 让金融更有温度|世界报资讯

中国银行保险报网讯近年来,随着数字化转型的不断深入,浙江民泰商业银

06-15 09:46:47

我国将新增200所左右高职和应用型本科院校!多地95号汽油进入“7元时代”【龙华818】

今天是6月15日一起看看发生了哪些大事吧倒水模式开始伞和拖鞋总得有一

06-15 09:18:18

5月全社会用电量同比增长7.4%

新华社北京6月14日电(记者戴小河)国家能源局14日发布的数据显示,5月

06-15 08:34:54

RCEP全面生效反映了区域国家实现共同发展的强烈诉求

本报北京6月14日电 外交部发言人汪文斌14日表示,《区域全面经济伙

06-15 07:54:32

深夜!上海发生3.1级地震|新闻早8条

○ 合肥中考理化题难吗?考场外他们说…○ 合肥地铁上乘客突然晕倒,

06-15 07:03:12

HICOOL 2023全球创业大赛在北京顺义正式启动-环球热门

HICOOL2023全球创业大赛在北京顺义正式启动

06-15 06:15:43

焦点快看:凉风有信秋月无边亏我思娇情绪好比度日如年出处_凉风有信 秋月无边 亏我思娇的情绪好比度日如年是什么意思 _360

1、凉风有兴,秋月无边,亏我思娇的情绪好比度日如年,虽然我不是玉树

06-15 04:55:15

为什么会做梦梦到一个人两次_为什么会做梦梦到一个人 环球观天下

1、梦是潜意识的另类表现。2、这个人是一种象征。3、他可能是你过去的

06-15 01:52:12

鲁抗医药开展 “迎七一” 中医健康进企业暨无偿献血活动_世界资讯

见习记者王浩6月14日,鲁抗医药开展“迎七一”中医健康进企业暨无偿献

06-14 23:08:43

我州再发高森林草原火险预警,6月14日——6月17日,4县为黄色预警区域

经州火险会商研判组对近期气象因子可燃物因子、人为活动因子综合研判,

06-14 22:05:57

当前热门:书法联考学校有哪些学校专业省份承认省级成绩的

1、书法联考学校有哪些学校联考和统考是指同一种考试,联考又叫统考,

06-14 21:18:50

乘用车产销数据回暖 消费潜力持续迸发|热点评

乘联会日前发布5月全国乘用车产销数据显示,5月全国狭义乘用车分别实现

06-14 20:51:40

天天新消息丨容易“上头”怎么办?王艺迪叮嘱自己“别着急”

有了那一次比赛的经验后,在WTT果阿站比赛中打得不错,但到了新加坡大

06-14 19:53:20

每日资讯:索菲亚不会下场做整装 欧派家居市占率仅为5%左右|一周家居看点

家居名企动态& 183;股东“内斗”,梦洁股份股东大会7项议案被否。5月26

06-14 19:12:53

世界热资讯!热评丨进度超八成!颗粒归仓,稳住粮食安全“压舱石”

山东东营广饶花官镇杨王村,蓝天白云映衬下,大型收割机正在金色麦田间

06-14 18:33:53

世界新资讯:511开头的身份证是哪里的
在央广听见内蒙古|我国北方气温继续走高,各地多措并举保障城市运行和劳动者安全
广东台风警报(广东公安:直击:广东迎战台风“马鞍”)|全球快讯
麦考伊斯特:没人会质疑桑乔的天赋,他应该重返多特-天天信息
“小标签”关乎“大民生” 市质检院为食品质量安全“保驾护航”_当前资讯
雪佛兰探界者首曝,越来越有美式肌肉车的味道
环球精选!市州观察丨大竹建设“川渝制种产业新高地” 计划到2025年制种面积增至5万亩
梅西新工体闪电破门
金宏气体:2023年整体营收增幅预计在20%左右
气道异物梗阻如何解除?心肺复苏怎么做?这个居民区开展公益救护培训
党参突破历史高价后变成了一匹脱缰野马!_当前热议
全球短讯!xd股票是什么意思 戏曲中有板有眼的意思
监管“三问”后国联证券定增缩水20亿,年内券商再融资降温明显
世界速讯:“一刀切”式售票难防黄牛 演出票不退换的“行规”能改改吗
今热点:4家公司进入退市倒计时!均为面值退市
宜章县杨梅山镇:村民代表显温情 传递关爱暖人心
我校在2022年度辽宁省共青团工作表彰中获得荣誉
好词好句好段摘抄大全 要有出处和感悟_好词好句好段摘抄大全 要有出处 热点聚焦
7300吨大连樱桃从枝头飞到全国百姓餐桌!
逆势增长的母婴洗护市场,下一站走向何方?
小米QQ看不出有没有未读消息_天天热闻
天天简讯:异动快报:冠石科技(605588)6月15日14点54分触及跌停板
只缘身在此山中 只缘身在此山中全诗
1.3-丙二胺商品报价动态(2023-06-15)
笼络人心意思(笼络)-天天即时看
英可瑞6月15日盘中涨幅达5%-天天播报
斯基拉夫斯基(关于斯基拉夫斯基的简介)|当前视点
郑州大学通报:男子扮女装进入女浴室偷拍
佛系青年图片动漫-佛系青年图片 世界快看点
北京大屯街道组织社会化退休人员走进“老字号”
126项文旅活动邀您“夏”扬州
近13年总决赛勇士和热火共打进12次 但从未正面交锋 世界速看料
台防务部门全民防务“应变手册”变“乌龙手册”
还差3人!凯斯勒成美国男篮第9人 梦之队星光黯淡世界杯恐难争冠|每日观点
浙江民泰商业银行成都分行:提升适老服务 让金融更有温度|世界报资讯
我国将新增200所左右高职和应用型本科院校!多地95号汽油进入“7元时代”【龙华818】
5月全社会用电量同比增长7.4%
RCEP全面生效反映了区域国家实现共同发展的强烈诉求
深夜!上海发生3.1级地震|新闻早8条
HICOOL 2023全球创业大赛在北京顺义正式启动-环球热门
焦点快看:凉风有信秋月无边亏我思娇情绪好比度日如年出处_凉风有信 秋月无边 亏我思娇的情绪好比度日如年是什么意思 _360
为什么会做梦梦到一个人两次_为什么会做梦梦到一个人 环球观天下
鲁抗医药开展 “迎七一” 中医健康进企业暨无偿献血活动_世界资讯
我州再发高森林草原火险预警,6月14日——6月17日,4县为黄色预警区域
当前热门:书法联考学校有哪些学校专业省份承认省级成绩的
乘用车产销数据回暖 消费潜力持续迸发|热点评
天天新消息丨容易“上头”怎么办?王艺迪叮嘱自己“别着急”
每日资讯:索菲亚不会下场做整装 欧派家居市占率仅为5%左右|一周家居看点
世界热资讯!热评丨进度超八成!颗粒归仓,稳住粮食安全“压舱石”
中国银行(03988):张勇就任非执行董事 全球速讯
X 广告
资讯
X 广告

Copyright ©  2015-2022 西方畜牧网版权所有  备案号:沪ICP备2020036824号-7   联系邮箱:5 626 629 @qq.com