浏览模式: 标准 | 列表2005年10月的文章

我要学法语了~

RT. [idea] 每天进步多一点。。。

发如雪。。。

FreeBSD 6.0正式版本即将发布

FreeBSD 6.0将跳过RC2,正式版本即将发布 FreeBSD 6.0-RELEASE的定位是适用于生产环境的发行版本,它来自FreeBSD 6.0-STABLE分支。 FreeBSD 6.0增更多无线支持. FreeBSD的开发者Scott Long表示说:“我们增强无线支持的主要原因,是要让企业能够在他们的无线设备上更好的运行FreeBSD。”

无线设备制造商们可能喜欢使用FreeBSD胜过Linux,原因很简单,FreeBSD具有更多的加密访问控制以及安全等功能。

尽管6.0版本的FreeBSD增加了很多的无线功能,但它仍然不是面面俱到。比如,FreeBSD 6.0就缺乏网状网络功能(mesh network )。

新版本的FreeBSD对台式机以及笔记本用户的帮助也非常大。

FreeBSD 6.0还改进了文件系统。

随同FreeBSD 6.0上市,FreeBSD的开发网站也已改版。

暴雪前员工透露《暗黑3》 将是网游

注:已经结束的Blizzcon并未发表与《Diablo3》有关的消息,下文可以作为一个未证实的传言来阅读。

uploads/200510/31_231659_1031diablo01.jpg

根据gamespot的报道,前暴雪公司员工Chris Hartgraves最近向媒体透露,BlizzCon上很有可能会公布《暗黑破坏神3》(Diablo 3)。我们目前听到的消息是,《暗黑破坏神3》将是一款MMORPG,就像《魔兽世界》一样,主要背景是地狱势力入侵天堂。《暗黑破坏神3》将包含行会系统。总之《暗黑破坏神3》相当的华丽,这款游戏的主要场景都在天堂,这与一代和二代的暗黑风格是不同的。地狱势力意图侵占天堂,天堂的光明即将被地狱的黑暗所笼罩。基本上,将《魔兽世界》搬到《暗黑破坏神》的世界中,就很像《暗黑破坏神3》了。BlizzCon可能会有一个试玩展示。《暗黑破坏神3》将成为像《魔兽世界》一样优秀的网络游戏。 uploads/200510/31_231730_1031diablo02s.jpg

暴雪“前员工”关于《暗黑3》的爆料,未经暴雪证实

  《暗黑破坏神3》实际上已经开发了两年,暴雪要求每一位员工都必须严格保密,所以一直不为人知。前几天盛传《魔兽世界》将开发Xbox360版本,这其实是错误的,暴雪官方也做出了澄清,至少目前没有开发《魔兽世界》Xbox 360版本的计划,引起大家误会的“次世代”是指Windows的下一代操作系统,而不是指Xbox 360。不过,《暗黑破坏神3》确实计划开发Xbox 360版本!

uploads/200510/31_231820_1031diablo03s.jpg

用ASP连接各种数据库的方法

一、ASP的对象存取数据库方法

  在ASP中,用来存取数据库的对象统称ADO(Active Data Objects),主要含有三种对象:

引用自
Connection、Recordset 、Command   Connection:负责打开或连接数据   Recordset:负责存取数据表   Command:负责对数据库执行行动查询命令
  二、连接各数据库的驱动程序

  连接各数据库可以使用驱动程序,也可以使用数据源,不过我建议大家使用驱动程序,因为使用驱动程序非常方便、简单,而使用数据源比较麻烦。

  ODBC链接

  适合数据库类型 链接方式

引用自
access "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"
dBase "Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;" Oracle "Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;" MSSQL server "Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;" MS text "Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;extensions=asc,csv,tab,txt;Persist SecurityInfo=false;" Visual Foxpro "Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;" MySQL "Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"[/quote]  OLEDB链接

  适合的数据库类型 链接方式

引用自
access "Provider=microsoft.jet.oledb.4.0;data source=your_database_path;user id=admin;password=pass;" Oracle "Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;" MS SQL Server "Provider=SQLOLEDB;data source=machinename;initial catalog=dbname;userid=sa;password=pass;" MS text "Provider=microsof.jet.oledb.4.0;data source=your_path;Extended Properties′text;FMT=Delimited′"
  而我们在一般情况下使用Access的数据库比较多,在这里我建议大家连接Access数据库使用下面的方法:
引用自
dim conn set conn = server.createobject("adodb.connection") conn.open = "provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath("../db/bbs.mdb")
其中../db/bbs.mdb是你的数据库存放的相对路径!如果你的数据库和ASP文件在同一目录下,你只要这样写就可以了:
引用自
dim conn set conn = server.createobject("adodb.connection") conn.open = "provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath("bbs.mdb")

Alt属性和Title属性

# 原文:http://www.456bereastreet.com/archive/200412/the_alt_and_title_attributes/ # 翻译:JunChen # 首发:http://blog.handsbrain.com/junchen/archive/2005/05/21/3355.aspx # 版权:本文版权归译者Junchen所有,转载请先联系译者。

当浏览器卖主扭曲了标准并且自顾自的不按规则去做一些事,他们可能会造成一些问题,或者至少产生了混淆。例子之一就是一些浏览器处理alt属性(一般会被错误的称作alt标签)的方式,比如拥有大量用户的Windows的IE浏览器。

替换文字(alt text)并不是用来做提示(tool tip),或者更加确切的说,它并不是为图片提供额外说明信息的。相反地,title属性才应该用来为元素提供额外说明信息。这些信息在大部分图像浏览器里显示为提示(tool tip),虽然制造商可以任意采取其他方式渲染title属性的文字。

很多人看来对这两个属性感到迷惑(最近这个问题在Web Standards Group邮件列表里变多了), 所以我写下我的想法,如何去用它们。

alt属性

为不能显示图像、窗体或applets的用户代理(UA),alt属性用来指定替换文字。替换文字的语言由lang属性指定。 来源:How to specify alternate text.

Alt属性(注意是“属性”而不是“标签”)包括替换说明,对于图像和图像热点是必须的。它只能用在img、area和input元素中(包括applet元素)。对于input元素,alt属性意在用来替换提交按钮的图片。比如:<input type="image" src="image.gif" alt="Submit" />.

使用alt属性是为了给那些不能看到你文档中图像的浏览者提供文字说明。这包括那些使用本来就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器的用户。替换文字是用来替代图像而不是提供额外说明文字的。

在写替换文字前仔细想想,保证那些文字确实为那些看不到图像的人提供了说明信息,并且在上下文中有意义。对于那些装饰性的图片可以使用空的值(alt= "",引号中间没有空格),而不是使用不相关的替换文字比如“blue bullet”或者“spacer.gif”。不要忽略它,如果你忽略了,那么一些屏幕阅读器会直接阅读图像文件的文件名,那些文字浏览器,比如Lynx 会显示图像文件的文件名,而那对于你的浏览者就没什么用了。

包含文字的图像图片设置替换文字是最简单的,图像中包含的文字一般来说就可以作为alt属性值。

至于替换文字的长度,看看WCAG 2.0(网站内容可用性指南2.0)是怎么说的: Alt属性值得长度必须少于100个英文字符或者用户必须保证替换文字尽可能的短。

我把它理解为“尽可能短,尽需要长”。

即使你想让它显示为提示(tool tip),也不要给文字元素使用alt属性,这并不是它的用法。至今据我所知,那样做仅能在Windows的IE浏览器和古老的Netscape 4.*(windows版本)有效。没有一个Mac的浏览器会将它显示为提示(tool tip)。

当浏览器把替换文字显示为提示(tool tip)后,那些错误使用alt属性的行为也受到了鼓励。一些人开始写无意思的替换文字,因为他们趋向于认为它是一个额外的说明信息,而不是不能显示图像的替换。其他人可能不想让提示(tool tip)出现,然后就完全忽略了写alt属性值。这些错误的做法,都给那些不能看到图像的浏览者造成了困难。

额外的说明信息和非本质的信息请使用title属性。

title属性

title属性为设置该属性的元素提供建议性的信息。 来源: The title attribute.

title属性可以用在除了base,basefont,head,html,meta,param,script和title之外的所有标签。但是并不是必须的。可能这正是为什么很多人不明白何时使用它。

使用title属性提供非本质的额外信息。大部分的可视化浏览器在鼠标悬浮在特定元素上时显示title文字为提示信息(tool tip),然而这又由制造商来决定如何渲染title文字。一些浏览器会将title文字显示在状态栏里。比如早期版本的Safari浏览器。

title 属性有一个很好的用途,即为链接添加描述性文字,特别是当连接本身并不是十分清楚的表达了链接的目的。这样就使得访问者知道那些链接将会带他们到什么地方,他们就不会加载一个可能完全不感兴趣的页面。另外一个潜在的应用就是为图像提供额外的说明信息,比如日期或者其他非本质的信息。

title属性值可以比alt属性值设置的更长。不过要注意的是,有些浏览器会截断过长的文字(比如工具提示或其他)。比如Mozilla核心的浏览器只能显示最先的60个字符。这被认为是一个Mozilla bug,这是你要注意的。

使用前先考虑

我的建议是保证替换文字(alt text)精要。在大多数的应用里,都应该被留白,alt=""(注意两引号中没有空格)。想想那些图像,为那些浏览者提供了什么样的信息,你应该用什么文字去描述它,或者你该为看不到图像的人提供什么信息?将替换文字写成“照片:站在大楼外的CEO,穿着灰色西装和黑色领带,望着天”对于看不到图像的人真的有帮助?如果你觉得是,那么你就写吧。在很多情况下,我觉得让替换文字留白比较好。

对于title属性,比较难于给出严格的使用说明。我大部分用在那些不能自我释意的链接上,比如同一页面上的相同的链接文字,不同的链接页面。有时候也为一些按钮或者表单元素提供更多的说明文字。

更长的描述

当一个图片需要更加长的描述,而超过alt属性的限制,那么还有一些选择。

longdesc属性可以用来提供链接到一个包含图片文字描述的单独页面。这就意味着把浏览者链接到另外的页面,这可能会造成理解上的困难。另外浏览器对于longdesc属性的支持也是不一致的,并且不是非常好。

longdesc属性可以包含一个链接到当前文档的其他部分(锚点)来取代链接到另外的页面。在Accessibility footnotes, Andy Clarke很好的解释说明了如何应用。

描述链接(D links)可以用来补充longdesc。一个描述链接就是一个常规的链接,连接到含有替换文字的页面。该链接被置于图像的旁边,并且在所有浏览器中都是可是的。对于它的有效性人们有很多不同意见,我的个人意见不大喜欢这个注意。WCAG也是,在他们的工作草案HTML Techniques for WCAG 2.0中,描述链接是被“不赞成”的。

如果对图片的长的描述对于任何浏览者都有用,那么你得考虑让它简单的显示在同一个文档里面,而不是链接到其他页面里或者藏起来。这样每个人都可以阅读到。这是一种简单低技术含量的方法。

WEB标准的过渡方案

1.第一步改善 为页面添加正确的DOCTYPE   DOCTYPE是document type的简写。主要用来说明用的XHTML或者HTML是什么版本。浏览器根据DOCTYPE定义的DTD(文档类型定义)来解释页面代码。

(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"> PS:偷懒的办法是可以访问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/)。发现错误后逐个修改。

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规则,用来告诉表格单元、文本标签和所有其他元素怎么去显示。这样,不需要对每个<td>标签附带一些多余的、占用带宽的表现层的高、宽、对齐和背景颜色等等属性。只需要一个附着的标记(标记“menu”的id标记),你就可以在一个分离的样式表内为干净的、紧凑的代码标记进行特别的表现层处理。

中级改善我们这里先列主要的三点,但其中包含的内容和知识点非常多,需要我们逐步学习和掌握,直到最后实现完全采用CSS而不才用任何表格实现布局。

关于GG广告最精譬的文章

这是我在一个论坛上看到的,对于我和很多和我一样的刚刚开始或是正在做GG的站长朋友们,应该很有启发,而且不止是做GG,别的也一样有用!!

关于GG及网络广告的一些注意事项

我是比较早做站,99年开始做了。主要是做EADS,Click2net,Cj,亚交这些。也做过SEX站。呵呵 这里结合GG给大家说说一些注意事项,愿听就听不愿听随便拍砖。

1 不要做和广告商条款公然对立的操作。

任何广告商的条款一般都有一条保底条款"本公司保留无条件删除任何会员帐号且不支付帐户佣金的权利" 就这一条来说,广告商删帐号是不需要理由的,不过就算广告商真的要赖帐,除了公司倒闭不继续开下去 这种情况,一般总会找些理由,毕竟它也是要注意美誉度,如果各个网站报纸全都充斥着某某公司无故拖欠站长广告费用这种消息,还会有客户找他们做广告么?

所以不要公然作对,它正愁没正式借口k你,你要往枪口上撞不是找死么。 比如说,GG不允许鼓励用户点击,你非要在代码旁边写上"支持本站,请点击广告" GG不允许其他竞争性广告和GG代码放在同一页面上,你非要把sohu竞价,AzoogleAds 啥的放一起。 GG不愿理你就算了,要k你的话你没话说。

2 不要利用人云亦云的信息,比如坛子里前几天说的某某关键字值钱的问题,关键字EMU本身就是严重的违规。 在你傻乎乎的跟风EMU的时候,你有没有想过合理性? 比如目前明明是6月份,你的广告里都是来自于Christmas gift的点击 比如你一个站被系统收录了500个投放广告的页面,而点击都来自一个叫做domainhosting.html的页面,而那个页面除了两个关键词 domain hosting什么也没有。 比如你一个介绍服装的网站,点击都来自一个叫做loan的词汇 比如每天moutain view的时间一到零点你的广告点击就开始上升,一个小时以后下降了70% 比如你是中文的网页显示广告的ip都来自于亚洲,而点广告的ip都来自美国加拿大,而起还都点英文广告? 管理员就是猪也能分辨出你在EMU。

3 不要用代理服务器EMU 你认为高匿是不是很安全?扯蛋,如果你自己开个代理,点完关上,在没有实时代理反查时,我保证它安全。 如果是free proxy list搜来的, 或者外面几十刀包月的list趁早收手。代理反查早就是重要的防EMU措施了。 即便它没有开实时代理检测的话。你用代理猎手导入1000个代理,然后验证一下到google ad的连通性看看需要多少时间。我的adsl需要不到2分钟,你每天有没有1000个点击?GG只要每天花2分钟 就知道你有没有代理EMU了。你知不知道GG有多少台可以用于检查?我想它愿意的话,审核期的几天,它可以把全部站长的点 击ip都验证一下是否来自代理服务器。呵呵,不过用代理来拉显示量是可以考虑的,因为就算你点击率是 1%,1000个点击的pv数也是10w哦,这个验证的时间成本过高了,我想是不大可能通通做一遍的。

4 不要把所有的鸡蛋放在一个篮子里在可能的情况下,申请多个帐号,这个并不难,名字拼写你可以名在前姓在后,姓在前名在后,国内银行都认。 地址拼写么,中文,英文,混合,总之可以变很多种。地址你总有学校吧?要么有单位吧?家庭地址有吧? 实在不行几百块邮局租个信箱也可以解决多个地址吧。

你认为一个 2000刀的帐号和 10个200刀的帐号有什么区别?对于你而言,你麻烦多一些,托收手续费多一些。 但是对于广告商而言,2000刀的帐号被审核的力度肯定要大一些,你想想k掉一个2000刀的帐号,就多2000刀 的纯利润啊。要k掉10个200刀的,审核的工作量是不是更大?毕竟4刀的手续费,和200刀的money相比,还是 收入的安全性要重要一些吧。所以很多人有误解,他认为自己EMU手法高明,100刀收到了,胆子就大起来, 敢搞到500刀,等500刀的被k了,就跳出来说,MD某某广告商多余多少刀的就拒付,其实这种理解就是狭隘的, 你不彻底的想想,下次换个广告商还是被k。

5 不要以为支票到手就安全了 这是个误解,支票到手还需要托收时间的,托收到手人家还是有追索权的。我做了网络广告n久只被click2net退过票 (止付,钱没回来,票被退回来了,盖了个方章上书 "payment stopped")。 尽管几率不高,但是退票还是很严重的问题。这也和上面的不能放在一个篮子一个道理,一个公司开出去1000张支票要求退500张,你认为它在银行的信用评级会不会好?所以广告商仅会对少数有价值的进行退票,我想这个价值, 多少会取决于支票的amount吧。不过也不用太担心,被退票就是钱拿不到,另外交银行不到100块人民币的手续费而已,还没有坐牢的危险。

最后我的忠告,不要EMU 但是也要注意风险。 尽量钻政策或者可操作成本的空子。多动脑筋,多站在广告商那边想想合理性,出钱的没一个是傻子。

好啦~最后我祝大家多赚money

补充一点:要多多的好好的研究条款。 比如说你一个音乐站,流量蛮大的,代码也没EMU。 点击率也没有人工干预(注意是人工干预,不是点击率高低) 为什么被k号? 因为有mp3啊,gg可以说你提供的东西有版权纠纷啊。 所以你做一两百刀的时候可能每次都拿到钱,而流量上去了,收入多了,反而被k,这不是因为收入的问题,是因为gg的会员实在太多,所以在一两百刀的时候gg根本没有审核过你的页面内容,并不是你的站没问题。。。所以要好好读读条款,有些东西要控制。。。

用JSP构建动态网站(JSP基础)

基础的东西:

一、 什么是JSP JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,其网址为http: //www.javasoft.com/products/jsp。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页 (*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无 Plugin,无ActiveX,无Java Applet,甚至无Frame。本文将介绍利用JSP技术开发动态网页的方法,还将简要分析JSP技术和 Microsoft 公司的 ASP 技术的不同之处。 二、 如何安装和启动 为了实验JSP技术,首先需要建立运行环境,这个过程相当简单: 1、在 http://java.sun.com/jdk/处下载JDK(Java 2 SDK、Standard Edition、v 1.2.2)。 2、在http://java.sun.com/products/jsp/处下载JSWDK(JavaServer Web Development Kit 1.0.1)。Linux用户可以在ttp://jakarta.apache.org/处下载Tomcat 3.0。 3、安装 以Windows NT环境为例,JDK的安装是首先运行下载得到的jdk1_2_2-win.exe,然后修改系统环境参数,在PATH参数中加入[x:]\ jdk1.2.2\bin以及增加新的环境参数 CLASSPATH=[x:]\jdk1.2.2\lib\tools.jar,其中[x:]是安装JDK的硬盘符(c:、d: 等)。 JSWDK的安装仅需将jswdk1_0_1-win.zip带目录释放到硬盘根目录下(c:\、d:\ 等),然后就可以在硬盘上找到\jswdk-1.0.1\目录。将来如果不想保留JSWDK,删除这个目录就可以了,没有任何系统文件和注册表遗留问题。更详细的安装过程以及Solaris/Unix和Linux下JDK、Tomcat的安装可以参考下载得到的文件包中的安装说明。 4、启动 以Windows NT环境为例,在\jswdk-1.0.1\目录下执行startserver.bat,就可启动JSWDK中一个支持JSP网页技术的Web服务器。为了不与现有的Web服务器(例如IIS、PWS等)冲突,JSWDK的Web服务器使用了8080端口。在浏览器的地址栏中键入http://localhost:8080或者http://127.0.0.1:8080后,如果能看到 JSWDK 的欢迎页就说明JSP实验环境已经建成,可进入下一步实验。 要关闭Web服务器则运行stopserver.bat。 三、 JSP简单示例 JSWDK中包含的Web服务器的文档目录在缺省状态下为\jswdk-1.0.1\webpages,主文档在缺省状态下为index.html和 index.jsp。也就是说访问http://localhost:8080等于访问\jswdk-1.0.1\webpages\ index.html。用文本编辑器,如Windows中的记事本(Notepad),创建一个文本文件hi.jsp,保存在\jswdk-1.0.1\webpages\目录下,其内容如下: <html> <head> <title>Hi-JSP实验</title> </head> <body> <% String Msg = "This JSP test.";  out.print("Hello World!"); %> <h2><%=Msg%></h2> </body> </html>

在浏览器的地址栏中键入http://localhost:8080/hi.jsp,JSWDK中的Web服务器会执行JSP 文件中用<%以及%>括起来的Java程序语句,其中out.print是将文字输出到网页,语句<%= 变量 | 表达式 %>的作用是将Java Scriptlet中变量或表达式的值输出到网页,执行结果如图1。 图1 将变量Msg赋值为中文字符串,用<%= %>输出,或者用out.print输出中文字符串,则在英文版NT4及Redhat 6.1下实验运行结果正常,而在中文NT 4.0和中文98下,则反而会出现乱码。 四、 统一的网站界面 JSP支持服务器端的文件包含,即可以在一个JSP文件中插入多个其他文件,用来实现统一的网站界面。修改上述hi.jsp并另存为mypage.jsp: <%@ include file="top.htm" %> <% String Msg = "This JSP test."; out.print("Hello World!"); %> <h2><%=Msg%></h2> <%@ include file="bot.htm" %>

用可视化HTML编辑器,例如FrontPage、Dreamweave等设计网站的框架结构,将设计好的框架结构文件分割成两个部分,上面一半保存为top.htm, 下面一半保存为bot.htm,代码如下面所示: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>我的主页</title> </head> <body> <table border="0" width="100%" cellpadding="4" cellspacing="0" align="center"> <tr>   <td width="100%" colspan="2" bgcolor="#837ED1" align="center"><font face="隶书"   color="#FFFF00" size=5>主页标题</font>   </td> </tr> <tr>   <td bgcolor="#837ED1" width="15%" valign="top" align="center"><br>   <font color="#FFFFFF">选项</font><p><font color="#FFFFFF">选项</font></p>   <p><font color="#FFFFFF">选项</font></p>   <p><font color="#FFFFFF">......</font></p>   <p> </p>   </td>   <td width="85%" valign="top"> ----------------------------------------------------------------------------------------------------------------   </td> </tr> </table> </body> </html>

在浏览器的地址栏中键入http://localhost:8080/mypage.jsp,得到结果如图2。 图2 这样网站的界面就能统一起来,而设计者可以集中精力在功能模块上处理用户登录、连接数据库、发送email等等。每个JSP文件都有如下结构:

<%@ include file="top.htm" %> <% // 实现某些功能 %> <%@ include file="bot.htm" %>

维护网站的界面也相对比较容易,只要修改top.htm和bot.htm,就能影响到所有网页。

五、 服务器参数设置 JSWDK的Web服务器参数保存在\jswdk-1.0.1\webserver.xml中,用Windows写字板打开并编辑这个文件就可以修改缺省设置值。本节内容主要针对JSWDK,Linux下Tomcat的设置方法略有不同。 JSWDK缺省的文档目录是\jswdk-1.0.1\webpages,在此目录下可以建立子目录,例如\jswdk-1.0.1\ webpages\test,就能在浏览器中用http://localhost/test访问这个目录,为了使得这个子目录能执行JSP程序,还必须在 webserver.xml中的<Service></Service>节加入: <WebApplication id="test" mapping="/test" docBase="webpages/test" /> 并且,还必须建立\jswdk-1.0.1\webpages\test\WEB-INF目录,并从\jswdk-1.0.1\webpages \WEB-INF目录中复制过来以下四个文件:mappings.properties、mime.properties、 servlets.properties以及webapp.properties。完成这些过程,才能通知JSWDK的Web服务器执行http: //localhost/test 中的JSP程序。

六、 JavaBean JSP网页吸引人的地方之一就是能结合JavaBean技术来扩充网页中程序的功能。 JavaBean是一种Java类 (class),通过封装属性和方法成为具有某种功能或者处理某个业务的对象。JavaBean被组织成为package(数据包)以便进行管理,实际上就是把一组JavaBean一起放在某某目录中,每个类的定义前加上package某某,本例中为test。目录test必须放在系统环境 CLASSPATH包含的目录下,系统才能找到其中的JavaBean。JSWDK在缺省状态下将\jswdk-1.0.1\webpages\WEB- INF\jsp\beans\ 加入CLASSPATH。建立自己的JavaBean和package时,就放在这个目录中也不失为一种简易的方法。 下面介绍一个简单的JavaBean框架。用文本编辑器创建一个文本文件helloWorld.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目录下,其内容如下: package test; public class helloWorld { public String name = "My first bean"; public String getHi() { return "Hello from " + name; } }

helloWorld.java编辑好后,在DOS状态下,进入目录\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\,用JDK的javac命令编译helloWorld.java如下:

javac helloWorld.java

注意,Java是区分大小写的,在程序中,编译命令行中字母的大小写都不能写错。 编译成功就表示建立了一个JavaBean。下面看如何在JSP中使用这个JavaBean。用文本编辑器创建一个文本文件hi-bean.jsp,并保存在\jswdk-1.0.1\webpages\test目录下,其内容如下:

<html> <head> <title>JavaBean 试验</title> </head> <body> <jsp:useBean id="helloBean" scope="session" class="test.helloWorld" /> <%= helloBean.getHi() %> <hr> <% helloBean.name = "JSP"; out.print(helloBean.getHi()); %> </body> </html>

在JSP网页中,使用 <jsp:useBean ... />语法来创建JavaBean对象,并命名为helloBean。读者可从这个简单的例子中看出设置、获取JavaBean属性,以及调用 JavaBean方法的做法。在浏览器的地址栏中键入http://localhost:8080/test/hi-bean.jsp,得到结果如图3所示。 注意,如果修改和重新编译了JavaBean程序,则需要关闭和重新启动JSWDK的Web服务器以后修改的结果才会有效。如果仅仅修改JSP文件,则不用重新启动JSWDK的Web服务器.

虽然,这仅仅完成了一个非常简单的JavaBean框架,但是遵循这个框架可以设计出多种多样的JavaBean。例如,从JSP中访问数据通常就是通过JavaBean来实现的。

七、 数据库连接 数据库连接对动态网站来说是最为重要的部分,Java中连接数据库的技术是JDBC(Java Database Connectivity)。很多数据库系统带有JDBC驱动程序,Java程序就通过JDBC驱动程序与数据库相连,执行查询、提取数据等等操作。 Sun公司还开发了JDBC-ODBC bridge,用此技术Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如 Oracle、Sybase、MS SQL Server和MS Access等数据库。下面介绍如何用Access实现一个动态FAQ(常见问题及答案)网站。 首先建立一个Access数据库faq.mdb,其中的表faqs有字段id(自动增量型,并设为主关键字)、subject(文字型,长度200)、answers(备注型)。这个表中可以存放一些编程知识的常见问题及答案,如图4。 图 4

然后,在Control Panel(控制面板)的ODBC Datasource模块中加入System DSN,取名faq,并指向faq.mdb。 创建一个JavaBean,名为faq.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目录下。faq.java 的内容如下:

package test; import java.sql.*;

public class faq { String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; String sConnStr = "jdbc:odbc:faq"; Connection conn = null; ResultSet rs = null;

public faq() { try { Class.forName(sDBDriver); } catch(java.lang.ClassNotFoundException e) { System.err.println("faq(): " + e.getMessage()); } }

public ResultSet executeQuery(String sql) { rs = null; try { conn = DriverManager.getConnection(sConnStr); Statement stmt = conn.createStatement(); rs = stmt.executeQuery(sql); } catch(SQLException ex) { System.err.println("aq.executeQuery: " + ex.getMessage()); } return rs; } } 用上一节介绍的方法编译faq.java以后,在\jswdk-1.0.1\webpages\test目录下创建JSP文件faq.jsp,其内容如下:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>我的FAQ !</title> </head> <body> <p><b>这是我的FAQ!</b></p> <%@ page language="java" import="java.sql.*" %> <jsp:useBean id="workM" scope="page" class="test.faq" /> <% ResultSet RS = workM.executeQuery("SELECT * FROM faqs"); String tt; while (RS.next()) { tt = RS.getString("Answer"); out.print("<LI>" + RS.getString("Subject") + "</LI>"); out.print("<pre>" + tt + "</pre>"); } RS.close(); %> 在浏览器的地址栏中键入http://localhost:8080/test/faq.jsp,faq.jsp调用JavaBean,从数据库中读出内容并输出,得到结果如图5所示.

限于篇幅,本文不能列举JSP-JavaBean-JDBC/ODBC-数据库的复杂例子,读者可以从本文最后所推荐的网址中找到并下载到数据库连接范例。

八、 技术分析 Microsoft 公司的 ASP 技术也是动态网页开发技术。JSP和ASP从形式上非常相似,ASP程序员一眼就能认出<% %>以及<%= %>。但是深入探究下去会发现它们很多的差别,其中最主要的有以下三点: 1、 JSP的效率和安全性更高 ASP以源码形式存放,以解释方式运行,每次ASP网页调用都需要对源码进行解释,运行效率不高。另外,IIS的漏洞曾使得许多网站源程序大曝光,包括笔者以前用ASP开发的网站,ASP程序全部被人下载了去。 JSP在执行以前先被编译成字节码 (byte code),字节码由Java虚拟机(Java Virtual Machine)解释执行,比源码解释的效率高;服务器上还有字节码的Cache机制,能提高字节码的访问效率。第一次调用JSP网页可能稍慢,因为它被编译成Cache,以后就快得多了。同时,JSP源程序不大可能被下载,特别是JavaBean程序完全可以放到不对外的目录中。 2、 JSP的组件 (Component) 方式更方便 ASP通过COM来扩充复杂的功能,如文件上载、发送email以及将业务处理或者复杂计算分离出来成为独立可重复利用的模块。JSP通过JavaBean实现了同样的功能扩充。 在开发方面,COM的开发远比JavaBean复杂和繁琐,学会ASP不难,但学会开发COM可不简单。而JavaBean就简单多了,从本文上述示例中可以看出开发JavaBean很方便。 在维护方面,COM必须在服务器上注册,如果修改了COM程序,就必须重新注册,甚至必须关机和重新启动。JavaBean则不需要注册,放在 CLASSPATH包含的目录中就行了。如果JavaBean进行了修改,则JSWDK和Tomcat现在还需要关闭和重新运行(但不是关机),但开发者已经许诺将在以后的版本中做到不需要关闭服务器。 另外JavaBean是完全的OOP,可以针对不同的业务处理功能方便地建立一整套可重复利用的对象库,例如用户权限控制、email自动回复等等。 3、 JSP的适应平台更广 ASP目前仅适用于NT和IIS。虽然Unix下有ChiliSoft的插件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的组合来扩充,Unix下的COM实现起来非常困难。 JSP则不同,几乎所有平台都支持Java,JSP+JavaBean可以在所有平台下通行无阻。NT下IIS通过一个插件,例如JRUN (http://www3.allaire.com/products/jrun/)或者ServletExec(http: //www.newatlanta.com/),就能支持JSP。著名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在NT、 Unix和Linux上,因此JSP有更广泛的运行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的 Linux更是来势不小。 从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。笔者将在NT下实验的JSP网页原封不动地拿到Linux下就运行起来了,感觉非常满意。 九、 结论 综上所述,JSP可谓是构建动态网站的一个利器,故推荐给读者,祝愿你们掌握JSP,开发出优秀的网站。ASP程序员也请试一下,JSP里也有session、request、response/out等对象,亲自试试看如何。

Records:8812345678910»