当前位置: 首页 > news >正文

云南网站建设优化技术网站改手机版

云南网站建设优化技术,网站改手机版,婚纱摄影的网站模板,网站界面设计总结这一节将介绍搜索功能入口程序TSESearch.cpp的第六步——显示搜索结果。该部分中首先定义了一个结果显示类CDisplayRst的对象iDisplayRst#xff0c;然后调用了该类的三个成员函数ShowTop,ShowMiddle和ShowBelow分别显示结果页面的头部、中部和底部#xff08;即图1中标注①②…这一节将介绍搜索功能入口程序TSESearch.cpp的第六步——显示搜索结果。该部分中首先定义了一个结果显示类CDisplayRst的对象iDisplayRst然后调用了该类的三个成员函数ShowTop,ShowMiddle和ShowBelow分别显示结果页面的头部、中部和底部即图1中标注①②③的区域。下面来看一下这三个函数的源代码代码中加入了详细的注释以“LB_C”开始的注释为我加入的进行说明另外再源代码之后还有一些问题的分析。 1、ShowTop bool CDisplayRst::ShowTop() {string strHost string(getenv(HTTP_HOST));//LB_c: 结果网页的body标签cout body bgcolor#ffffff topmargin2 marginheight2 table classborder0 width100% cellspacing0 cellpadding0 height29 endl tr endl//LB_c: 左上角的天网搜索的logo图片给该图片加了一个到strHost/yc/TSE/的链接(strHost是网站root目录即apache配置的网站目录//前面已经设置为/var/www/html/)。这样点击logo会打开strHost/yc/TSE/中的index.html该网页与strHost中的index.html实际上是一样的//也就是搜索主页不知道为什么不直接链接到strHost中的index.html? td width36% rowspan2 height1 a hrefhttp:// strHost /yc/TSE/img border0 src/yc/TSE/tsetitle.JPG width308 height65/a/td endl//LB_c: 顶部的搜索主页和使用帮助链接前者与上面的logo链接一样后者链接到一个网络上的帮助手册。 td width64% height33 font size2a hrefhttp:// strHost /yc/TSE/搜索主页/a| a hrefhttp://e.pku.edu.cn/gbhelp.htm使用帮助/a /fontbr/td endl /tr endl;//LB_c: 这里在网页顶部构建了一个新查询的form包括搜索框、搜索按钮和隐含的显示页码键值对cout tr endl tdp align\left\ endl form method\get\ action\/yc-cgi-bin/index/TSESearch\ name\tw\ endl//LB_c: 搜索输入框 input type\text\ name\word\ size\55\ endl//LB_c: 新查询按钮注意该input标签中没有设置name INPUT TYPE\submit\ VALUE\ 新查询 \  endl//LB_c: 附加的键值对键名为start值为1这里是指示显示搜索结果的第1页。 input type\hidden\ name\start\ value\1\ endl /form endl /tr endl /table endl;//LB_c: 中间蓝色的横条上面写有图片cout table border0 width100% cellspacing1 cellpadding0 height1 endl tr endl td width68 aligncenter bgcolor#000066 valignmiddlefont size2bfont color#FFFFFF图 片/font/b/font/td endl /tr endl tr td width100% alignleft colspan3 height0 /td/tr endl /table endl;return true; } 【分析1】第6节中提到过如果从搜索结果页面中进行新的搜索显示结果是正常的为什么呢?看一下代码中的新查询的formform中有三个input而只有两个input有name所以用户点击新查询按钮后提交的URL中有两个键值对(word和start)例如查询北京大学得到 http://localhost:8080/yc-cgi-bin/index/TSESearch?word%B1%B1%BE%A9%B4%F3%D1%A7start1 因此HtmlInputs[1]就对应start键值对HtmlInputs[1].Value的值为1所以m_iStart设置为1即显示结果集的第1页。这里如果在新查询按钮的input标签中定义了name则URL会有三个键值对第二个键值对对应新查询按钮HtmlInputs[1]就不是start键值对了所以也会出错! 读者朋友们可以测试一下。 2、ShowMiddle //LB_c: strQuery为原始的用户查询串fUsedMsec为搜索耗时iRstNum为搜索结果的总条数start为显示结果集的第几页 bool CDisplayRst::ShowMiddle(string strQuery, float fUsedMsec, unsigned iRstNum, unsigned start) {//LB_c: iPageNum为结果总页数RstPerPage为每页显示的条数是一个常量unsigned iPageNum 0;if (iRstNum%RstPerPage 0){iPageNum iRstNum/RstPerPage;} else {iPageNum iRstNum/RstPerPage 1;}//LB_c: 显示提示信息: 用户查询的串搜索耗时共有多少条结果当前显示的是x到y条cout titleTSE Search/title\n font color#008080 size2 endl 查找: bfont color\#000000\ size\2\ strQuery /b/font endl 费时bfont color\#000000\ size\2\ fUsedMsec /font/b 毫秒,共找到bfont color\#000000\ size\2\ iRstNum /font/b 篇文档,下面是第 bfont color\#000000\ size\2\;if (iRstNum 0){cout 0/font/b到第 bfont color\#000000\ size\2\ 0/font/b个br endl;return true;}cout (start-1)*RstPerPage 1 /font/b到第 bfont color\#000000\ size\2\;if (iRstNum start*RstPerPage ) {cout start*RstPerPage /font/b个     endl;} else {cout iRstNum /font/b个     endl;}//LB_c: 供用户选择的结果页的链接cout 选择页面: ; for (unsigned i0; iiPageNum; i) {//LB_c: 当前页面的页号没有链接if (i1 start ) {cout i1 /a  ;}//LB_c: 其他页号提供链接注意链接是/yc-cgi-bin/index/TSESearch?word***start***后面进行说明【分析2】else{cout a href\/yc-cgi-bin/index/TSESearch?word strQuery start i1 \ i1 /a  ;}}return true; } 【分析2】第6节中提到过如果从搜索结果页面中进行新的搜索显示结果是正常的为什么呢?上面代码中说明了页号链接为yc-cgi-bin/index/TSESearch?word***start***形式显然第二个键值对是start所以HtmlInputs[1].Value就是用户点击的页号所以m_iStart的值也是正确的因此显示结果是正常的。 另外由页号链接可以看出用户点击页号以后又执行了一次cgi程序/yc-cgi-bin/index/TSESearch即又重新搜索了一次而不是直接在上次的结果集中取出对应页的内容进行显示这是为何呢? 这似乎太不合理了搜索结果集都已经有了只需简单的实现显示不同的页就行了。 3、ShowBelow bool CDisplayRst::ShowBelow(vectorstringvecQuery, setstring setRelevantRst, vectorDocIdx vecDocIdx, unsigned start) {cout ol endl;setstring::iterator it setRelevantRst.begin();unsigned iDocNumber0;//LB_c: start为用户选择的显示结果集的页号RstPerPage为每页显示的记录条数所以这里计算要显示的结果起止序号// 即显示iRstBegin到iRstEnd的结果记录。这里也可以看出start页号应该是从1开始的。unsigned iRstBegin (start-1)*RstPerPage;unsigned iRstEnd start*RstPerPage - 1;vectorstring vecRefUrl;vectorstring::iterator itVecRefUrl;cout tr bgcolor#e7eefc;bool bColor true;//LB_c: 打开原始的原始网页数据库用户点击网页快照时要从中读出网页并显示出来这里也说明网页快照是//存在服务器的历史数据而不是打开网址得到的实时网页。ifstream ifs(RAWPAGE_FILE_NAME.c_str());if (!ifs) {cout Cannot open RAWPAGE_FILE_NAME for input\n;return false;}for ( ; it!setRelevantRst.end(); it,iDocNumber ){//LB_c: 这两行判断序号在setRelevantRst中取出第iRstBegin到第iRstEnd条记录。if (iDocNumber iRstBegin ) continue;if (iDocNumber iRstEnd ) break;cout lifont colorblack size2 endl ;//LB_c: 获取结果记录的docidint docId atoi( (*it).c_str() );//LB_c: vecDocIdx在main函数中说明过是网页索引表(记录docid到offset的映射)这里获取前后两个网页在//原始网页数据库中的offset相减得到该网页的长度。int length vecDocIdx[docId1].offset - vecDocIdx[docId].offset;//LB_c: 建立缓冲区pContent从原始网页数据库文件中读出该网页数据char *pContent new char[length1];memset(pContent, 0, length1);ifs.seekg(vecDocIdx[docId].offset);ifs.read(pContent, length);char *s;s pContent;string url,tmp pContent;string::size_type idx1 0, idx20;//LB_c: 从网页数据中把url提取出来idx1 tmp.find(url: );if( idx1 string::npos ) continue;idx2 tmp.find(\n, idx1);if( idx1 string::npos ) continue;url tmp.substr(idx15, idx2 - idx1 - 5);//LB_c: vecQuery在main函数中介绍过是搜索串分割以后的关键词这里将这些关键词用连接起来//在网页快照中显示用于提示用户。string word;for(unsigned int i0; i vecQuery.size(); i){ word word vecQuery[i]; }word word.substr(1);////LB_c: 以下输出每条结果记录的具体内容包括: 网页的链接网页长度网页快照链接和网页内容摘要//LB_c: 网页快照链接到另一个cgi程序: /yc-cgi-bin/index/Snapshot即点击网页快照后由cgi程序///yc-cgi-bin/index/Snapshot来处理。后面进行说明【分析3】cout a href url url /a,  length font color#008080字节/font ,  a href/yc-cgi-bin/index/Snapshot? word word url url target_blank [网页快照]/a endl br;if (length 400*1024) { // if more than 400KBdelete[] pContent;continue;}//LB_c: 以下是从网页数据中提取正文然后从正文中提取网页摘要并进行显示。这里不详细解释。// skip HEAD int bytesRead 0,newlines 0;while (newlines ! 2 bytesRead ! HEADER_BUF_SIZE-1) {if (*s \n)newlines;elsenewlines 0;s;bytesRead;}if (bytesRead HEADER_BUF_SIZE-1) continue;// skip headerbytesRead 0,newlines 0;while (newlines ! 2 bytesRead ! HEADER_BUF_SIZE-1) {if (*s \n)newlines;elsenewlines 0;s;bytesRead;}if (bytesRead HEADER_BUF_SIZE-1) continue;CDocument iDocument;iDocument.RemoveTags(s);iDocument.m_sBodyNoTags s;delete[] pContent;string line iDocument.m_sBodyNoTags;CStrFun::ReplaceStr(line,  , );CStrFun::EmptyStr(line); // set \t\r\n to // abstractstring reserve;if ((unsigned char)line.at(48) 0x80) {reserve line.substr(0,48);}else{reserve line.substr(0,481);}reserve [ reserve ];unsigned int resNum 128;if (vecQuery.size() 1) resNum 256;for(unsigned int i0; i vecQuery.size(); i){string::size_type idx 0, cur_idx;idx line.find(vecQuery[i],idx);if (idx string::npos) continue;if (idx resNum ) {cur_idx idx - resNum;while ((unsigned char)line.at(cur_idx) 0x80 cur_idx!idx) { cur_idx ; }reserve line.substr(cur_idx1, resNum*2);}else{reserve line.substr(idx, resNum*2);}reserve ...;// highlightstring newKey font color#e10900 vecQuery[i] /font;CStrFun::ReplaceStr(reserve, vecQuery[i], newKey);}line reserve;cout line endl endl;// }cout /ol;cout brbrhrbr;cout © 2004 北大网络实验室brbr\n;cout /center/body\nhtml;return true; } 【分析3】关于网页快照功能的实现在Snapshot.cpp中本系列文章中不展开进行详细解释。但是有一点在这里指出一下从Snapshot.cpp源代码中得知快照功能处理的cgi程序根据传入的网页url从原始网页数据库中读出网页数据显示出来而查找网页数据也处理的很复杂先加载url索引文件再根据传入url的MD5值到文件中找出相应的docid然后从原始网页数据库中找到该网页的数据再进行显示。为何这样处理呢? 在ShowBelow中不是已经得到结果网页的网页数据了吗可以缓存下来需要显示网页快照时直接取出进行显示不就可以了吗? By:
http://www.dnsts.com.cn/news/234641.html

相关文章:

  • 昆明专业网站营销众筹网站建设方案模板
  • 网站建设完成后 下一步做什么美食网站设计论文
  • 有人做网站吗做徽章的网站
  • 商品网站做推广网站源码绑定域名
  • 永年区住房和城乡建设局网站保险代理公司
  • 注册网站要百度实名认证安不安全wordpress htaccess 404
  • 官方网站建设的方法有哪些方面济南做网站 推荐行知科技
  • 怎样做门窗网站长春市住房和城乡建设局网站
  • 网站开发运维机构设置外贸网站优化免费渠道
  • html5风格网站特色详情页设计流程
  • 贴心的广州网站建设化妆品网站建设实施背景
  • 西安网站开发公司caddy wordpress
  • 网站制作详情网站制作app
  • 360网站提交设计师发布作品的网站
  • 网站开发课设个人总结安卓安装wordpress
  • 安徽网站开发建设wordpress怎么建设网站
  • 上海做原创网站湖北网络建设公司网站
  • 小微企业网站建设怎么可以创建网站
  • 商城网站建设排名网站开发培训费多少钱
  • 海飞丝网站建设中面临的技术问题_并提出可行的技术解决方案网站建设费用设计
  • 云服务器建立多个网站吗查注册公司什么网站
  • 海口网站制作计划广州制作外贸网站
  • 解决方案网站排名苏州网页制作
  • 企业网站的开发与应用嘉兴网站排名优化公司
  • 路桥做网站南宁做网站推广nnsom
  • 怎样创造自己的网站html静态网站作品
  • 企业自建网站营销论文广州增城做网站
  • 网站的基本设置制作网页用的最多的图像文件格式
  • 辛集城乡建设管理局网站北京度seo排名
  • 邵阳做网站加强廉政教育网站建设