在自由软件所使用的各种许可证之中,最为人们注意的也许是通用性公开许可证(General Public License,简称GPL)。
GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。
GPL还规定:只要这种修改文本在整体上或者其某个部分来源于遵循GPL的程序,该修改文本的整体就必须按照GPL流通,不仅该修改文本的源码必须向社会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制。因此,一项遵循GPL流通的程序不能同非自由的软件合并。GPL所表达的这种流通规则称为copyleft,表示与copyright(版权)的概念“相左”。
posted @
2007-06-10 02:12 jadmin 阅读(43) |
评论 (0) |
编辑 收藏
传说一个人向另一个人要了衬衣上的第二颗纽扣,用红绳系住,挂在脖子上,就会永不变心的爱着给她纽扣的那个人.可为什么一定要是第二颗纽扣? 那是因为,在你的衣服上,第二颗的纽扣最靠近你的心.从上往下数的第二颗纽扣是"心",因为靠近心脏,希望它能让爱在心中变的永恒.所以第二颗纽扣一般会送给自己最爱的人.
有一个关于第二颗纽扣的经典故事:他是一个钻石王老五,也是一个情场浪子。他是我的好朋友,欣赏我的才华,却对我相守终身的爱情观点不屑一顾。他爱说的话是:人既然来这个世界走一遭,就该多爱几个人。他的言下之意,当然是多甩几个人,不为谁停留。
谁也不曾知道,这样一个浪子,却会闪电般回头,娶了一个虽然温婉却并不花容月貌的女子。
在他的婚礼宴席上,他告诉我们这样一个故事。
他每年有大部分时间在全国各个城市漂,所以他也习惯在每座经历过的城市找些女子打发寂寞的时间。在一座小城,他认识了外表普通性格温柔的她,一番温存之后,他即将离开这座城市,于是像他对待任何一段感情一样,他欺骗她说,你是我最爱的人,但是我工作太忙,等我不忙的时候一定来娶你。他知道,女人都不是傻瓜,一般不会等他“工作不忙”的时候再来娶她,最多就是大吵大闹之后,拿些钱财物质来平息怨恨。
可是这个温柔的女子却默默地凝视着他,什么要求都没有提。她送他上火车的时候,仰着头,低声而固执地说,给我你衬衣上的第二颗纽扣。他惊讶她要求的卑微和奇怪,可是在离开一个女人的时候他从来不会拒绝她的要求。于是他剪下第二颗纽扣,和一条铂金项链一起交到她的手心。
她接过纽扣,却轻轻推开了那条项链。他上火车的一刹那,听到她说,以后要自己保重身体。他回头,看到她满脸泪水。他明白,她是知道的,他这一去便不会再回来。他于是更加不明白,为何她只需要他的一颗普通纽扣。
他又恢复了自己的生活轨迹,爱上各种各样的女子,又离开她们。在分手的时候每个女人都会提出各种各样的要求:有的,是要一座房子;有的,是要银行存款;有的,是要他安排舒适的工作。可是,那些和他温存过的女子,那些像他一样爱说甜言蜜语为他哭为他笑过的情人们,在得到了那些她们所渴望的物质以后,都会把冷冷的背影留给他,一如他离开她们的时候那般绝情。
奇怪的是,再也不曾有女人想要他衬衣上的第二颗纽扣。
有一回,他读中学的侄女来他家玩,见到了衣柜里他那缺了第二颗纽扣的衬衣,像发现了秘密一般说,叔叔,谁是你的心上人?他诧异。侄女告诉他,这是一个来自日本的传说,第二颗纽扣是送给情侣的最好礼物,因为它占据胸口的位置……
当天晚上,他坐最快的火车来到了他以为自己永远不会回来的小城市,叩响她的门,见到穿着睡衣的她脖子上挂着一根红绳,坠子就是他的那颗普通纽扣。
没有谁知道,已经30多岁的他,外表那么潇洒而内心却是寂寞的,在夜深人静的时候,他聆听自己内心,原来也是渴望被人爱的。是的,他是拥有数不清的女人,却不过只是一些空洞的缺乏灵魂的身体。可是这个把他的普通纽扣系在脖子处贴在身体上的女子,却让他明白了什么是真正的爱,他漂泊的心仿佛也终于找到了停泊的港湾。
在爱情里,从来不是以你征服了多少数量的异性为胜利的,也不是以你通过爱情得到了某些物质利益来诠释幸福的。真正幸福的人们,是茫茫人海里,有一个人,纯粹地爱你,无怨无悔无要求地把你放在胸口的位置——遗憾的是,拥有这样幸福的人很少很少,所以,如果你遇到了,请记得一定要珍惜。
如果有一天有人向你要了你上衣的第二颗纽扣,并把它系在脖子上的话,那代表他是最爱你的人. 就算你要离开他,不能拥有你的心,但是只要能感受你心脏跳动的温暖,他就满足了.
posted @
2007-06-09 18:52 jadmin 阅读(67) |
评论 (0) |
编辑 收藏
Java从它的诞生到现在已经11年了。在这11年里,有无数的企业、组织和个人为Java贡献过自己的力量。这就象梁山一百单八将要按着自己的贡献和威望排名一样,谁为Java所做的工作越多,谁就对Java的未来发展方向越有发言权。
自从Java成为国际标准后,支持它的企业也随着Java的成熟逐渐多了起来。
当然,人一多,就会带来另一个问题,谁说了算!作为Java的始作俑者Sun一直想将Java标准据为已有,而IBM凭着它在世界的影响对Java也是虎视眈眈。俗话说得好,三流的公司卖产品、二流的公司卖服务、一流的公司卖标准。当然,如果想做世界第一的IT企业,那就得标准、服务和产品一起卖。因此,以Sun、IBM为首的利益集团围绕着Java以及相关标准明争暗斗了11年,在这11年里,Java标准几度风雨、几度春秋。随着Java的全面开源,Java标准又面临着前所未有的挑战,未来的Java还会象它宣称的那样,一处编译、到处运行吗?到底谁能主导未来的Java呢?
Java刚一诞生就成待宰羔羊
在1995年,Sun正式公布了Java,并且发布了JDK1.0。Java在外形上酷似C++,但它却有一颗形如Smalltalk般纯洁的面向对象之心。正因为如此,Java几乎在一夜之前就香浓世界,成为软件行业的新宠。虽然Java刚开始只是通过Applet为网站做一些动态的效果,但它的杀手锏,“一次编译、到处运行”使Java迅速成为各大企业及众多开发人员竞相追捧的对象。
正是因为Java的流行使众多有实力的企业垂涎三尺。一开始,Java的JVM是由Sun单独开发的。而在当时,开发工具的老大Borland却蠢蠢欲动。由于Borland以开发语言编译器著称,因此,在Java的早期,除了Sun的JVM,比较著名的还有Borland JVM。
这个世界上除了Sun,没有哪家公司象Borland一样和Java走得如此之近。在Java的早期,Borland几乎参与了Java的各种层次的设计,如JVM、JDK以及开发工具。甚至Sun和Borland曾经进行了一场关于JVM的军备竞赛。当初Sun设计一个JVM版本,Borland也跟着设计一个更快的JVM版本。就这样持续了有几个月时间。Borland负责这方面事务的就是Anders Hejlsberg,他的第一个成名作就是Delphi,因此,他也被称为Delphi之父。说起Anders Hejlsberg,也许大家不太熟悉,但要是提起C#之父,也许大家会很熟悉,对,他也是Anders Hejlsberg(在1996被微软用年薪300万美元、加盟奖金以及一个开发团队从Borland挖去的),因此,Anders Hejlsberg同时被称为Delphi / C#之父。这位天才以汇编语言编写了Borland JVM,从某种程度上,Borland JVM的效率要比Sun JVM高一些(如果你用过Visual J++就知道了)。但由于Borland后来专注于Java开发工具(JBuilder)的开发而放弃了和Sun的JVM争夺。
在Sun和Borland的JVM争夺战结束后,真是树欲静而风不止。自从Anders Hejlsberg到了微软后,立刻被比尔.盖茨派去负责微软的Java开发工具Visual J++的开发,至此,又要上演一场龙争虎斗。大家都知道,微软和Sun一直因为Java而互相攻击。但一开始,比尔. 盖茨是非常喜欢Java的,他曾经称赞Java是“到现在为止世界上最好的开发语言”,微软也很早就购买了Java许可证。但微软作为软件公司的老大,看到别人的孩子茁壮成长,自已心里却暗生嫉恨。于是在它自己的Visual J++中搞起了小动作。使用Visual J++开发Windows程序就象是享受一杯美酒。但Visual J++却破坏了Java的跨平台特性。微软和Sun也因此打了长达7年的官司,最后这场官司以喜剧收场。微软和Sun达到协议,微软停止Visual J++的开发,而双方都将为使用对方的专利付费。同时Visual J++也无疾而终(要不是这场官司,恐怕现在很多程序员还在使用Visual J++呢!)。在2004年,微软和Sun最终以16亿美元结束了十多年恩怨。这也正应了一句话“没有永远的朋友、也没有永远的敌人,只有永恒的利益”。
在Sun、Borland、微软之间围绕着Java的争斗最终以Sun重新获得Java的控制权而结束。但新的争斗又将开始。
Java标准成为众豪强竞相追逐的“梅花鹿”
在经过数年的争斗后,Sun终于可以暂时控制JVM和JDK了,现在这两种技术也趋于一致了,但JVM和JDK只是Java体系的冰山一角。而对Java影响最大的莫过于众多的JSRs(Java Specification Requests)。
当Sun和Borland、微软的争斗告一段落后,Sun本以为可以高枕无忧了,但Sun却打错了算盘。在这之后,Sun受到的第一次挑逗就是IBM的Eclipse。在2001年,IBM设计了自己的Java开发工具Eclipse,这本来没什么,但Eclipse却与Borland的JBuilder有着本质的不同。JBuilder是百分之百基于Java的,而Eclipse虽然是Java开发工具,但它的图形接口既不是AWT,也不是SWING,而是IBM自己开发的SWT。SWT虽然速度快,但它却是独立于JDK之外的,也就说,它并不同JDK一起发布。因此,在程序发布时,必须带是SWT的运行库才可以。IBM官方称Eclipse的推出是为取代Sun的NetBeans,但稍微动一下脑子就不难看出,IBM的真正目的并不是NetBeans,而是想逐步取代Sun的JDK的部分,甚至全部。IBM推出SWT的目的就是想让开发人员除了标准的AWT和SWING外,还有另外一种选择,那就是SWT。也就是说,IBM想先通过JDK的图形库来分裂JDK,从而达到自己控制JDK的目的。
而另Sun尴尬的是IBM的举动并没有触犯什么法律或规约,SWT只是一个基于Java的类库而已。Sun更本无法向当年起诉微软一样来起诉IBM。IBM的初次挑衅取得了意想不到的收获。这下IBM更加得寸进尺了。
由于和Java相关的规范都是由JCP来管理的。每当提交一个新规范,必须由JCP的成员投票表决才能通过。因此,JCP就相当于Java世界的联合国。它和现实中的联合国是一样的,谁控制了联合国,谁就能充当世界警察,为所欲为。而JCP成员中最强大的当然是IBM了。一开始,IBM还是很规矩的,但后来,IBM发现,JCP一直都是由Sun来主导,而Sun的产品也是最早支持JCP标准的,如当JCP推出新的J2EE标准后,Sun的AppServer在半个月后就宣布支持新标准了。
这种结果是IBM所不能允许的,因为,在J2EE市场,IBM和Sun是竞争对手。这样,Sun的AppServer就永远领先IBM的WebSphere了。因此,IBM就想绕过JCP,自己确定新的标准。可能是因为IBM感觉自己势单力孤,最后把BEA也拉了进来。IBM和BEA都是J2EE市场的绞绞者,他们的市场份额之和超过了66%。
无论是微软,还是IBM。他们的强大都足以在一个领域中推行新的规范。IBM也正是看中了这一点,因此,在最近IBM和BEA提交的几个规范(如JSRs235,236和237)并没有长长支持列表。而其它的规范都有很长的支持列表。这充分说明了IBM和BEA打算绕过JCP而单独推出规范,而这些规范并未得到JCP大多数成员的支持。
如果说提交JSR规范只是小打小闹,那么IBM联合BEA发布的SDO(Service Data Object)规范将是一次大动作。在发布SDO的同时,IBM又向Apache基金会捐献一个支持SDO标准的Tuscany项目。这次发布并没有安排Sun、JBoss等Java中间件提供商参与。尽管SDO最终因进展缓慢而失败,但这将是以IBM为首的利益集团分裂JCP的开始。在SDO失败后不久、IBM和BEA又联手推出了SOA标准。这个标准除了IBM和BEA,并没有其它的SOA标准制定者。IBM和BEA制定SOA的目的就是想彻底绕过JCP而成为Java EE的事实标准。不管其他人如何评价IBM和BEA的这次联合,我相信Java标准已经开始分裂。而在业界举足轻重的企业,如IBM、BEA、Oracle、JBoss,甚至是微软,都会围绕着Java标准展开一场殊死搏斗。也许Java EE的未来将是一场血雨腥风!
Sun的回马枪:以GPL协议开源的Java
IBM这个城府极深的家伙总在不断地算计别人。就在Sun和微软最终和解的2004年,IBM又不遗余力地“劝说”Sun将Java开源。而当时Sun还是站在开源的对立面。面对IBM给自己的一封公开信,Sun总裁麦克利表现出了极大的反弹,并公开表达了对这封信的反感和对开放的排斥。有趣的是,在两年之后,Sun的态度发生了180度的逆转,不仅将Java开源,而且是在GPL协议下开的源。GPL在开源协议中是最接近自由的协议,这下可给IBM一个措手不及。
在Sun公布这一消息之后,英特尔、RedHat都对此表示高度的赞许,而IBM的态度却让人捉摸不透。除了一份声明外,并没有其它的任何反应。
其实Sun这次开源也算是破罐子破摔了。在Java诞生的11年里,Java为Sun赢得了无数的声誉,但Java对于Sun来说就是叫好不叫座。而恰恰相反,Java却成就了BEA、JBoss、IBM等公司。可Sun除了为Java而付出的大量开发和维护费用外,几乎没得到没么好处。而这次开源,Sun干脆将Java开源到底,直接选用了最开放的GPL协议,反正Sun也没从Java得到什么,当然,也不怕失去什么。Sun的这个举动是几乎所有人都始料未及的。而最受刺激的就是IBM。在开源的当天,IBM发表声明建议Sun还是以Apache协议来开源Java。这说明,Sun这一举动给了IBM一个回马枪、打得IBM错不及防。
IBM一开始想让Sun在Apache等限制比较多的协议下开源,然后凭着IBM的影响力来控制Java在未来的发展方向。而这下Sun将IBM的计划完全打乱了,一但以GPL开源,就意味着任何人都可能自由地修改Java的代码,而IBM将很难控制局面。
Java的开源其实对于Sun是好处多多,起码它可以省下大笔的开发Java的费用,当然,还能赢得一个好名声。除此之外,还可以借助于开源社区的力量,对Java那臃肿的构架进行改进。Sun还发表声明说,在未来,还打算将Solaris、OpenOffice等软件以GPL协议进行开源。这将给Sun带来更大的发展机会。
而IBM和其它的软件公司也正在试图寻找开源赢利模式。IBM几次想控制Java都未能完全如愿,现在Java也以GPL协议开源了,看来,IBM要想进一步地控制Java的可能性已经不大了。而Java的开源也有不利的一面,这将表现在可能出现其它的Java版本,到那时,可能会在一定程度上破坏Java的“一处编译、到处运行”的特性。
总之,不管Java标准是分裂,还是统一,有一点永远不会变,那就是Java会一如既往地向前发展。但愿我们将来能看到一个崭新的Sun和Java。
posted @
2007-06-04 16:50 jadmin 阅读(71) |
评论 (0) |
编辑 收藏
在柏林的JBoss世界论坛上,JBoss的成立者兼领导者Marc Fleury说到:在Linux世界,他很高兴Sun公司选择在GPL下发布Java,因为他认为:“这将至少延长Java 15年寿命”。照自由软件运动的观点来说:Java变成GPL的,这是一个好消息,因为它对Java虚拟机的知识产权产生了保护作用。
一、开源将大大延长Java的寿命
Fleury相信Java虚拟机在开源组织的影响下将会更快地发展,sun公司也会因为保留商标权而受益,而这对于JBoss、开发者以及开源社区来说,也无疑是件好事情。“因为我们关心平台的发展,我们同样也关心虚拟机的统一,来代替谈论Java平台,因为虚拟机的统一为那些不关心是Linux、Windows和Solaris的开发者产生了一个很大的市场,由此观来,这无疑是件好事情。”
Fleury看到GPL作为一个机构的特权条款保护了知识产权以及代码的著作权,他说:“GPL在两个世界中都是最好的,因为GPL产生了很强的知识产权观念,并且自由软件社区也给出了一个出色的虚拟机----Sun公司的实现,与此同时,Sun公司仍然能够用他们带有双重的许可证的虚拟机获得利益。”
Fleury说:合适的开源的虚拟机的缺乏已经在意识形态上困扰了很多人,但是在实际中,却没有人关心。开发者经常将Java虚拟机在Linix平台上跑,但是,如果把眼光看得长远一点,带有GPL是证书的虚拟机的发布为至少Java延长了15年的寿命。
GPL是一个正确的机构, “因为你将看到更少的分叉,程序的著作权的要求将会更加迫切,对Sun公司来说,这是一件好事情。GPL允许他们为J2ME平台定价钱,这将会造成虚拟机的增值,但是依然为Sun公司保留了某些钱财。”
Sun公司与他们的合作者十分开通,“他们在怎样开放他们的虚拟机上进行民意调查,而我们,作为Jboss,投票结果是:向GPL靠拢。虽然我们并不想成为著作权所有者,但我们很高兴他们做了正确的事情。”
二、Sun和Java在批评声中成长
Fleury感觉到很多对Sun的批评都有失公平。“很多对Sun公司的猛击事实上来自其它私人的利益,他们希望将自己伪装成开源的保护人,而将Sun公司说成是有点傲慢的坏人,而事实上,在JCP中,Java证书的统治体,开源社区的人们已在2003年出现。开源社区的注入以及我们在JCP中所做的工作,使得它得以实现。我们是EJB3.0的关键贡献者。我们正在领导WebBean,WebBean是下一代Web应用程序。”
Fleury对Sun的批评家表现得并不算大方,他说:“IBM对Sun的通告很消极,因为IBM对开源社区态度是施伎俩,引导开源社区去做某些事情,IBM接近他们,并将他们进行包装,将它们贴上所有者标签,并将其投放于市场作为结果----例如websphere就是这样的一个例子。所以他们对于自身制造的产品和对其他低成本的开源产物有着双重的策略,这种策略通常在BSD这样的证书中运作得很好,因为在这种证书中,你可以作为创造者,你也可以作为卖主,有竞争力的提供是所有者。”Sun公司在GPL下发布的举措,是针对IBM在Harmony制造以及Apache试图在BSD下开源发布而提出的。我对IBM的举措有点失望。因为他们展示了他们的“strip mining”策略。在之前,他们都是说’开源很不错,开源很好’的,但是你们又说开源软件不好,为什么呢?”GPL意味着Java”将永远在开源软件社区存在。你不能对它置之不理,这是开源软件成立许可证的好处,IBM将会反对这样做,为什么呢?因为他们在‘我们需要开源’这个事情上像狼似的哭叫,当Sun将他们称为虚张声势的人,并且投向GPL的怀抱,他们当然不会高兴。”
posted @
2007-06-03 22:34 jadmin 阅读(82) |
评论 (0) |
编辑 收藏
经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题,于是总结了一下如何tomcat下配置jsp、servlet和ben,希望对那些初学者有所帮助。
第一步:下载j2sdk和tomcat:到sun官方站点(http://java.sun.com/j2se/1.4.2/download.html)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.4.2 Documentation,然后到tomcat官方站点(http://www.apache.org/dist/jakarta/tomcat-4/)下载tomcat(下载最新4.1.x版本的tomcat);
第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可。
1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.4.2):
JAVA_HOME=c:\j2sdk1.4.2
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径)
path=%JAVA_HOME%\bin
接着可以写一个简单的java程序来测试J2SDK是否已安装成功:
public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}
将上面的这段程序保存为文件名为Test.java的文件。
然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令
javac Test.java
java Test
此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。
2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat):
CATALINA_HOME=c:\tomcat;
CATALINA_BASE=c:\tomcat;
然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去,修改后的classpath如下:
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;
接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。
第三步:建立自己的jsp app目录
1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;
2.在webapps目录下新建一个目录,起名叫myapp;
3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;
4.WEB-INF下新建一个文件web.xml,内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>
5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:
<html><body><center>
Now time is: <%=new java.util.Date()%>
</center></body></html>
6.重启Tomcat
7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。
第四步:建立自己的Servlet:
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个servlet程序,文件名为Test.java,文件内容如下:
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
out.flush();
}
}
2 .编译
将Test.java放在c:\test下,使用如下命令编译:
C:\Test>javac Test.java
然后在c:\Test下会产生一个编译后的servlet文件:Test.class
3 .将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那个test目录到classes目录下,如果classes目录不存在,就新建一个。 现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结构
4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping
编辑后的web.xml如下所示,红色为添加的内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
<servlet>
<servlet-name>Test</servlet-name>
<display-name>Test</display-name>
<description>A test Servlet</description>
<servlet-class>test.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
</web-app>
这段话中的servlet这一段声明了你要调用的Servlet,而servlet-mapping则是将声明的servlet“映射”到地址/Test上
5 .好了,启动Tomcat,启动浏览器,输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.就说明编写的servlet成功了。
注意:修改了web.xml以及新加了class,都要重启Tomcat
第五步:建立自己的Bean:
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个java程序,文件名为TestBean.java,文件内容如下:
package test;
public class TestBean{
private String name = null;
public TestBean(String strName_p){
this.name=strName_p;
}
public void setName(String strName_p){
this.name=strName_p;
}
public String getName(){
return this.name;
}
}
2 .编译
将TestBean.java放在c:\test下,使用如下命令编译:
C:\Test>javac TestBean.java
然后在c:\Test下会产生一个编译后的bean文件:TestBean.class
3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,
4 .新建一个TestBean.jsp文件,文件内容为:
<%@ page import="test.TestBean" %>
<html><body><center>
<%
TestBean testBean=new TestBean("This is a test java bean.");
%>
Java bean name is: <%=testBean.getName()%>
</center></body></html>
5 .好了,重启Tomcat,启动浏览器,输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。
这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码,自己多动手写代码以增强自己在这方面开发的能力了。
posted @
2007-05-31 02:03 jadmin 阅读(87) |
评论 (0) |
编辑 收藏
jsp指令元素
(1)include:导入其它文件夹
(2)page:
language:用什么语言,只能为JAVA
contentType:MIME类型
import:导入java包
(3)taglib:自定义标签库
jsp常用标准元素
(1)jsp:forward:跳转到其它页面
(2)jsp:include:插入其它文件 eg:
(3)jsp:plugin:插入applet小程序
(4)jsp:param:参数传值
jsp内置对象
(1)request:常用方法
getParameter():提取表单元素的值
getRemoteAddr():获取客户端IP值
(2)response:
sendRedirect():重定向到其它网页
setcontentType();设置MIME值
(3)out:向网页输出
(4)application
setAttribute(String,Object)把变量的值保存在application中;
getAttribute(String)获取保存在applicaion中的值
removeAttribute(String)删除保存在application中的值
(5)session
setAttribute(String,Object)把变量的值保存在session中;
getAttribute(String)获取保存在session中的值
removeAttribute(String)删除保存在
jsp语法
jsp指令元素
(1)include:导入其它文件夹
(2)page:
language:用什么语言,只能为JAVA
contentType:MIME类型
import:导入java包
(3)taglib:自定义标签库
jsp常用标准元素
(1)jsp:forward:跳转到其它页面
(2)jsp:include:插入其它文件 eg:
(3)jsp:plugin:插入applet小程序
(4)jsp:param:参数传值
jsp内置对象
(1)request:常用方法
getParameter():提取表单元素的值
getRemoteAddr():获取客户端IP值
(2)response:
sendRedirect():重定向到其它网页
setcontentType();设置MIME值
(3)out:向网页输出
(4)application
setAttribute(String,Object)把变量的值保存在application中;
getAttribute(String)获取保存在applicaion中的值
removeAttribute(String)删除保存在application中的值
(5)session
setAttribute(String,Object)把变量的值保存在session中;
getAttribute(String)获取保存在session中的值
removeAttribute(String)删除保存在session中的值
getID:获取session编号
jsp简单表单处理
<%@page contentType="text/html;charset=gb2312"%>
<%@page language="java" %>
<html>
<head><title>表单处理</title></head>
<form name="frm" method="GET" action="ch-show.jsp">
<table boder=0>
<tr><td>用户名:</td><td><input type=text name="Tname"></td></tr>
<tr><td>密码:</td><td><input type=password name="Tpass"></td></tr>
<tr><td>性别:</td>
<td><input type=radio name="Tsex" value="男" checked>男
<input type=radio name="Tsex" value="女">女</td>
</tr>
<tr><td>爱好:</td>
<td><input type=checkbox name=Tch1 value="体育">体育
<input type=checkbox name=Tch2 value="美术">美术
<input type=checkbox name=Tch3 value="音乐">音乐</td>
</tr>
<tr><td>专业:</td><td><select name=Ty>
<option value="计算机">计算机</option>
<option value="文学">文学</option>
<option value="数学">数学</option>
</select>
<tr><td>留言:</td><td><textarea name=Tl rows=5 cols=20></textarea></td></tr>
<tr><td><input type=submit value="用户信息"></td></tr>
</table></form>
<%
String Tname=request.getParameter("Tname");
String Tpass=request.getParameter("Tpass");
String Tsex=request.getParameter("Tsex");
String Tlove1=request.getParameter("Tch1");
String Tlove2=request.getParameter("Tch2");
String Tlove3=request.getParameter("Tch3");
String Ty=request.getParameter("Ty");
String Tl=request.getParameter("Tl");
byte b1[]=Tsex.getBytes("ISO-8859-1");
Tsex=new String(b1);
if(Tlove1==null)
{
Tlove1="";
}
else
{
byte b2[]=Tlove1.getBytes("ISO-8859-1");
Tlove1=new String(b2);
}
if(Ty==null)
{
Ty="";
}
else
{
byte b5[]=Ty.getBytes("ISO-8859-1");
Ty=new String(b5);
}
if(Tlove2==null)
{
Tlove2="";
}
else
{
byte b3[]=Tlove2.getBytes("ISO-8859-1");
Tlove2=new String(b3);
}
if(Tlove3==null)
{
Tlove3="";
}
else
{
byte b4[]=Tlove3.getBytes("ISO-8859-1");
Tlove3=new String(b4);
}
out.print("你的信息是:"+"<br>");
out.print("用户名"+Tname+"<br>");
out.print("密码"+Tname+"<br>");
out.print("性别"+Tsex+"<br>");
out.print("爱好"+Tlove1+Tlove2+Tlove3+"<br>");
out.print("专业"+Ty+"<br>");
out.print("留言"+Tl+"<br>");
%>
</body>
posted @
2007-05-31 01:49 jadmin 阅读(75) |
评论 (0) |
编辑 收藏
http://www.chinaitlab.com/www/techspecial/tomcat/
posted @
2007-05-31 01:46 jadmin 阅读(76) |
评论 (0) |
编辑 收藏
JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
JSP动作包括:
posted @
2007-05-31 00:35 jadmin 阅读(68) |
评论 (0) |
编辑 收藏
Taglib 指令
定义一个标签库以及其自定义标签的前缀。
JSP 语法
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
例子
<%@ taglib uri="
http://www.jspcentral.com/tags" prefix="public" %>
<public:loop>
.
.
</public:loop>
描述
% @ taglib %指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
这里自定义的标签含有标签和元素之分。因为JSP文件能够转化为XML,所以了解标签和元素之间的联系很重要。标签只不过是一个在意义上被抬高了点的标记,是JSP元素的一部分。JSP元素是JSP语法的一部分,和XML一样有开始标记和结束标记。元素也可以包含其它的文本、标记、元素。比如,一个jsp:plugin元素有jsp:plugin开始标记和/jsp:plugin结束标记,同样也可以有jsp:params和jsp:fallback元素。
你必须在使用自定义标签之前使用% @ taglib %指令,而且你可以在一个页面中多次使用,但是前缀只能使用一次。
属性
uri="URIToTagLibrary"
Uniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行惟一的命名,URI可以是以下的内容:
Uniform Resource Locator(URL),由RFC 2396定义,查看
http://www.hut.fi/u/jkorpela/rfc/2396/full.html。
Uniform Resource Name(URN),由RFC 2396定义。
一个相对或绝对的路径
prefix="tagPrefix"
在自定义标签之前的前缀,比如,在中的public,如果这里不写public,那么这就是不合法的。请不要用jsp、jspx、java、javax、servlet、sun和sunw做你的前缀。
posted @
2007-05-31 00:34 jadmin 阅读(146) |
评论 (0) |
编辑 收藏
在JSP文件中,你可以通过命令定义整个JSP页面的属性,通过这个命令定义的属性会在本JSP文件中和包含近来的静态JSP页面起作用,但不会对动态包含文件起作用的。此命令的语法比较复杂一些,下面就是语法定义:
下面是使用Page命令的几个小例子:
通过Page命令,你可以为整个JSP页面定义上面提到的全局属性,其中除了"import"之外,其他的都只能引用一次,import属性和Java语言中的import非常相似,你可以在JSP页面中多次使用他。
关于的位置你可以不去考虑,放在任何地方,他都可以很好的工作,但出于良好的编程习惯,最好还是将他放在JSP页面的顶部。
好,下面我们就语法中提到的各种属性进行一一讲解:
language="java"
说明在你的JSP文件中使用的脚本语言,目前只能使用java。
extends="package.class"
声明在你的JSP页面中将要使用的Java超级类的名称,但使用的时候应该谨慎,因为使用他会限制JSP页面的编译能力。
import="{package.class | package.* }, ..."
使用这个属性,你可以将Java包包含到你的JSP页面中。如果你要包含多个包的话,将这些包的名称用逗号隔开放在一个import中,或者使用多个import分别声明。
下面一些Java包,是默认包含的,你不用再在你的JSP页面中,显式声明他们了:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
最后,你一定要注意在你的JSP文件中,在你使用某个包含在某个Java包中的元素之前一定要先声明该包的import引用。
session="true|false"
定义是否在客户浏览你的JSP页面的时候要使用HTTP的session。如果值为true,则可以使用session对象;如果值为false,则不能使用session对象或定义了scope=session的元素了。否则会出错。默认值为true。
buffer="none|8kb|sizekb"
为out对象指定发送信息到客户端浏览器的信息缓存大小。以kilobyte为单位。默认值是8kb.你也可以自行指定缓存的大小。
autoFlush="true|false"
指定是否当缓存填满时自动刷新,输出缓存中的内容。如果为true,则自动刷新。否则,当缓存填满后,可能会出现严重的错误。当你把buffer设置为none时,你就不能将buffer设置为false。
isThreadSafe="true|false"
指定JSP页面是否支持多线程访问。默认值是ture,表示可以同时处理多个客户请求,但是你应该在JSP页面中添加处理多线程的同步控制代码。如果设置为false,JSP页面在一个时刻就只能响应一个请求。
info="text"
指定一段字符,并插入到JSP文件中,并可以通过Servlet.getServletInfo()方法得到。
errorPage="relativeURL"
设置处理异常事件的JSP文件的位置。
isErrorPage="true|false"
设置是否显示错误信息。如果为true,你可以看到出错信息,如果为false,你就看不到了。
contentType="mimeType [; charset=characterSet ]" | "text/html;charset=ISO-8859-1"
指定JSP页面发送到客户端的信息使用的MIME类型和字符编码类型。默认的MIME类型是text/html,默认的字符集是ISO-8859-1。
最后,如果在你的多个JSP页面中都要使用来定义全局属性的话,你可以将此命令单独在一个JSP页面中进行定义,然后在所有使用此命令的页面中包含进去就可以了。
posted @
2007-05-31 00:33 jadmin 阅读(75) |
评论 (0) |
编辑 收藏