<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0
     
    GPL
    ??????? 在自由軟件所使用的各種許可證之中,最為人們注意的也許是通用性公開許可證(General Public License,簡稱GPL)。

    ??????? GPL同其它的自由軟件許可證一樣,許可社會公眾享有:運行、復制軟件的自由,發行傳播軟件的自由,獲得軟件源碼的自由,改進軟件并將自己作出的改進版本向社會發行傳播的自由。

    ??????? GPL還規定:只要這種修改文本在整體上或者其某個部分來源于遵循GPL的程序,該修改文本的整體就必須按照GPL流通,不僅該修改文本的源碼必須向社會公開,而且對于這種修改文本的流通不準許附加修改者自己作出的限制。因此,一項遵循GPL流通的程序不能同非自由的軟件合并。GPL所表達的這種流通規則稱為copyleft,表示與copyright(版權)的概念“相左”。
    posted @ 2007-06-10 02:12 jadmin 閱讀(46) | 評論 (0)編輯 收藏

    ???????? 傳說一個人向另一個人要了襯衣上的第二顆紐扣,用紅繩系住,掛在脖子上,就會永不變心的愛著給她紐扣的那個人.可為什么一定要是第二顆紐扣? 那是因為,在你的衣服上,第二顆的紐扣最靠近你的心.從上往下數的第二顆紐扣是"心",因為靠近心臟,希望它能讓愛在心中變的永恒.所以第二顆紐扣一般會送給自己最愛的人.
      有一個關于第二顆紐扣的經典故事:他是一個鉆石王老五,也是一個情場浪子。他是我的好朋友,欣賞我的才華,卻對我相守終身的愛情觀點不屑一顧。他愛說的話是:人既然來這個世界走一遭,就該多愛幾個人。他的言下之意,當然是多甩幾個人,不為誰停留。
      誰也不曾知道,這樣一個浪子,卻會閃電般回頭,娶了一個雖然溫婉卻并不花容月貌的女子。
      在他的婚禮宴席上,他告訴我們這樣一個故事。
      他每年有大部分時間在全國各個城市漂,所以他也習慣在每座經歷過的城市找些女子打發寂寞的時間。在一座小城,他認識了外表普通性格溫柔的她,一番溫存之后,他即將離開這座城市,于是像他對待任何一段感情一樣,他欺騙她說,你是我最愛的人,但是我工作太忙,等我不忙的時候一定來娶你。他知道,女人都不是傻瓜,一般不會等他“工作不忙”的時候再來娶她,最多就是大吵大鬧之后,拿些錢財物質來平息怨恨。
      可是這個溫柔的女子卻默默地凝視著他,什么要求都沒有提。她送他上火車的時候,仰著頭,低聲而固執地說,給我你襯衣上的第二顆紐扣。他驚訝她要求的卑微和奇怪,可是在離開一個女人的時候他從來不會拒絕她的要求。于是他剪下第二顆紐扣,和一條鉑金項鏈一起交到她的手心。
      她接過紐扣,卻輕輕推開了那條項鏈。他上火車的一剎那,聽到她說,以后要自己保重身體。他回頭,看到她滿臉淚水。他明白,她是知道的,他這一去便不會再回來。他于是更加不明白,為何她只需要他的一顆普通紐扣。
      他又恢復了自己的生活軌跡,愛上各種各樣的女子,又離開她們。在分手的時候每個女人都會提出各種各樣的要求:有的,是要一座房子;有的,是要銀行存款;有的,是要他安排舒適的工作。可是,那些和他溫存過的女子,那些像他一樣愛說甜言蜜語為他哭為他笑過的情人們,在得到了那些她們所渴望的物質以后,都會把冷冷的背影留給他,一如他離開她們的時候那般絕情。
      奇怪的是,再也不曾有女人想要他襯衣上的第二顆紐扣。
      有一回,他讀中學的侄女來他家玩,見到了衣柜里他那缺了第二顆紐扣的襯衣,像發現了秘密一般說,叔叔,誰是你的心上人?他詫異。侄女告訴他,這是一個來自日本的傳說,第二顆紐扣是送給情侶的最好禮物,因為它占據胸口的位置……
      當天晚上,他坐最快的火車來到了他以為自己永遠不會回來的小城市,叩響她的門,見到穿著睡衣的她脖子上掛著一根紅繩,墜子就是他的那顆普通紐扣。
      沒有誰知道,已經30多歲的他,外表那么瀟灑而內心卻是寂寞的,在夜深人靜的時候,他聆聽自己內心,原來也是渴望被人愛的。是的,他是擁有數不清的女人,卻不過只是一些空洞的缺乏靈魂的身體??墒沁@個把他的普通紐扣系在脖子處貼在身體上的女子,卻讓他明白了什么是真正的愛,他漂泊的心仿佛也終于找到了停泊的港灣。
      在愛情里,從來不是以你征服了多少數量的異性為勝利的,也不是以你通過愛情得到了某些物質利益來詮釋幸福的。真正幸福的人們,是茫茫人海里,有一個人,純粹地愛你,無怨無悔無要求地把你放在胸口的位置——遺憾的是,擁有這樣幸福的人很少很少,所以,如果你遇到了,請記得一定要珍惜。
      如果有一天有人向你要了你上衣的第二顆紐扣,并把它系在脖子上的話,那代表他是最愛你的人. 就算你要離開他,不能擁有你的心,但是只要能感受你心臟跳動的溫暖,他就滿足了.

    posted @ 2007-06-09 18:52 jadmin 閱讀(69) | 評論 (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++呢?。T?004年,微軟和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,自己確定新的標準??赡苁且驗镮BM感覺自己勢單力孤,最后把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、開發者以及開源社區來說,也無疑是件好事情?!耙驗槲覀冴P心平臺的發展,我們同樣也關心虛擬機的統一,來代替談論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的批評都有失公平?!昂芏鄬un公司的猛擊事實上來自其它私人的利益,他們希望將自己偽裝成開源的保護人,而將Sun公司說成是有點傲慢的壞人,而事實上,在JCP中,Java證書的統治體,開源社區的人們已在2003年出現。開源社區的注入以及我們在JCP中所做的工作,使得它得以實現。我們是EJB3.0的關鍵貢獻者。我們正在領導WebBean,WebBean是下一代Web應用程序?!?

      Fleury對Sun的批評家表現得并不算大方,他說:“IBM對Sun的通告很消極,因為IBM對開源社區態度是施伎倆,引導開源社區去做某些事情,IBM接近他們,并將他們進行包裝,將它們貼上所有者標簽,并將其投放于市場作為結果----例如websphere就是這樣的一個例子。所以他們對于自身制造的產品和對其他低成本的開源產物有著雙重的策略,這種策略通常在BSD這樣的證書中運作得很好,因為在這種證書中,你可以作為創造者,你也可以作為賣主,有競爭力的提供是所有者?!盨un公司在GPL下發布的舉措,是針對IBM在Harmony制造以及Apache試圖在BSD下開源發布而提出的。我對IBM的舉措有點失望。因為他們展示了他們的“strip mining”策略。在之前,他們都是說’開源很不錯,開源很好’的,但是你們又說開源軟件不好,為什么呢?”GPL意味著Java”將永遠在開源軟件社區存在。你不能對它置之不理,這是開源軟件成立許可證的好處,IBM將會反對這樣做,為什么呢?因為他們在‘我們需要開源’這個事情上像狼似的哭叫,當Sun將他們稱為虛張聲勢的人,并且投向GPL的懷抱,他們當然不會高興?!?
    posted @ 2007-06-03 22:34 jadmin 閱讀(87) | 評論 (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 閱讀(90) | 評論 (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 閱讀(78) | 評論 (0)編輯 收藏

    http://www.chinaitlab.com/www/techspecial/tomcat/

    posted @ 2007-05-31 01:46 jadmin 閱讀(79) | 評論 (0)編輯 收藏
    JSP動作利用XML語法格式的標記來控制Servlet引擎的行為。利用JSP動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁面、為Java插件生成HTML代碼。
    JSP動作包括:??
    posted @ 2007-05-31 00:35 jadmin 閱讀(72) | 評論 (0)編輯 收藏
      Taglib 指令
      
      定義一個標簽庫以及其自定義標簽的前綴。
      
      JSP 語法
      
      <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
      
      例子
      
      <%@ taglib uri="   <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 閱讀(148) | 評論 (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 閱讀(82) | 評論 (0)編輯 收藏
    僅列出標題
    共50頁: First 上一頁 37 38 39 40 41 42 43 44 45 下一頁 Last 
    主站蜘蛛池模板: 0588影视手机免费看片| 欧洲美女大片免费播放器视频| www亚洲精品久久久乳| 免费视频精品一区二区三区| 国产成人高清精品免费鸭子 | 爱爱帝国亚洲一区二区三区| 国产免费拔擦拔擦8X高清在线人| 亚洲男人的天堂一区二区| 亚洲一区二区观看播放| 美丽的姑娘免费观看在线播放 | 国产亚洲人成在线影院| 成人一a毛片免费视频| 亚洲黄色在线电影| 免费91最新地址永久入口| 亚洲色无码一区二区三区| 久久久亚洲精华液精华液精华液| 无遮免费网站在线入口| 久久亚洲AV成人无码软件| 久久aⅴ免费观看| 亚洲AV日韩AV高潮无码专区| 丁香花在线视频观看免费| 伊人婷婷综合缴情亚洲五月| 国产美女视频免费观看的网站| 亚洲精品一级无码鲁丝片 | 久久久久女教师免费一区| 亚洲一级黄色视频| 一级大黄美女免费播放| 在线精品亚洲一区二区三区| 国产区在线免费观看| 亚洲AV永久无码精品水牛影视| 在线观看免费视频一区| 亚洲av最新在线网址| 久久午夜羞羞影院免费观看| 亚洲AV无码成人网站久久精品大 | 久久久久久a亚洲欧洲aⅴ| 久久精品免费一区二区| 国产亚洲精品美女2020久久| 亚洲午夜久久久久妓女影院| 18禁超污无遮挡无码免费网站国产| 男人扒开添女人下部免费视频| 亚洲国产精品久久久久|