动态网站制作指南
[  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 操作系统 > Linux教程
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Linux教程 ]的信息

本月文章推荐
.新手看招:RHEL5系统下配置YUM源.
.在linux7.1上安装jdk+tomcat+o.
.Ubuntu即将大举进入Linux服务器市.
.Linux 指令篇:文件系统--fsck.
.在Linux桌面环境下运行Photoshop.
.Linux 网管 123 --- 第10章. 升级.
.新闻观察:微软宣布支持Eclipse开.
.Ubuntu Server版系统的用户安全优.
.kernel hacking简单入门.
.Linux 核心--3.软件基础.
.2.6.24内核编译 initrd-2.6.24.i.
.微软发布服务器虚拟技术将支持Li.
.Linux中文件查找方法大全.
.Linux 指令篇:终端机管理--reset.
.Linux 指令篇:使用者资讯与管理-.
.新手看招:在Linux操作系统下创建.
.Linux 指令篇:DOS相容指令--mdel.
.Fedora 8 i386使用本地iso添加和.
.Linux Shadow-Password-HOWTO - .
.Fedora 8 JDK Eclipse Myeclispe.

Linux操作系统下的离线浏览器介绍

文章类别:Linux教程 | 发表日期:2006-11-5 |


  本文将介绍如何实现一个离线浏览器,以下载并浏览网上资源。

  镜像目录结构

  离线浏览下载到本地的网页时,需要解决的一个关键性问题就是“如何通过某一网页中的超级链接正确地定位其他网页”。比较简便的方法是在用户指定的本地目录下建立一个目标网站的完整或部分镜像。也就是按照文件在服务器端的目录结构保存下载的文件(参见下图)。这样一来,如果网页中的超级链接是以相对路径形式给出的,那么浏览程序就可以直接通过此相对路径访问到本地文件系统中的网页;如果网页中的超级链接是以绝对的URL形式给出的,那么必须在保存网页之前将这些URL转换为本地绝对路径。

  在网络中,一个有效的URL应该只有唯一的网络文件与之对应。因此,只要将网络上由URL所确定的层次关系,转化为本地文件系统中由目录路径所确定的层次关系,就可以建立网站在本地的完全或部分镜像。下面讨论建立镜像的具体方法。

  镜像路径算法

  首先,将下载网页时生成的URL拆分成协议类名(protocol)、IP地址(ipaddr)、目录名(directory)和文件名(file)。

  KDE环境提供了一个用于解析URL的类KURL,只需要定义一个对象KURL u((const char*)URL),就可以利用该类提供的成员函数将URL拆解为所需的部分。但是,此类未提供对ASP定位语句的支持,所以读者可以在KURL的基础上编写自己的拆解函数,以完善程序功能。

  需要注意的是,在同一网络文件的URL中,网址部分可能是以域名地址形式给出的,也可能是以IP 地址形式给出的。为了避免将同一文件镜像到不同目录下,如果网址是域名形式的,应该使用socket函数gethostbyname ()将其转换为IP地址。

  其次,确定网络文件在本地的镜像路径。假设用户指定的本地目录存放在字符数组LDir中,则代码如下:

  

QString LocalDir = LDir + “/” + protocol + “_” + ipaddr + directory; 

QString LocalPath = LocalDir + file;

  这样一来,如果一个网络文件的URL是http://11.171.38.32/webfile/relax/index.html,而用户指定的本地目录是/home/yangjx/web,则此网页文件对应的镜像路径为/home/yangjx/web/http_11.171.38.32/webfile/relax/index.html。

  处理下载文件

  有了镜像路径生成算法,接下来要对下载的文件做如下处理:

  ● 如果是网页文件,必须扫描文件,并将其中以绝对URL形式给出的超级链接替换成用镜像路径生成算法产生的本地绝对路径,而那些以相对路径形式给出的超级链接则保持不变;

  ● 建立相应的目录,并保存文件到绝对路径所指定的位置。

  在建立目录时,由于Linux提供的目录创建函数int mkdir(char * dir, int mode)只能在已存在的目录下建立一级子目录,所以要用“递归”方式构造一个目录创建函数:

  

static int CDirTools:: Mkdir(QString dir,int mode) 

QString parentdir; 

 if(dir.isEmpty()) 

//如果dir为空串返回失败 

return -1; 

 int result = mkdir(dir,mode); 

 if(result == -1 && errno == EEXIST) //如果dir目录已经存在,则返回1 

return 1; 

 if(result != -1) 

//如果建立成功,则返回0 

  return 0; 

 else 

 {//否则先创建其父目录 

  KURL u((const char *)dir); 

//取得dir的父目录   

parentdir = url.directory(false); 

  if(Mkdir(parentdir) == -1) 

//如果父目录创建失败,则返回-1;否则再次创建本目录 

   return -1; 

  if(mkdir(dir,mode) == -1) 

//如果本目录创建失败,则返回-1 

  return -1; 

 } 

}
  编程实现
  Linux操作系统的桌面环境KDE提供了一个文件管理器KFM,它和IE一样既可以浏览本地目录和文件,也可以浏览网页,并且KFM还提供了C++编程接口: KHTMLView类。我们可以创建一个KHTMLView类的子类CHtmlView来浏览下载的网页文件。

  1.在窗口中显示HTML页面

  

int CHtmlView:: showPage(const char * path) 

{ //显示path指定的文件中所包含的HTML页面 

 if(path == NULL) 

  return -1; 

 else 

 { 

  FILE * pfile; 

//打开包含页面的文件 

  if((pfile = fopen((const char*)path,“rb”)) != NULL) 

  { 

   int blocklen = 0x10000; 

   char * c = new char[blocklen+1]; 

   KURL u((const char*)path); 

//类成员函数,清除窗口内原有内容,并初始化窗口,准备显示新页面 

  begin( u.directoryURL() ); 

   while(1) 

   { 

//读出网页文件的内容 

   int len = fread(c,sizeof(char),blocklen,pfile); 

//类成员函数,将读取的内容写入KHTMLView类的缓冲区 

write(c); 

//文件读取完毕后退出循环 

if(len < blocklen) 

   break; 

   } 

//类成员函数,标示HTML页面已经全部写入缓冲区 

   end(); 

//类成员函数,分析缓冲区中的HTML代码 

   parse(); 

//类成员函数,显示HTML页面 

   show(); 

   delete [] c; 

  } 

  else return -1; 

return 0; 

}

  2.响应超级链接的点击

  定义鼠标事件处理函数mousePressedHook()覆盖KHTMLView类中的同型虚拟函数。当用户用鼠标点击网页中的超级链接时,该函数将被调用。被点击的超级链接的地址会作为参数自动传入该函数。由于网页文件中的所有超级链接已做过本地镜像处理,所以,只要该链接所指向的文件已经被下载程序正确地下载到本地,那么使用showPage函数就能调入并显示此页。

  

bool CHtmlView:: mousePressedHook 
( const char* _url, const char *_target, 
QMouseEvent *_ev, bool _isselected ) 

KHTMLView:: mousePressedHook(_url,_target,_ev,_isselected); 

//显示被点击的页面 

showPage(_url); 

return true; 

}

  在生成Kdevelop的窗口应用程序框架的View类中定义一个ChtmlView对象,将View类作为其父窗口:

  

ChtmlView *m_htmlview = new ChtmlView(this,“HtmlViewer”); 

/*调用showPage函数显示path指向的网页文件*/ 

m_htmlview-> showPage(path);

  此外,我们还可以在此基础上加入更多的功能,依靠KDevelop所提供的丰富的图形用户接口类将浏览器设计得更美观易用。


上一篇:Linux环境下实现组件返回消息的技巧 人气:3474
下一篇:口袋里的Linux:在您的U盘上运行SLAX 人气:5130
点击此处浏览全部Linux的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-5-16 乘风多用户PHP统计系统 v3.4
2008-5-16 轩溪下载系统 v3.78 build 0515
2008-5-16 普沙B2B 浙江省商贸网 v2.0
2008-5-16 asp抓蜘蛛的小程序 v1.0
2008-5-16 齐齐乐网私服发布站 仿haosf新版
2008-5-16 IssTech信息反馈系统 v1.0
2008-5-16 自由领域大头贴(js接口版) 修正版
2008-5-16 医院网站系统
2008-5-16 智拓-分类信息管理系统 v5.0
2008-5-7 Windows XP SP3 官方英文版
2008-5-7 Windows XP SP3 官方香港中文版
2008-5-7 Windows XP SP3 官方繁体中文版
2008-5-7 Windows XP SP3 官方简体中文版
2008-4-30 Multiple Unzip Wizard 1.02
2008-4-30 Multiple Unrar Wizard 1.0.0
2008-4-30 WinZip Install/Try/Uninstall a
2008-4-30 ZIP压缩文件修复器WzipFix 2.0
2008-4-30 Pentazip 6.01 Build 189 For Wi
  发表评论
姓 名: 验证码: [ 全部贴吧 ] [ 浏览评论 ]
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号