转自:
http://gnu.freehostingguru.com/gpl/

引用:
声明!
这是一份 GNU 通用公共授权非正式的中文翻译。它并非由自由软件基金会所发表,亦非使用 GNU 通用公共授权的软件的法定发布条款─只有 GNU 通用公共授权英文原文的版本始具有此等效力。然而,我们希望这份翻译能帮助中文的使用者更了解 GNU 通用公共授权。

This is an unofficial translation of the GNU General Public License into Chinese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL--only the original English text of the GNU GPL does that. However, we hope that this translation will help Chinese speakers understand the GNU GPL better.



GNU 通用公共授权

第二版, 1991年6月

著作权所有 (C) 1989,1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

允许每个人复制和发布本授权文件的完整副本,
但不允许对它进行任何修改。

导言

大多数软件授权声明是设计用以剥夺您共享与修改软件的自由。相反地,GNU通用公共授权力图保证您分享与修改自由软件的自由-确保软件对所有的使用者都是自由的。通用公共授权适用于大多数自由软件基金会的软件,以及任何作者指定使用本授权的其他软件。(有些自由软件基金会的软件,则适用GNU函式库通用公共授权规定。)您也可以让您的软件适用本授权规定。

当我们在谈论自由软件时,我们所指的是自由,而不是价格。我们的通用公共授权是设计用以确保使您拥有发布自由软件备份的自由(以及您可以决定此一服务是否收费),确保您能收到源码或者在您需要时能得到它,确保您能变更软件或将它的一部分用于新的自由软件;并且确保您知道您可以做上述的这些事情。

为了保障您的权利,我们需要作出限制:禁止任何人否认您上述的权利,或者要求您放弃这些权利。如果您发布软件的副本,或者对之加以修改,这些限制就转化成为您的责任。

例如,假如您发布此类程序的副本,无论是免费或收取费用,您必须将您所享有的一切权利给予收受者。您也必须确保他们也能收到或得到原始程序码。而且您必须向他们展示这些条款的內容,使他们知到他们所享有的权利。

我们采取两项措施來保护您的权利:(1)以著作权保护软件,以及(2)提供您本授权,赋与您复制、发布并且/或者修改软件的法律许可。

同时,为了保护作者与我们(按:指自由软件基金会),我们想要确定每个人都明白,自由软件是沒有担保责任的。如果软件被他人修改并加以传播,我们需要其收受者知道,他们所得到的并非原始版本,因此由他人所引出的任何问题对原作者的声誉将不会有任何的影响。

最后,所有自由软件不断地受到软件专利的威胁。我们希望能避免自由软件的再发布者以个人名义取得专利授权而使程序专有化的风险。为了防止上述的情事发生,我们在此明确声明:任何专利都必须为了每个人的自由使用而核准,否则就不应授与专利。

以下是有关复制、发布及修改的明确条款及条件。

复制、发布与修改的条款与条件

0. 凡著作权人在其程序或其他著作中声明,该程序或著作会在通用公共授权条款下发布,本授权对其均有适用。以下所称的"程序",是指任何一种适用通用公共授权的程序或著作;并且一个"基于本程序的著作",则指本程序或任何基于著作权法所产生的衍生著作,换言之,是指包含本程序全部或一部的著作,不论是完整的或经过修改的程序,以及(或)翻译成其他语言的程序(以下"修改"一词包括但不限于翻译行为在內)。被授权人则称为"您"。

本授权不适用于复制、发布与修改以外的行为;这些行为不在本授权范围内。执行本程序的行为并不受限制,而本程序的输出只有在其內容构成基于本程序所生的著作(而非只是因为执行本程序所造成)时,始受本授权拘束。至于程序的输出內容是否构成本程序的衍生著作,则取决于本程序的具体用途。

1. 您可以对所收受的本程序源代码,无论以何种媒介,复制与发布其完整的复制物,然而您必须符合以下要件:以显著及适当的方式在每一份复制物上发布适当的著作权标示及无担保声明;维持所有有关本授权以及无担保声明的原貌;并将本授权的副本连同本程序一起交付予其他任何一位本程序的收受者。

您可以对让与复制物的实际行为收取一定的费用,您也可以自由决定是否提供担保以作为对价的交换。

2. 您可以修改本程序的一个或数个复制物或者本程序的任何部份,以此形成基于本程序所生的著作,并依前述第一条规定,复制与发布此一修改过的程序或著作,但您必须符合以下要件:

(a) 您必须在所修改的挡案上附加显著的标示,阐明您修改过这些挡案,以及修改日期。

(b) 您必须就您所发布或发行的著作,无论是包含本程序全部或一部的著作,或者是自本程序或其任何部份所衍生的著作,整体授权所有第三人依本授权规定使用,且不得因此项授权行为而收取任何费用。

(c) 若经过修改的程序在执行时通常以交互方式读取命令时,您必须在最常被使用的方式下,于开始进入这种交互式使用时,列印或展示以下宣告:适当的著作权标示及无担保声明(或者声明您提供担保)、使用者可以依这些条件再发布此程序,以及告知使用者如何浏览本授权的副本。(例外:若本程序本身是以交互的方式执行,然而通常却不会列印该宣告时,则您基于本程序所生的著作便无需列印该宣告。)

这些要求对修改过的著作是整体适用的。倘著作中可识別的一部份并非衍生自本程序,并且可以合理地认为是一独立的、个別的著作,则当您将其作为个別著作加以发布时,本授权及其条款将不适用于该部分。然而当您将上述部分,作为基于本程序所生著作的一部而发布时,整个著作的发布必须符合本授权条款的规定,而本授权对于其他被授权人所为的许可及于著作整体。

因此,本条规定的意图不在于主张或剥夺您对于完全由您所完成著作的权利;应该說,本条规定意在行使对基于程序所生的之衍生著作或集合著作发布行为的控制权。

此外,非基于本程序所生的其他著作与本程序(或基于本程序所生的著作)在同一储存或发布的媒介上的单纯聚集行为,并不会使该著作因此受本授权条款约束。

3. 您可以依前述第一、二条规定,复制与发布本程序(或第二条所述基于本程序所产生的著作)的目的码或可执行形式,但您必须符合以下要件:

(a) 附上完整、相对应的机器可判读源码,而这些源码必须依前述第一、二条规定在经常用以作为软件交换的媒介物上发布;或

(b) 附上至少三年有效的书面报价文件,提供任何第三人在支付不超过实际发布源码所需成本的费用下,取得相同源码的完整机器可读复制物,并依前述第一、二条规定在经常用以作为软件交换的媒介物上发布该复制物;或

(c) 附上您所收受有关发布相同源码的报价资讯。(本项选择仅在非赢利发布、且仅在您依前述b项方式自该书面报价文件收受程序目的码或可执行形式时,始有适用。)

著作的源码,是指对著作进行修改时适用的形式。对于一个可执行的著作而言,完整的源码是指著作中所包含所有模组的全部源码,加上相关介面的定义挡,还加上用以控制该著作编译与安裝的描述。然而,特別的例外情况是,所发布的源码并不需包含任何通常会随著所执行作业系统的主要组成部分(编译器、核心等等)而发布的软件(无论以源码或二进位格式),除非该部分本身即附加在可执行程序中。

若可执行码或目的码的发布方式,是以指定的地点提供存取位置供人复制,则提供可自相同地点复制源码的使用机会,视同对于源码的发布,然而第三人并不因此而负有将目的码连同源码一起复制的义务。

4. 除本授权所明示的方式外,您不得对本程序加以复制、修改、再授权或发布。任何试图以其他方式进行复制、修改、再授权或者发布本程序的行为均为无效,并且将自动终止您基于本授权所得享有的权利。然而,依本授权规定自您手中收受复制物或权利之人,只要遵守本授权规定,他们所获得的授权并不会因此终止。

5. 因为您并未在本授权上签名,所以您无须接受本授权。然而,除此之外您別无其他修改或发布本程序或其衍生著作的授权许可。若您不接受本授权,则这些行为在法律上都是被禁止的。因此,藉由对本程序(或任何基于本程序所生的著作)的修改或发布行为,您表示了对于本授权的接受,以及接受所有关于复制、发布或修改本程序或基于本程序所生著作的条款与条件。

6. 每当您再发布本程序(或任何基于本程序所生的著作)时,收受者即自动获得原授权人所授予依本授权条款与条件复制、发布或修改本程序的权利。您不得就本授权所赋予收受者行使的权利附加任何进一步的限制。您对于第三人是否履行本授权一事,无须负责。

7. 若法院判决、专利侵权主张或者其他任何理由(不限于专利争议)的结果,使得加诸于您的条件(无论是由法院命令、协议书或其他方式造成)与本授权规定有所冲突,他们并不免除您对于本授权规定的遵守。若您无法同时符合依本授权所生义务及其他相关义务而进行发布,那么其结果便是您不得发布该程序。例如,若专利授权不允许其他人直接或间接取得复制物,通过您以免付权利金的方式再发布该程序,您唯一能同时滿足该义务及本授权的方式就是徹底避免进行该程序的发布。

若本条任一部份在特殊情况下被认定无效或无法执行时,本条其余部分仍应适用,且本条全部于其他情况下仍应适用。

本条的目的并不在诱使您侵害专利或其他財产权的权利主张,或就此类主张的有效性加以争执;本条的唯一目的,是在保障藉由公共授权惯例所执行自由软件发布系统的完整性。许多人信赖该系统一贯使用的应用程序,而对经由此系统发布的大量软件有相当多的贡献;作者/贡献者有权决定他或她是否希望经由其他的系统发布软件,而被授权人则无该种选择权。

本条的用意在于将本授权其他不确定的部分徹底解释清楚。

8. 若因为专利或享有著作权保护的介面问题,而使得本程序的发布与/或使用局限于某些国家时,则将本程序置于本授权规范之下的原著作权人得增列明确的发布地区限制条款,将这些国家排除在外,而使发布的许可只限在未受排除的国家之內或之中。在该等情况下,该限制条款如同以书面方式订定于本授权內容中,而成为本授权的条款。

9. 自由软件基金会得随时发表通用公共授权的修正版与/或新版本。新版本在精神上将近似于目前的版本,然而在细节上或所不同以因应新的问题或状况。

每一个版本都有个別的版本号码。若本程序指定有授权版本号码,表示其适用该版本或是"任何新版本"时,您可以选择遵循该版本或任何由自由软件基金会日后所发表新版本的条款与条件。若本程序并未指定授权版本号码时,您可以选择任一自由软件基金会所发表的版本。

10. 若您想将部分本程序纳入其他自由程序,而其发布的条件有所不同时,请写信取得作者的许可。若为自由软件基金会享有著作权的软件,请写信至自由软件基金会;我们有时会以例外方式予以处理。我们的决定取决于两项目标:确保我们自由软件的所有衍生著作均维持在自由的状态,并广泛地促进软件的分享与再利用。

无担保声明

11. 由于本程序是无偿授权,因此在法律许可范围內,本授权对本程序并不负担保责任。非经书面声明,著作权人与/或其他提供程序之人,无论明示或默许,均是依「现况」提供本程序而并无任何形式的担保责任,其包括但不限于,就适售性以及特定目的的适用性为默示性担保。有关本程序品质与效能的全部风险均由您承担。如本程序被证明有瑕疵,您应承担所有服务、修复或改正的费用。

12. 非经法律要求或书面同意,任何著作权人或任何可能依前述方式修改与/或发布本程序者,对于您因为使用或不能使用本程序所造成的一般性、特殊性、意外性或间接性损失,不负任何责任(包括但不限于,资料损失,资料执行不精确,或应由您或第三人承担的损失,或本程序无法与其他程序运作等),即便前述的著作权人或其他人已被告知该等损失的可能性时,也是一样。

-条文结束-


您的新程序该如何采用这些条款?

如果您开发了一个新程序,并且希望能够让它尽可能地被大众使用,达成此目的的最好方式就是让它成为自由软件,任何人依这些条款规定都能就该软件再为发布及修改。

为了做到这一点,请将以下声明附加到程序上。最安全的作法,是将声明放在每份源码挡案的起始处,以有效传达无担保责任的讯息;且每份挡案至少应有「著作权」列以及本份声明全文位置的提示。

用一行描述程序的名称与其用途简述
著作权所有(C) 〈年份〉〈作者姓名〉

本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。

本程序是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权。

您应已收到附随于本程序的GNU通用公共授权的副本;如果没有,请写信至自由软件基金会:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA。

同时附上如何以电子及书面信件与您联系的资料。

若程序是以交互方式运作时,请在交互式模式开始时,输出简短提示如下:

Gnomovision 第69版,著作权所有 (c) 年份 作者姓名
Gnomovision不负担保责任,欲知详情请键入'show w'。这是一个自由软件,欢迎您在特定条件下再发布本程序;欲知详情请键入'show c'。

所假设的指令'show w'与'show c'应显示通用公共授权的相对应条款。当然,您可以使用'show w'与'show c'以外的指令名称;甚至以鼠标键击或选菜单方式进行-只要是合于您程序需要的方式都可以。

如有需要,您亦应取得您的雇主(若您的工作为程序设计師)或学校就本程序所签署的「著作权放弃承諾书」。其范例如下,您只要修改姓名即可:

Yoyodyne公司,茲此放弃James Hacker所写之'Gnomovision'程序(该程序产出编译器所需资讯)所有的著作权利益。

〈Ty Coon公司签章〉,1989年四月一日

Ty Coon公司,副总裁

本通用公共授权并不允许您将本程序并入专有程序中。若您的程序是一子程序函数库时,您可能认为允许专有应用程序与该函式库相连结会更有帮助。若这是您所想做的,请使用GNU函式库通用公共授权代替本授权。

在phpx.com上原载,是Longbill 's 的原创
http://www.phpx.com/happy/thread-122499-1-1.html上有很多讨论


   1。理论
   在普通HTTP上,一般表单中的密码都是以明文方式传到服务器进行处理的。这无疑给了坏人以可乘之机!这里我们就说说怎么传输密码才是安全的!
   与其传输密码本身,到不如传输其加密后的形式。MD5是个不错的选择。第一,不同的资源几乎不可能生成相同的MD5摘要,第二,MD5的编码方式是不可逆推的。有了这些特性,我们就可以让MD5摘要公开的在Internet上传输,而不必担心密码被坏人知道。然后在服务端也将密码通过同样的方式加密,最后比较这两个字符串。
   然而,我们不能为了登陆而将密码md5后直接通过Internet传输,因为坏人虽然不会知道我们的密码,但肯定会知道这个特殊的字符串可以授权他们访问我们的网站!
   这就是公匙和私匙要解决的问题,首先由服务器提供一个随机字符串,然后客户端将这个随机字符串和密码相加后再加密!
   每次登陆时,服务器会产生不同的随机字符串,这样你的密码没有变,但是通过上面的方法加密后的MD5摘要却完全不同。这样就算坏人得到了这些MD5摘要,他们也不可能分析出你的密码!
   这种方法中,服务器提供的随机字符串叫做"公匙",寿命很短,并可以被任何人利用;你的密码叫做"私匙",寿命很长,而且永远也不会被人知道。
   2。实现
   客户端Javascript并没有提供现成的md5算法,但我们在 google 上用 "md5 javascript" 搜索,就可以得到很多md5在Javascript上实现的例子。
   在PHP中我就不用多说了,直接用md5()这个函数就可以搞定!随机字符串我们可以用session来存储(PHP就是强啊~~)
   3。注意
   在JS中,中文都是UTF-8格式的,所以如果你的密码是中文,而且存储在服务端的密码的编码方式是GB2312,那么两个密码加密后的字符串是完全不同的!



# 1: November 17, 2006, 2:10 pm, 炎藤 said:


每次登陆时,服务器会产生不同的随机字符串,这样你的密码没有变,但是通过上面的方法加密后的MD5摘要却完全不同。

这样的话,第一次的密码不是和第二次登入的密码完全不同了吗?
那么用户第二次登入的时候不就总失败了?

不好意思我是初学者,不知道这方面的内容
请多指教

加我MSN lwjct@hotmail.com
QQ: 44219991




# 2: November 17, 2006, 2:38 pm, longbill said:


输入的密码每次都是一样的,只是每一次在网络中传输的密码字符串不同而已,这样除非别人知道你的密码,否则不会骗过服务器的

火车上,一个女孩靠在男孩肩膀上睡着了,这是一个故事;一个男孩靠在女孩肩膀上睡着了,这是一个事故;我就纳了闷,为什么我的生活中处处充斥着事故而不是故事!(

项目名称:**全球旅游电子商务平台
人员技能要求:
Struts:     1年以上
Hibernate:  1年以上
JAVA开发:  3年以上
Oracle:     2年以上
Eclipse:    1年以上
下面是有则更好:
Spring、AJAX、CVS、JMS、JSF。
薪水待遇:5000~7000人民币   项目周期:6个月
工作地点:北京  面试时间:11月28日~12月1日
---------------------------------------
合适的请联系(不符合者勿扰)不在群里聊.单独找我
问题询问QQ号码:   267025822
电话:    010-58608128-1007 联系人:赵先生
邮箱:    qianyan@hws.com.cn                    
(请先发送简历,我们会尽快和您取得联系)  

先帝虑汉、贼不两立,王业不偏安,故托臣以讨贼也。以先帝之明,量臣之才,固知臣伐贼才弱敌强也。然不伐贼,王业亦亡,惟坐而待亡,孰与伐之?是故托臣而弗疑也。臣受命之日,寝不安席,食不甘味,思惟北征,宜先入南,故五月渡泸,深入不毛,并日而食。臣非不自惜也,顾王业不可偏安於蜀都,故冒危难以奉先帝之遗意。而议者谓为非计。今贼适疲於西,又务於东。兵法乘劳,此进趋之时也。谨陈其事如左:
Hps4jHi.Bkq5w纯真时空论坛 bbs.cz88.net
p0Ky/LEP4C2M"GFX
   高帝明并日月,谋臣渊深;人然陟险被创,危然後安。今陛下未及高帝,谋臣不如良、平;而欲以长策取胜,坐定天下。此臣之未解一也。刘繇、王朗各据州郡,论安言计,动引圣人;群疑满腹,众难塞胸;今岁不战,明年不征;使孙策坐大,遂并江东,此臣之未解二也。曹操智计,殊绝於人,其用兵也,拂孙吴;然困於南阳,险於乌巢,危於祁连,逼於黎阳,几败北山,殆死潼关,然後伪定一时尔。况臣才弱,而欲以不危而定之,此臣之未解三也。曹操五攻昌霸不下,四越巢湖不成;任用李服而李服图之;策任夏侯而夏侯败亡。先帝每称操为能,犹有此失,况臣驽下,何能必胜?此臣之未解四也。自臣到汉中,中间年耳;然丧赵云、阳群、马玉、阎芝、丁立、白寿、刘郃、邓铜等及曲长、屯将七十馀人,突将无前,叟,青羌、散骑武骑一千馀人:此皆数十年之内所纠合四方之精锐,非一州之所有;若复数年,则损三分之二也,当何以图敌?此臣之未解五也。今民穷兵疲,而事不可息;事不可息,则住与行,劳费正等;而不及早图之,欲以一州之地,与贼持久。此臣之未解六也。纯真时空论坛|3WOV8lMje
 纯真,QQ,时尚,悠闲,IPb9ZH2_*K^#WX*B
   夫难平者,事也。昔先帝败军於楚,当此时,曹操拊手,谓天下已定。然後先帝东连吴、越,西取巴、蜀,举兵北征,夏侯授首,此操之失计而汉事将成也。然後吴更违盟,关羽毁败,秭归蹉跌,曹丕称帝。凡事如是,难可逆料。臣鞠躬尽瘁,死而後已,至於成败利钝,非臣之明所能逆睹也。

      有些事情干嘛要说出来呢,本来是那样的你就不能不换个方式方法说ma>为何要这样说,伤我的至尊,但是,我会嘱咒你的,哈哈,没准你丫的是我第二,我也很爱说出来的而且很直白的那种,嘻嘻,我考。

          没有亲自去看招聘会,但听同学说很多人,岗位&人数比例为2%,呵呵,可能由于:
1.刚开始,去看看的人多。
2.历来都是僧多粥少。
3.就业历来都很火爆。

       本人现在很忙,没有办法升级论坛和del调那个垃圾信息,也没有时间去找论坛版主来管理,但是等我考完研后可能会大刀阔斧的改变这一现状!
    再就是本站的访问量慢慢上升,可能会打一点小广告,等等。还有就是要定一个方向,可能就不会这么富含有个性了,呵呵,还望大家尽量,嘻嘻◎
                                                      站长:向东   #Email:xdy108@126.com

                                                                          2006-11-25

[p align=center]*************************************
本贴从网上搜索得来,是我初学jsp找到的最好的一篇配置指南了。原作者已无法确定,不过在此也略表感谢。当初,我遍历tomcat英文文档依然无法找到servlet的安装配置的方法(本人e文水平有限),后来看到这贴子一时豁然开朗。值得推介。
*************************************

j2sdk1.5下载地址:http://java.sun.com
tomcat5.5下载地址:http://jakarta.apache.org/site/binindex.cgi
j2sdk1.5安装目录:c:\j2sdk1.5.0
tomcat5.5安装目录:c:\tomcat

一.配置j2sdk1.5.0
1.windows 2000 server系列下配置
我的电脑->属性->高级->环境变量
追加变量名:java_home 变量值:c:\j2sdk1.5.0
追加变量名:path下变量值:%java_home%\bin;
追加变量名:classpath下变量值:.;%java_home%\lib;或.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar
*注:“.;”代表当前目录下的所有引用,“%...%”变量宏替换。

2.windows 9x系列下配置
用记事本编辑autoexec.bat,加入下列语句:
set java_home=c:\j2sdk1.5.0;
set path=%path%;%java_home%\bin;
set classpath=.;%java_home%\lib;或.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar

3.windows xp、2003 server 下配置
以上两种方法皆可

4.运行

a.用记事本编辑以下代码,并保存为helloworld.java:
public class helloworld{
public static void main(string[] args){
system.out.println("hello,world!");
}
}

b.开始->运行->cmd
在控制台中切换到当前目录:
javac helloworld.java
java helloworld
你就会在控制台上看见输出的hello,world!

*注:javac是编译命令,它把helloworld.java编译成helloworld.class
  java就是解释命令,jvm把helloworld.class解释执行
至此java运行环境配置、调试完成。

二.配置tomcat5.5
1.windows 2000 server系列下配置
我的电脑->属性->高级->环境变量
追加变量名:tomcat_home 变量值:c:\tomcat
追加变量名:classpath下变量值:%tomcat_home%\common\lib;

2.windows 9x系列下配置
用记事本编辑autoexec.bat,加入下列语句:
set tomcat_home=c:\tomcat;
set classpath=%classpath%;%tomcat_home%\common\lib;

3.windows xp、2003 server 下配置
以上两种方法皆可

4.运行
  在控制台中转到c:\tomcat\bin这个目录,运行startup.bat,然后会出现一个窗口,连跳一大串东西,最后表示server已经运行:
“server startup in ... ms”
打开ie浏览器并在地址栏中输入:http://localhost:8080
此时出现欢迎界面表示tomcat已经ok!
  在控制台中转到c:\tomcat\bin这个目录,运行shutdown.bat,关闭服务器。
至此tomcat运行环境配置、调试完成。

三.配置javabeans

1.用记事本编辑以下代码,并保存为circle.java:
package abc.def;
import java.io.*;
public class circle{
int radius;
public circle(){
radius=1;
}
public int getradius(){
return radius;
}
public void setradius(int newradius){
radius=newradius;
}
public double circlearea(){
return math.pi*radius*radius;
}
public double circlelength(){
return 2.0*math.pi*radius;
}
}

2.将circle.java保存在c:\tomcat\common\classes\abc\def目录下。

3.开始->运行->cmd
在控制台中切换到当前目录:
javac circle.java或直接输入javac c:\tomcat\common\classes\abc\def\circle.java

4.用记事本编辑以下代码,并保存为usebeans.jsp:
<%@ page contenttype="text/html;charset=gb2312" %>
<%@ page import="abc.def.circle" %>





<% girl.setradius(100);
%>

圆的半径是:
<%= girl.getradius() %>

圆的周长是:
<%= girl.circlelength() %>

圆的面积是:
<%= girl.circlearea() %>




5.将usebeans.jsp保存在c:\tomcat\webapps\root目录下。

6.启动服务器后,打开ie浏览器并在地址栏中输入:http://localhost:8080/usebeans.jsp
如出现预期值,表示javabeans配置成功!

圆的半径是: 100

圆的周长是: 628.3185307179587

圆的面积是: 31415.926535897932

至此javabeans运行环境配置、调试完成。

四.servlet配置
1.windows 2000 server系列下配置
我的电脑->属性->高级->环境变量
追加变量名:classpath下变量值:%tomcat_home%\common\lib\servlet-api.jar;

2.windows 9x系列下配置
用记事本编辑autoexec.bat,加入下列语句:
set classpath=%classpath%;%tomcat_home%\common\lib\servlet-api.jar;

3.windows xp、2003 server 下配置
以上两种方法皆可

4.运行
a.用记事本编辑以下代码,并保存为hello.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class hello extends httpservlet{
public void init(servletconfig config) throws servletexception{
super.init(config);
}
public void service(httpservletrequest request,httpservletresponse response) throws ioexception{
printwriter out=response.getwriter();
response.setcontenttype("text/html;charset=gb2312");
out.println("");
out.println("hello!");
out.println("");
}
}

b.将hello.java保存在c:\tomcat\common\classes目录下。

c.开始->运行->cmd
在控制台中切换到当前目录:
javac hello.java或直接输入javac c:\tomcat\common\classes\hello.java

d.注册servlet
用记事本打开c:\tomcat\webapps\root\web-inf\web.xml

-
welcome to tomcat
welcome to tomcat
-
.
.
.
-

之间相应位置追加以下两组数据:

hello
hello



hello
/servlet/hello


*注:...为servlet在服务器中的id
...为servlet-class类名
...为镜像路径亦虚拟路径
c:\tomcat\common\classes为类共享目录,亦可在:
c:\tomcat\webapps\你的应用目录\web-inf\web.xml
中注册,不过在应用servlet时须加入c:\tomcat\webapps\下的目录名,如:
http://localhost:8080/你的应用目录/servlet/hello
建议你自己应用所用的servlet类放置到 c:\tomcat\webapps\你的应用目录\web-inf\classes 中;在web.xml注册servlet类路径也是“/hello”即可。

e.重新启动服务器后,打开ie浏览器并在地址栏中输入:http://localhost:8080/servlet/hello
显示:“hello!”,则配置成功!
至此servlet运行环境配置、调试完成。

以上为j2sdk1.5.0+tomcat5.5(04.07.21)配置环境步骤。由于tomcat版本更新极快,所以各版本配置略有差异。希望大家能够灵活变通!

这里强调本版本几个注意事项:
1.javabeans强制引入包package *.*;
2.servlet类库为%tomcat_home%\common\lib\servlet-api.jar
而不是%tomcat_home%\lib\servlet.jar(不存在这个目录及类库)
3.引入第三方类库须加入classpath或加入%java_home%\lib\下,以正常加载。用tomcat5.5(04.07.21)引用该类库时须将该*.jar文件加入%tomcat_home%\common\lib\下。

本帖只作参考,jsp配置环境有许多组合,这里只提及j2sdk1.5.0+tomcat5.5,但足已供初、中级开发人员使用!帖中不足之处请大家不吝赐教,不盛感激!

[/p]

Servlet以及它的优越性  
  Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。
  最早支持Servlet技术的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web Server开始支持标准的Servlet API。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为:
  客户端发送请求至服务器端;
  服务器将请求信息发送至Servlet
  Servlet生成响应内容并将其传给Server。响应内容动态生成,通常取决于客户端的请求
  服务器将响应返回给客户端
  Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java Servlet API的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为Faceless Object。
  JAVA Servlet的优势:
  Servlet可以和其他资源(文件、数据库、Applet、Java应用程序等)交互,以生成返回给客户端的响应内容。如果需要,还可以保存请求-响应过程中的信息。
  采用Servlet,服务器可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用户的访问数量及访问性质
  Servlet可以是其它服务的客户端程序,例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活Servlet。
  Servlet可被链接(chain)。一个Servlet可以调用另一个或一系列Servlet,即成为它的客户端。
  采用Servlet Tag技术,可以在HTML页面中动态调用Servlet。
  Servlet API与协议无关。它并不对传递它的协议有任何假设。
  像所有的Java程序一样,Servlet拥有面向对象Java语言的所有优势
  Servlet提供了Java应用程序的所有优势——可移植、稳健、易开发。使用Servlet 的Tag技术,Servlet能够生成嵌于静态HTML页面中的动态内容。
  一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待以后的请求。每个请求将生成一个新的线程,而不是一个完整的进程。多个客户能够在同一个进程中同时得到服务。一般来说,Servlet进程只是在Web Server卸载时被卸载。
  Servlet生命周期:
  装载Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。
  Server创建一个Servlet的实例
  Server调用Servlet的init()方法
  一个客户端的请求到达Server
  Server创建一个请求对象
  Server创建一个响应对象
  Server激活Servlet的service()方法,传递请求和响应对象作为参数
  service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
  service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法
  对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次 ,当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。
  在美国,EJB+Servlet+JSP几乎成为电子商务的开发标准。本来 ASP 也很有希望,但微软最近可能把精力都集中在打官司和Win2000上, 因此电子商务发展得太少。PHP由于其模式和一些天生缺陷,毫无希望。 在美国,很少有商业站点用PHP的。  

James Gosling上周参加了纽约的Sun 全球教育研讨会(World Wide Education & Research Conference),在会上这位Java 之父进行了演讲,并就提问进行了回答。
  有些人问道当前Java 所面临的威胁时,Gosling给予了这样的回答,“PHP 和Ruby 是非常好的系统,但是它们作为脚本语言来发挥力量,只局限于网页这一领域内。”

  当Gosling谈到Microsoft 的C# 时,“曾经一度我们很担心他们会做出创造性的东西——现在看他们要专注于一个平台是希望渺茫。”

  “PHP 能够简化产品因为它是100%瞄准网页的,”然而对于Java,他说,“我们拥有平衡的艺术——简化与力量的双赢。”

  最后James Gosling 说:“任何关于Java 相对PHP、Ruby还是其他语言的讨论都是没有意义的,我们同样在使用其他语言,你可以应用PHP 或者Python,以及其他语言与Java一起工作。许多人这样做。”

<HTML>
<HEAD>
<TITLE>俄罗斯方块</TITLE>
<style>
body {margin:0;background:black;}
td {height:20;width:20;}
#block_div {position:absolute;z-index:1;width:80;}
#table_div {position:absolute;z-index:0;width:320;}
#nblock_div {position:absolute;z-index:2;font:48 system;color:red;}
#title_div {position:absolute;left:326;top:7;font-size:22px;color:white}
#infobar_div {position:absolute;left:396;top:416;}
#infobar2_div {position:absolute;left:396;top:480;font-size:14px;color:white}
#infobar2_div a{color:99ccff;font:system;text-decoration:none}
</style>

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
if (document.all){
var n_width = 800;
var n_height = 600;
var n_left = Math.round( screen.width/2 ) - n_width/2;
var n_top = Math.round( screen.height/2 ) - n_height/2;
var n_IncStep = 20;
var curBlcok,nextBlock;
var arr_curBlock = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
var curX,curY;
var speed=1;
var maxspeed=9;
var clr_per_line=18;
var pause=0;
var gameover=0;
var colors = new Array("#999999","#0000FF","#80FFFF","#80FF80","#FFFF00","#FF8000","#FF00FF","#FF0000"
);
var cid;
var ncid;
var blocks = new Array("tt_O1","tt_T2","tt_Z1","tt_S1","tt_L1","tt_J1","tt_I2");
var bid;
var killedlines=0;

var tt_O1 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O2 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O3 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O4 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);

var tt_T1 = new Array(0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0);
var tt_T2 = new Array(0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0);
var tt_T3 = new Array(0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0);
var tt_T4 = new Array(0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0);

var tt_Z1 = new Array(0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0);
var tt_Z2 = new Array(0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0);
var tt_Z3 = new Array(0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0);
var tt_Z4 = new Array(0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0);

var tt_S1 = new Array(0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0);
var tt_S2 = new Array(0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0);
var tt_S3 = new Array(0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0);
var tt_S4 = new Array(0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0);

var tt_L1 = new Array(0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0);
var tt_L2 = new Array(0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0);
var tt_L3 = new Array(0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0);
var tt_L4 = new Array(0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0);

var tt_J1 = new Array(0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0);
var tt_J2 = new Array(0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0);
var tt_J3 = new Array(0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0);
var tt_J4 = new Array(0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0);

var tt_I1 = new Array(0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0);
var tt_I2 = new Array(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1);
var tt_I3 = new Array(0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0);
var tt_I4 = new Array(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1);

var table = new Array(
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
               1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)

}
else
alert("You need IE4+ to play Tetris!")

function dimension2(row,col,num){
   var i = row * num + col;
   return (this[i]);
}
Array.prototype.getd = dimension2;

function ShowBlock(x,y,block_type,color){
   for (var i=0;i<block_tbl.rows.length;i++){
       for (var j=0;j<block_tbl.rows(i).cells.length;j++){        
           var d2 = i * 4 + j;
           if (block_type[d2]==1){
               block_tbl.rows(i).cells(j).style.background = color;
           }
           else{
               block_tbl.rows(i).cells(j).style.background = "";
           }
       }
   }
   block_div.style.pixelLeft=x;
   block_div.style.pixelTop=y;
}

function ShowBlock1(x,y,block_type,color,obj_tabID,obj_divID){
   for (var i=0;i<obj_tabID.rows.length;i++){
       for (var j=0;j<obj_tabID.rows(i).cells.length;j++){        
           var d2 = i * 4 + j;
           if (block_type[d2]==1){
               obj_tabID.rows(i).cells(j).style.background = color;
           }
           else{
               obj_tabID.rows(i).cells(j).style.background = "";
           }
       }
   }
   obj_divID.style.pixelLeft=x;
   obj_divID.style.pixelTop=y;
}

function Change(inc){
   var type = curBlock.substr(0,4);
   var num = curBlock.substr(curBlock.length-1);
   num = parseInt(num) + inc;
   if (num>4&#124;&#124;num<1) num -= 4*inc;
   type += num;
   eval("arr_tmp = " + type + ";");
   if (CanMove(curX,curY,arr_tmp)){
       curBlock = type;
       eval("arr_curBlock = " + curBlock + ";");
       eval("ShowBlock(block_div.style.pixelLeft,block_div.style.pixelTop," + curBlock + ",colors[" + cid + "]);");
   }
}

function CanMove(x,y,block){
   for (i=0;i<4;i++){
       for (j=0;j<4;j++){
           if (block.getd(i,j,4)&table.getd(y/n_IncStep+i,x/n_IncStep+j,16)) return false;
       }
   }
   return true;
}

function NewBlock(){
   curBlock = nextBlock;
   cid = ncid;
   bid = Math.round(Math.random()*(blocks.length-1));
   ncid = Math.round(Math.random()*(colors.length-1));
   nextBlock = blocks[bid];
   eval("arr_curBlock = " + curBlock + ";");
   eval("ShowBlock(120,0," + curBlock + ",colors[" + cid + "]);");
   eval("arr_curBlock = " + curBlock + ";");
   eval("ShowBlock1(466,116," + nextBlock + ",colors[" + ncid + "],nblock_tbl,nblock_div);");
}

function SaveBlock(){
   for (i=0;i<4;i++){
       for (j=0;j<4;j++){
           table[(curY/n_IncStep+i)*16+curX/n_IncStep+j]&#124;=arr_curBlock[i*4+j];
           if (arr_curBlock[i*4+j]==1)
               if ((curY/n_IncStep+i<21)&&(curX/n_IncStep+j>1)&&(curX/n_IncStep+j<14))
                   table_tbl.rows(curY/n_IncStep+i).cells(curX/n_IncStep+j).style.background = colors[cid];
           if (table[(curY/n_IncStep+i)*16+curX/n_IncStep+j]!=1)
                   table_tbl.rows(curY/n_IncStep+i).cells(curX/n_IncStep+j).style.background = "black";
       }
   }
}

function DelLine(line){
   for(i=line;i>0;i--){
       for(j=2;j<14;j++){
           table[i*16+j]=table[(i-1)*16+j];
       }
   }
   table_tbl.deleteRow(line);
   table_tbl.insertRow(0);
   for (i=0;i<16;i++){
       table_tbl.rows(0).insertCell();
       if (i<2&#124;&#124;i>13) table_tbl.rows(0).cells(i).style.background="navy";        
   }
   killedlines++;
   cll.innerText=parseInt(cll.innerText)+1;
}

function DelLines(){
   var c,d,i,j;
   d=0;
   curY=block_div.style.pixelTop;
   for(i=(curY/20+3);i>curY/20-1;i--){
       c=0;
       for(j=2;j<14;j++){
           if (isNaN(table[i*16+j])&#124;&#124;i==21) break;
           c+=table[i*16+j];
       }
       if(c==12){
           DelLine(i);
           i++;
           d++;
       }
   }
   if (d>0)
       sco.innerText=parseInt(sco.innerText)+d*d*36;
}

function Lucifer(){
   for(var i=2;i<14;i++){
       if (table[16+i]==1) return true;
   }
   return false;
}

function GameOver(){
   gameover=1;
   clearInterval(gameInterval);
   block_div.innerHTML="";
   for (i=0;i<21;i++){
       for (j=2;j<14;j++){
           setTimeout("table_tbl.rows(" + i + ").cells(" + j + ").style.background = colors[Math.round(Math.random()*7)];",16*i*j);
       }
   }
   nblock_div.innerHTML = "Game Over";
}



function document_onkeydown() {
   if (gameover==1) return;
   with (block_div.style){
   curX = pixelLeft;
   curY = pixelTop;
   switch (event.keyCode){
       case 37:
           if (CanMove(curX-n_IncStep,curY,arr_curBlock))
               pixelLeft-=n_IncStep;
           break;
       case 38:
           Change(1);
           break;
       case 39:
           if (CanMove(curX+n_IncStep,curY,arr_curBlock))
               pixelLeft+=n_IncStep;
           break;
       case 40:
           if (CanMove(curX,curY+n_IncStep,arr_curBlock)){
               pixelTop+=n_IncStep;
           }
           else{
               SaveBlock();
               DelLines();
               if (Lucifer()){
                   GameOver();
                   return;
               }
               sco.innerText=parseInt(sco.innerText)+2;
               NewBlock();
           }
           break;
       case 32:
           if (pause==0){
               clearInterval(gameInterval);
               pause=1;
           }
           else{
               gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
               pause=0;
           }
           break;
       case 90:        
           Change(1);
           break;
       case 88:    
           Change(-1);
           break;
       default:
   }
   }
}

function Handle_Interval(){
   curX = block_div.style.pixelLeft;
   curY = block_div.style.pixelTop;
   if (CanMove(curX,curY+n_IncStep,arr_curBlock)){
       block_div.style.pixelTop+=n_IncStep;
   }
   else{
       SaveBlock();
       DelLines();
       if (Lucifer()){
           GameOver();
           return;
       }
       sco.innerText=parseInt(sco.innerText)+2
       NewBlock();
   }
   if (killedlines>=clr_per_line){
       killedlines-=clr_per_line;
       if (speed<maxspeed)
           speed++;
       else
           speed=maxspeed;
       spd.innerText=speed;
       clearInterval(gameInterval);
       gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
   }
}
//-->
</SCRIPT>

<SCRIPT LANGUAGE=javascript FOR=document EVENT=onkeydown>
<!--
if (document.all)
document_onkeydown()
//-->
</SCRIPT>

</HEAD>

<BODY LANGUAGE=javascript>

<div id=block_div style="left:60;top:0">
<table id=block_tbl border=0 cellspacing=0 cellpadding=0>
<script>
if (document.all){
for (var i=0;i<4;i++){
   document.write("<tr>");
   for (var j=0;j<4;j++){
       document.write("<td style=\"border:1 solid black;\"></td>");
   }
   document.write("</tr>");
}
}
</script>
</table>
</div>

<div id=nblock_div>
<table id=nblock_tbl border=0 cellspacing=0 cellpadding=0>
<script>
if (document.all){
for (var i=0;i<4;i++){
   document.write("<tr>");
   for (var j=0;j<4;j++){
       document.write("<td style=\"height:40;width:40;border:1 outset black;\"></td>");
   }
   document.write("</tr>");
}
}
</script>
</table>
</div>

<div id=table_div>
<table id=table_tbl border=0 cellspacing=0 cellpadding=0>
<script>
if (document.all){
for (var i=0;i<22;i++){
   document.write("<tr>");
   for (var j=0;j<16;j++){
       var d2 = i * 16 + j;
       if (table[d2]==1)
       document.write("<td bgcolor=navy></td>");
       else
       document.write("<td style=\"background:black;\"></td>");
   }
   document.write("</tr>");
}
}
</script>
</table>
</div>

<div id=title_div nowrap>
<font size="3">请在文本框输入(1-9)并按开始键开始游戏: <input type="text" size=8 id="speedin"> <button onClick="begintet()" id="but">开始</button>
<br>
游戏结束后,按"新游戏"键重新开始游戏!<input type="button" value="新游戏" onclick="javascript:window.location.href='eluosi1.htm'">
<input type="button" value="不玩了" onclick="self.close()">
</font>
</div>


<div id=infobar_div>
<table border=1 bordercolor=navy cellspacing=0 cellpadding=0>
<tr align=center>
<td style="color:99ccff;font:12 system;width:56;">速度:</td>
<td style="color:red;font:12 system;" id=spd>1</td>
<td style="color:99ccff;font:12 system;width:86;">总成绩:</td>
<td style="color:red;font:12 system;" id=sco>0</td>
<td style="color:99ccff;font:12 system;width:96;">消减排数:</td>
<td style="color:red;font:12 system;" id=cll>0</td>
</tr>
</table>
</div>

<SCRIPT ID=MainSection LANGUAGE=javascript>
<!--
if (document.all){
ncid = Math.round(Math.random()*(colors.length-1));
bid = Math.round(Math.random()*(blocks.length-1));
nextBlock = blocks[bid];
NewBlock();
}
function begintet(){
document.all.speedin.disabled=true
document.all.but.disabled=true
speed=parseInt(document.all.speedin.value);
if (isNaN(speed)&#124;&#124;speed==null&#124;&#124;speed>maxspeed&#124;&#124;speed<1) speed=1;
spd.innerText=speed;
gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
}
//-->
</SCRIPT>
<P>
</BODY>
</HTML>

#include
#include
#include
#include
#include
#include

#define LEFT 0x4b
#define RIGHT 0x4d
#define DOWN 0x50
#define CHANGE 0x20
#define ESC 0x1b
#define INTR 0x1C
#define DefaultX 5
#define DefaultY 1
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

static unsigned counter=0;
static unsigned shape[7][4][4][4]={
{
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
},
{
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
},
{
{{0,1,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,0,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
},
{
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,0,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{1,0,0,0},{0,0,0,0}},
{{1,1,0,0},{0,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,0,1,0},{1,1,1,0},{0,0,0,0}},
},
{
{{0,1,0,0},{0,1,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,0,0,0},{1,1,1,0},{0,0,0,0}},
{{1,1,0,0},{1,0,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,0,1,0},{0,0,0,0}},
},
};

unsigned back[22][14]={{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

char ShapeColor[7]={8,10,11,12,13,14,15};
char DigitalShape[10]={128+119,3,62,31,128+75,128+93,128+125,19,128+127,128+95};
char ZodiacBack[11]={4,6,12,13,11,10,2,3,9,1,8};
char ZodiacSoft[18][14]={{0,0,0,0,96,0,0,0,0,0,0,0,60,0},
{255,248,0,0,96,0,0,0,0,248,0,0,124,0},
{255,248,0,0,97,128,0,0,3,248,0,0,192,0},
{0,112,0,0,97,128,0,0,7,0,0,1,128,48},
{0,224,0,0,96,0,0,0,14,0,0,1,128,48},
{1,192,0,0,96,0,0,0,12,0,0,1,128,48},
{3,128,120,15,97,128,240,60,12,0,15,15,249,255},
{7,0,252,31,225,131,248,127,14,0,31,143,249,255},
{7,1,142,48,225,135,24,227,7,240,49,193,128,48},
{14,3,134,96,97,142,24,192,3,252,112,193,128,48},
{28,3,6,96,97,140,25,192,0,28,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{120,3,6,96,97,140,25,128,0,6,96,193,128,48},
{224,1,140,48,225,142,25,195,24,14,49,129,128,48},
{255,249,252,63,225,135,252,255,28,28,63,129,128,48},
{255,248,240,15,97,131,236,60,15,248,30,1,128,48},
{0,0,0,0,0,0,0,0,7,224,0,1,128,0}};

unsigned long TotalMark=0;
unsigned int Erasered=0,ETimes=0;
int Speed=0;
int CEr=0;
int NumOfLev[5]={0,0,0,0,0};
int TimeDelay[10]={21,18,17,15,13,11,9,7,5,3};
char NewShape[2];
unsigned PerOnce[4];

void interrupt ( *oldhandler)(__CPPARGS);
void interrupt handler(__CPPARGS)
{
++counter;
oldhandler();
}

void DrawBackground()
{
//setlinestyle
}
void DrawDigital(int x,int y,int a)
{
int i=7;
setcolor(((DigitalShape[a]>>i)&1)*7+4);
//printf("%d",(DigitalShape[a]>>i)&1);
i--;
line(x,y+1,x,y+15);
line(x+1,y+2,x+1,y+14);
line(x+2,y+3,x+2,y+13);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+1,y,x+16,y);
line(x+2,y+1,x+15,y+1);
line(x+3,y+2,x+14,y+2);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+2,y+15,x+15,y+15);
line(x+1,y+16,x+16,y+16);
line(x+2,y+17,x+15,y+17);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+3,y+30,x+14,y+30);
line(x+2,y+31,x+15,y+31);
line(x+1,y+32,x+16,y+32);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+15,y+3,x+15,y+13);
line(x+16,y+2,x+16,y+14);
line(x+17,y+1,x+17,y+15);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
line(x+15,y+19,x+15,y+29);
line(x+16,y+18,x+16,y+30);
line(x+17,y+17,x+17,y+31);
}

void ArtClear()
{
for(int i=480;i>=0;i-=2)
{
setcolor(3);
line(0,i-6,639,i-6);
setcolor(9);
line(0,i-4,639,i-4);
setcolor(1);
line(0,i-2,639,i-2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
for(i=1;i<480;i+=2)
{
setcolor(3);
line(0,i+6,639,i+6);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i+2,639,i+2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
}

void end()
{
for(int j=0;j<4;j++)
{
for(int i=j;i<480;i+=4)
{
setcolor(3);
line(0,i+8,639,i+8);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i,639,i);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
delay(5);
}
setcolor(YELLOW);
outtextxy(260,200,"[ Game Over ]");
gotoxy(14,16);
printf("This freeware is written by Daniel.Qu ZodiacSoft 2000");
gotoxy(12,17);
printf("Please e-mail to swami@yeah.net or visit my homepage at");
gotoxy(12,18);
printf("http://grocery.2699.com if you have question.");
gotoxy(14,20);
printf("I will soon provide something new,please wait...");
gotoxy(14,22);
printf("We hold these truths to be self-evident,that all codes");
gotoxy(12,23);
printf("are created FREE.");
getch();
clrscr();
closegraph();
exit(0);
}

void ShowTitle()
{
int gdriver=DETECT,gmode,errorcode,i,j,k;
initgraph(&gdriver,&gmode,"");
errorcode=graphresult();
if (errorcode!=grOk)
{
printf("Graphics error: %s\n\007",grapherrormsg(errorcode));
exit(1);
}
setbkcolor(9);//This line needs to be changed
for(i=0;i<11;i++)
{
setcolor(ZodiacBack[i]);
line(200,i*8+100,440,i*8+100);
}
delay(1000);
for(j=0;j<17;j++)
for(i=0;i<11;i++)
{
setcolor(ZodiacBack[(i+j)%16]);
line(200,i*8+100,440,i*8+100);
delay(4);
}
for(j=0;j<18;j++)
{
for(i=0;i<14;i++)
{
for(k=7;k>=0;k--)
if((ZodiacSoft[j][i]>>k)&1)
{
putpixel(i*8-k+271,j+122,14);
}
}
delay(10);
}
for(j=17;j>=0;j--)
{
for(i=0;i<14;i++)
for(k=7;k>=0;k--)
{
if((ZodiacSoft[j][i]>>k)&1)
putpixel(i*8-k+271,158-j,5);
}
delay(10);
}
setcolor(15);
outtextxy(295,171,"Present");
getch();
ArtClear();
}

void DrawShape(int x,int y,int color)
{
//if(x<2||x>12||y>19)
// return;
setcolor(color);
/*line(x<<4,y<<4,x<<4,(y<<4)+14);
line(x<<4,(y<<4)+14,(x<<4)+14,(y<<4)+14);
line((x<<4)+14,(y<<4)+14,(x<<4)+14,y*16);
line((x<<4)+14,y<<4,x<<4,y*16);
line((x<<4)+1,y<<4,(x<<4)+1,(y<<4)+14);
line((x<<4)+1,(y<<4)+13,(x<<4)+14,(y<<4)+13);
line((x<<4)+13,(y<<4)+13,(x<<4)+13,(y<<4)+1);
line((x<<4)+13,(y<<4)+1,x<<4,(y<<4)+1); */
for(int i=0;i<15;i++)
line(x<<4,(y<<4)+i,(x<<4)+14,(y<<4)+i);
setcolor(8);
line((x<<4)+15,(y<<4)+1,(x<<4)+15,(y<<4)+15);
line((x<<4)+1,(y<<4)+15,(x<<4)+15,(y<<4)+15);
setcolor(color-8);
line((x<<4)+2,(y<<4)+2,(x<<4)+12,(y<<4)+2);
line((x<<4)+2,(y<<4)+2,(x<<4)+2,(y<<4)+12);
}

void DrawNull(int x,int y)
{
setcolor(getbkcolor());
for(int i=0;i<16;i++)
line(x<<4,(y<<4)+i,(x<<4)+15,(y<<4)+i);
}

void show(int x,int y,int CurrentShape,int Status)
{
int temp;
for(int i=0;i<20;i++)
for(int j=2;j<12;j++)
{
if(back[i][j]==1)
DrawShape(6+j,4+i,8);
else
DrawNull(6+j,4+i);
} //no matter what the status be,I will draw the background
for(int l=0;l<4;l++)
for(int p=0;p<4;p++)
{
if(l+x<2||x+l>11||p+y>19)
continue;
//if(shape[CurrentShape][Status][p][l]+back[y+p][x+l]==1)
// DrawShape(3+l+x,3+p+y,8+CurrentShape);
//else
//cout<<'O';
// DrawNull(3+j,3+i);
if(shape[CurrentShape][Status][p][l]==1)
DrawShape(6+l+x,4+p+y,ShapeColor[CurrentShape]);
if(back[y+p][x+l]==1)
DrawShape(6+l+x,4+p+y,8);
}
}
void DrawScore()
{
int temp=TotalMark;
for(int i=0;i<7;i++)
{
DrawDigital(477-i*20,65,temp%10);
temp/=10;
}
temp=Erasered;
for(i=0;i<4;i++)
{
DrawDigital(491-i*20,111,temp%10);
temp/=10;
}
if(Erasered==0)
return;
for(i=1;i<5;i++)
{
setfillstyle(1,8);
bar(378,163+i*14,508,170+i*14);
setfillstyle(1,5);
bar(378,163+i*14,378+130*NumOfLev[i]/ETimes,170+i*14);
}
DrawDigital(466,293,Speed);
return;
}

int CreateNewShape()
{
NewShape[1]=NewShape[0];
NewShape[0]=rand()%7;
setfillstyle(1,0);
bar(447,240,514,288);
for(int l=0;l<4;l++)
for(int p=0;p<4;p++)
if(shape[NewShape[0]][0][p][l]==1)
DrawShape(28+l,15+p,ShapeColor[7]);
return NewShape[1];
}

int Possible(int x,int y,int CurrentShape,int Status)
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(shape[CurrentShape][Status][i][j]+back[y+i][x+j]==2)
//this line can also write as the following type:
//if(shape[CurrentShape][Status][i][j]&&back[y+i][x+j])
return 0;
}
}
return 1;
}

void GoLeft(int&x,int&y,int&CurrentShape,int&Status)
{
if(Possible(x-1,y,CurrentShape,Status))
x--;
show(x,y,CurrentShape,Status);
}

void GoRight(int&x,int&y,int&CurrentShape,int&Status)
{
if(Possible(x+1,y,CurrentShape,Status))
x++;
show(x,y,CurrentShape,Status);
}

void GoDown(int&x,int&y,int&CurrentShape,int&Status)
{
int AllAreOne=1,temp=0;
if(Possible(x,y+1,CurrentShape,Status))
{
y++;
show(x,y,CurrentShape,Status);
return;
}
TotalMark+=3*CurrentShape;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
back[i+y][j+x]+=shape[CurrentShape][Status][i][j];
for(int r=1;r<20;r++)
{
for(int l=2;l<13;l++)
{
if(back[r][l]==0)
AllAreOne=0;
}
if(AllAreOne==1)
{
for(int rr=r;rr>0;rr--)
for(int ll=2;ll<13;ll++)
back[rr][ll]=back[rr-1][ll];
Erasered++;
CEr++;
temp++;
}
AllAreOne=1;
}
CurrentShape=CreateNewShape();
x=DefaultX;y=DefaultY;Status=0;
NumOfLev[temp]++;
TotalMark+=5*temp;
show(x,y,CurrentShape,Status);
counter=0;
if(!Possible(x,y,CurrentShape,Status))
{
getch();
end();
}
if(CEr>=30)
{
Speed=(Speed+1)%10;
CEr/=30;
}
if(temp)
ETimes++;
DrawScore();
return;
}

void ChageShape(int&x,int&y,int&CurrentShape,int&Status)
{
if(Possible(x,y,CurrentShape,(Status+1)%4))
Status=(Status+1)%4;
show(x,y,CurrentShape,Status);
}

void DrawFace()
{
int temp;
setcolor(15);
line(351,59,519,59);
line(351,60,518,60);
line(351,59,351,156);
line(352,59,352,155);
setcolor(7);
line(518,61,518,154);
line(519,60,519,154);
line(353,155,519,155);
line(352,156,519,156);
setcolor(8);
for(int i=61;i<155;i++)
line(353,i,517,i);
setcolor(7);
line(427,106,512,106);
line(428,107,511,107);
line(427,106,427,147);
line(428,106,428,146);
setcolor(15);
line(512,106,512,147);
line(511,107,511,146);
line(428,146,511,146);
line(427,147,512,147);
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
setcolor(14);
outtextxy(357,119,"Erasered");
outtextxy(370,130,"Level:");
setcolor(15);
line(352,167,519,167);
line(352,168,518,168);
line(352,169,352,407);
line(353,169,353,406);
setcolor(7);
line(519,167,519,407);
line(518,168,518,406);
line(352,407,519,407);
line(353,406,519,406);
line(524,55,89,55); //outter border 1st
line(524,55,524,411);
line(89,411,524,411);
line(89,55,89,411);
line(524,56,89,56); //outter border 2nd
line(525,55,525,411);
line(89,410,524,410);
line(88,55,88,411);
setfillstyle(8,7);
bar(94,59,336,406);
//setfillstyle(1,3);
//bar(128,78,296,386);
for(i=0;i<8;i++)
DrawDigital(357+i*20,65,0);
for(i=0;i<4;i++)
DrawDigital(431+i*20,111,0);
setfillstyle(1,8);
setcolor(12);
for(i=0;i<4;i++)
{
temp=i+'1';
outtextxy(364,177+14*i,(char*)&temp);
bar(378,177+i*14,508,184+i*14);
}
setcolor(14);
outtextxy(366,250,"Next Shape");
setcolor(10);
outtextxy(366,294,"Current");
outtextxy(382,309,"Level");
setcolor(6);
outtextxy(366,334,"Message:");
bar(362,348,509,398);
DrawDigital(466,293,Speed);
}

void WannaQuit()
{
int choise=0,temp;
setfillstyle(1,8);
bar(362,348,509,398);
setcolor(15);
outtextxy(378,355,"Are you sure to");
outtextxy(368,368,"quit game?");
outtextxy(410,388,"Yes");
outtextxy(470,388,"No");
setcolor(14);
circle(399,392,4);
while((temp=bioskey(0))!=7181)
{
if(temp==19200)
{
setcolor(8);
circle(459,392,4);
choise=0;
setcolor(14);
circle(399,392,4);
}
if(temp==19712)
{
setcolor(8);
circle(399,392,4);
choise=1;
setcolor(14);
circle(459,392,4);
}
}
if(choise==0)
{
end();
}
setfillstyle(1,8);
bar(362,348,509,398);
return;
}

void main()
{
ShowTitle();
unsigned c;
int CurrentShape,x=6,y=0,Status=0;
oldhandler=getvect(INTR);
setvect(INTR,handler);
randomize();
NewShape[0]=rand()%7;
DrawFace();
CurrentShape=CreateNewShape();
show(x,y,CurrentShape,Status);
while(1)
{
if(kbhit())
{
c=getch();
if(c==0)
c=getch();
switch(c)
{
case 's' :Speed=(Speed+1)%10;DrawDigital(466,293,Speed);break;
case DOWN :GoDown(x,y,CurrentShape,Status);break;
case LEFT :GoLeft(x,y,CurrentShape,Status);break;
case RIGHT :GoRight(x,y,CurrentShape,Status);break;
case CHANGE :ChageShape(x,y,CurrentShape,Status);break;
case ESC :WannaQuit();
}
}
if((counter%=TimeDelay[Speed])==(TimeDelay[Speed]-1))
{
GoDown(x,y,CurrentShape,Status);
counter=0;
}
}
}

[p align=center]一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

String url="jdbc:oracle:thin:@localhost:1521:orcl";

//orcl为你的数据库的SID

String user="scott";

String password="tiger";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement

(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>





阅读全文
分页: 265/272 第一页 上页 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 下页 最后页 [ 显示模式: 摘要 | 列表 ]