導航:首頁 > 編程大全 > jtree資料庫

jtree資料庫

發布時間:2025-06-28 09:06:34

A. PHP,jsP,ASP是什麼干什麼用的之間有什麼關系嗎

PHP,Hypertext Preprocessor,最初在95年問世(那時以前叫Personal Home Page)。PHP最初是製作動態網頁的伺服器端腳本語言,但現在PHP已經可以作為command line運行有GUI的standalone的程序。現在是PHP Group在開發和管理PHP的規則,功能等。但PHP大都用在dynamic webpage scripting上,好象沒聽過誰用它開發desktop application。

PHP使用率是製作動態網頁的幾種語言(JSP,ASP,ASP.NET, ColdFusion, Ruby, SHTML)中最高的。因為PHP在95年已經問世至今,以有相當數量的開發者。我們熟知的國際權威網路全書Wikipedia有90%用PHP寫的,而且國外流行多年的「校內網」FaceBook 也全部用PHP寫的,同時Yahoo, Sony官方,Pepsi百事官方這些網站都是用PHP的。根據維基網路(Wikipedia)的說法,PHP被超過20,000,000的網站所用,被超過1,000,000的網頁伺服器所用。目前到2008五月,PHP最新版本為5.2.6。

PHP不僅使用率高,而且能兼容各類平台。它可以在大多數網頁伺服器上運行(如:MS IIS,Apache),大多數操作系統上運行(如:Windows, UNIX, Linux)。而且PHP支持很大多數牌子的資料庫:MySQL, Informix, Oracle, Sybase, Solid, PostgreSQL, Gerneric ODBC等。

結構方面,雖比JSP,ASP.NET差點,PHP也有很多Framework可用。微軟的ASP.NET結構是出名的,JSP的MVC結構也很厲害,所以開發大網站ASP.NET,JSP都很快。而PHP Group也為此付出很大努力,來開發自己特有的結構適應不同類型的大網站的需求。常見的PHP的Framework有:CakePHP, PRADO, Symfony, Zend等。

另外LAMP結構,是PHP最常用的開發模式,即是配合Linux, Apache, MySQL, PHP,合稱LAMP。個人認為這種方式才是ASP.NET,PHP,JSP中最簡單的。

3. 說說JSP。(本人工作中用的最多的就是JSP)
JSP, javaServer Pages 是Java技術的一部分,可以說是Java Platform Enterprise Edition的一部分(JAVA主要3個大技術,Java SE, Java EE, Java ME)。軟體開發者可以用JSP來動態生成HTML,XML或者其他的文檔。然後把文檔response給網頁用戶。這項技術,可以用Java里的所有定義過的library來支持它的功能,所以JSP的API和普通Java EE的API一樣。

JSP里還有很多有功能的XML tag(如:<jsp:include>,<jsp:useBean)。這些都是JAVA內置功能,不需要導入新的外置 library。這些XML tag,可以在很多Web Server里使用(如:Apache, Apache TomCat, WebLogic等)。

JSP在編譯後就完全和Servlet一樣了。JSP頁面在第一次被用戶訪問的時候,首先被JAVA 編譯器,編譯成Java Servlet Class。然後編譯後Servlet Class,在以後被用戶訪問時,直接在JVM里運行,由JSP Web Container來輸出HTML給用戶。JSP這種「首次訪問-預編譯」的運行方式比傳統PHP(PHP 4和PHP以前版本),過時的ASP(所有版本的ASP),要快很多。(網路一位網友作過一個1萬次For Loop,循環的測試,結果發現JSP比傳統PHP,ASP快盡10被的速度就完成運算)。預編譯的運行方式後來被PHP5效仿,ASP.NET也是預編譯的。當然JSP還有一個好處,就是可以直接用純Java (無HTML),來寫一個Servlet,直接在JVM運行後,由JSP Web Container輸出HTML給用戶。只是Servlet有的時候寫一些presentation tier的東西很麻煩,因為它不能融合XML和輸出邏輯在一起。所以一般Servlet用於純Java的business logic邏輯。

JSP的tag還可以由用戶自己來創造和使用,這個和ASP.NET里的user-defined controls差不多。

MVC, Model-View-Controller,是JSP的普遍開發架構,用來把JSP技術中的presentation, business logic, data storage三層清楚的分開。這樣使開發過程更佳清楚明了,便於開發,維護。常用的MVB架構有:Barracuda, Apache Struts和Spring。JSF,JavaServer Faces是一個由SUN官方開發的Framework,是模仿ASP.NET的event-driven開發模式,和ASP.NET非常相似。但SUN 並沒有讓JSF替代JSP,相反JSF的開發者少之又少,但是據說現在JSF或JSP配合RAD(AJAX)開發很流行(校內網就是這樣,而且結合Struts)。

4. ASP(Active Server Pages), ASP.NET 兩個分別是 動態網頁開發語言,動態網頁開發語言和結構
(1) 關於ASP的淘汰
ASP, Active Server Pages已經過時了, 但因為其出現的早,96年就有了,所以現在有些中小網站還用(但,使用最多最廣的是PHP,最初於95年現世。ASP是微軟第一代動態網頁開發語言,只能在Windows系統 + MS IIS伺服器平台下運行。

Wikipedia, Facebook, 網路等都用PHP,PHP學習的簡單度和ASP差不多;JSP稍微難點,JSP用的一般都是銀行,購物等安全性較高的網站,Google也用JSP)。但隨著開發者的各種需求,ASP以後可以被ASP.NET取代,因為微軟停止對其的一切技術維護與功能更新。ASP.NET是革新版本的ASP(注意是「革新版本」,而非「改進版本」),或者說是完全新一代的Dynamic Web Scripting。

ASP代表著傳統的dynamic web scripting,與ASP.NET沒什麼關系,學了確實也沒用。因為ASP不象CGI(Common Gateway Interface),CGI是動態網站製作的始祖,所有ASP,JSP,PHP什麼的都根據CGI演化而來,而且ASP,PHP,JSP都包含了些 CGI的東西;而ASP卻沒有被衍生出任何新技術,ASP.NET也不算基於ASP,只能說ASP.NET開發理念,library,功能完全是基於.NET的其它組件。

其實PHP,JSP,ASP明白其中一種,其它的都很容易學會了。如果非要學學傳統的dynamic web scripting,那就學學PHP吧,不比ASP難,但比ASP功能多,穩定性好,PHP5運行速度也比ASP快很多(JSP稍難因為要學點 Java)。學了PHP或JSP什麼的,對學ASP.NET有好處,而且還可以直接用PHP,JSP進行開發。去google差差英文資源,有評價PHP 最好的,有評價JSP最好的,還從沒有聽誰說過ASP最好。

ASP.NET畢竟在.NET中,所以ASP.NET還是有相當地位的。

(2). 關於ASP.NET的優勢
ASP.NET是微軟.NET Framework的一部分。伴隨.NET 1.0在2002的問世,ASP.NET也出現在動態網頁開發語言的家族中(與PHP,JSP,ColdFusion, Ruby, SHTML等並行了)。

功能上,ASP.NET比ASP有更強大的library, 更好的穩定性。 ASP.NET可以使用.NET Framework中所有組件(也就是說.NET能實現的,ASP.NET一樣能實現),功能上顯然強大於傳統功能單調的ASP。最強的技術支持Web Service, 而且有.NET的所有library做後盾。而且ASP.NET 在.NET 3.5中還有微軟專門為AJAX開發的功能--ASP.NET AJAX。

結構上,傳統的ASP把所有代碼混為一團,簡單的用<%%>把HTML和VBScript(或JScript)分開,實現動態輸出 HTML。因為ASP.NET模仿JSP的MVC網頁結構,微軟為ASP.NET開發了自己的Code-Behind結構,將 presentation(文件拓展名:.aspx)和business logic(文件拓展名:.cs或.vb等)分離。同時Code-Behind模式也實現了讓ASP.NET開發者用.NET中最普通Winform的開發模式來開發網站,方便非網頁開發者製作動態網站。所以ASP.NET更容易維護,比ASP更適合於Enterprise Level 的大網站開發。

由於ASP.NET比JSP,PHP等更接近於.NET Winform的開發。如Tree View, Datagrid View(即高級Table)等高級UI,都可以直接用ASP.NET中的Web Control來實現,這比傳統的使用JavaScript + XTHML + CSS的DHTML開發方式簡單不少,也更好維護。同時ASP.NET開發這可以定義自己的User Control,製作自己特別的一種UI(如網站LOGO,版權等部分),而且此User Control可以被存為.ascx文件,方便讓每一頁(.aspx)來使用。

運行速度上,ASP.NET模仿了JSP的預編譯機制(Pre-Compile)。使編譯好的代碼(MSIL語言)在網頁伺服器上運行。這樣比傳統的ASP,傳統PHP(PHP4以前版本)更快,因為傳統的ASP是直接運行開發者寫的Script,相當於每運行一次,就得編譯一次那麼慢。 ASP.NET可以用VB, C#, J#等所有.NET Framework的語言開發.(但其實每種語言做的東西都一樣... 就象山東話, 東北話, 寫出來都是中文:)

不過ASP.NET對出學者可能有點難. 因為它其實在模擬desktop application development,即Winforms開發的模式, 不象傳統的JSP,PHP, ASP這樣容易明白。傳統的Dynamic Server Scripting, 象PHP 5, 這是現在最簡單的, 最有效的了。( 那個JSP也不難. 如果有錢還可以考慮下Adobe ColdFusion。)

ASP.NET的新潮的Dynamic Server Scripting, 在其帶動下SUN也推出自己的JavaServer Faces (其實是拓展JSP,但JSF無法取代JSP), 和ASP.NET很象, 也有很多Web Control(JTable, JTree),同時JSF也曾強了對WEB SERVCIE的支持, 也很適合ENTERPRISE LEVEL 的網站。

(3). ASP與ASP.NET的優劣總結:
-- ASP已經被微軟停止更新;ASP.NET卻在.NET(1.0, 2.0, 3.0, 3.5)中突飛猛進;
-- ASP在96年出現,並沒有引領一個潮流,PHP,ColdFusion都出現於95年,引領了整個潮流;ASP.NET引領新的動態網站開發潮流,SUN的JSF(JavaServer Faces)就是與ASP.NET極其相似;
-- ASP大多被用在是中小網站;PHP被Wikipedia, Facebook, 網路所用,JSP被GOOGLE所用;
-- ASP不支持Web Service; ASP.NET支持Web Service。要是了解.NET中的Web Service在大組織系統中的重要性,就能立桿見影的看出差距
-- ASP開發AJAX比較麻煩;而ASP.NET專門用AJAX控制項,更方便。要是了解Web 2.0,那麼AJAX是什麼地位,就不用我說了吧。
-- ASP.NET模仿JSP,是pre-compile的;ASP不compile,直接運行Script的速度顯然沒有compile之後的快。
-- ASP.NET的唯一缺點,就是開發用的IDE--Visual Studio Professional比較貴(express版免費的功能太少);ASP的唯一優點是,其

學起來最簡單,跟PHP一樣簡單,比JSP簡單,更比ASP.NET簡單幾倍。

B. 在JSP中調用JAVA類和使用JavaBean有什麼區別

可以像使用一般的類一樣使用JavaBean,Bean只是一種特殊的類。特殊在可以通過<jsp:useBean />調用JavaBean而其他類,可以和一般java中一樣使用. Bean的參數中還可以指定范圍, <jsp:useBean scope="application" />該Bean在伺服器的JVM中將只有一個實例. Bean是和WebServer相關的,不同的頁面可以通過Bean 交互.而在一個頁面中的類,就沒有這個功能,除非通過session,那又是另外一回事了.
bean其時也是class文件,只是普通的java文件沒有什麼限制,如果按bean的規范來製作class文件,那他就是一個bean。而按bean的規范來製作就相當是一個組件,換句話說bean就是組件技術。
為了確保一個java類成為javabean,有以下四個簡單的也是必須的規范:
這個類是可序列化的,即必須實現java.io.Serializable介面。
這個類必須帶有一個無參數的構造方法。
若成員變數名為XXX,那麼要有方法getXXX(),用來獲取屬性;setXXX(),用來修改屬性;對於Boolean類型的成員變數,可用is代替get和set類中的方法的訪問。屬性都必須是public的。類中如果有構造方法,那麼這個構造方法也是public的,並且無參數。
這個類包含所有必需的事件處理方法。
JavaBean和Servlet的不同 :
Type1: 一般的JavaBean中,只有屬性聲明和該屬性對應的setXxx和getXxx方法,(一般不建議)不包含業務邏輯;這種JavaBean可以簡單地理解為「數據對象」即可。
Type2: 還有一種JavaBean,其內包含業務處理邏輯,用於處理特定的業務數據;一般使用上面所述的「數據對象」(當然也可能不使用)。
Servlet主要是用來:接收請求、封裝『Type1』的JavaBean、調用『Type2』的JavaBean的相應業務邏輯方法、向客戶端發出響應。
以上是Struts 1.x所使用的模式:ActionForm 就是 Type1的JavaBean,ActionBean就是Type2的JavaBean,ActionServlet即是上面所述的Servlet。 Struts 2.x則是使用 Type1 + Type2的方式(數據對象和業務處理)和Servlet相結合的方式(實際上就是Webwork的方式)。

javaBean和Servlet有什麼區別?
什麼時候用javaBaen?
什麼時候用Servlet,什麼時候二者結合使用?
javabean無非就是裡面有些set和get方法
servlet用來處理一些邏輯層
javabean說籠統點是實現
javabean、servlet、jsp分別對應M(odel)、C(ontroller)、V(iew)
舉例: servlet查詢資料庫-----javabean保存查詢結果-----jsp顯示查詢結果
javabean就是一個普通的Java類,裡面為屬性增加了getter和setter並提供默認構造。可以在多層架構的各層存在。想用它作什麼都行。
而Servlet是展示層的東西……應當只在展示層存在。常作為MVC中的控制器。
一般說的Mvc模式,Servlet主要充當了C的作用。
javabean和servlet是兩回事.因為javabean是一個組件,可以用在任何地方,當然就可以用在servlet里了
按照Sun的定義,所謂的JavaEE應用,是由兩大部分組成:(1)組件,表示業務邏輯、表現邏輯,這部分由開發人員完成;(2)標準的系統服務,由JavaEE平台,亦即容器來提供,這個范圍之外的都不屬於JavaEE應用的范疇。而Servlet,作為JavaEE應用表現邏輯的組件之一,當然是JavaEE應用的一部分。而JavaBean,產生的年代早於J2EE,其技術用途更為廣泛不限於JavaEE使用,按照sun的定義,不屬於JavaEE技術范圍。
其實真正大規模使用JavaBean組件技術的是在Swing中,wing中的所有控制項包括JButton,JTree等用的都是JavanBean技術,這些控制項的基本編程模型正是大名鼎鼎的MVC模型,不信找出Swing API來,好好研究一下JTree、JTable,就知道什麼是真正的JavaBean了。
而Servlet是只能在JavaEE容器中存活的特殊Java類,就像是魚缸里的魚,沒有容器Servlet是不能生存的。而JavaBean則可以脫離JavaEE環境單獨存在,按照Sun的說法,既可以用在客戶端,也可以用在伺服器端。
所謂的POJO,就是EJB把E字去掉,剩下的JB就是JavaBean,換句話說,JavaBean在J2EE里,甚至可以充當某些EJB完成的任務,用途遠大於Servlet。最後的區別,就是 JavaBean的主要用途在於管理JavaEE應用各個層之間的數據流,所以在一些框架中(如Struts)有FormBean和ActionBean的說法,其本質都是為了管理數據。相信如果把上述幾點搞清,區分Servlet和JavaBean應當不會很困難的。

JSP和Servlet到底在應用上有什麼區別?
簡單的說,SUN首先發展出Servlet,其功能比較強勁,體系設計也很先進,只是,它輸出HTML語句還是採用了老的CGI方式,是一句一句輸出,所以,編寫和修改HTML非常不方便。 後來SUN推出了類似於ASP的鑲嵌型的JSP,把JSP TAG鑲嵌到HTML語句中,這樣,就大大簡化和方便了網頁的設計和修改。
新型的網路語言如ASP,PHP,JSP都是鑲嵌型的SCRIPT語言。 從網路三層結構的角度看,一個網路項目最少分三層:data layer,business layer, presentation layer。當然也可以更復雜。
Servlet用來寫business layer是很強大的,但是對於寫presentation layer就很不方便。JSP則主要是為了方便寫presentation layer而設計的。當然也可以寫business layer。
寫慣了ASP,PHP,CGI的朋友,經常會不自覺的把presentation layer和business layer混在一起,就像把資料庫處理信息放到JSP中。其實,它應該放在business layer中。根據SUN自己的推薦,JSP中應該僅僅存放與presentation layer有關的東西,也就是說,只放輸出HTML網頁的部份。而所有的數據計算,數據分析,資料庫聯結處理,統統是屬於business layer,應該放在JavaBean中。通過JSP調用JavaBean,實現兩層的整合。
實際上,微軟前不久推出的DNA技術,簡單說,就是ASP+COM/DCOM技術。與JSP+BEANS完全類似,所有的presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通過調用,實現整合。
為什麼要採用這些組件技術呢?因為單純的ASP/JSP語言是非常低效率執行的,如果出現大量用戶點擊,純SCRIPT語言很快就到達了他的功能上限,而組件技術就能大幅度提高功能上限,加快執行速度。
另外一方面,純SCRIPT語言將presentation layer和business layer混在一起,造成修改不方便,並且代碼不能重復利用。如果想修改一個地方,經常會牽涉到十幾頁CODE,採用組件技術就只改組件就可以了
綜上所述,Servlet是一個早期的不完善的產品,寫business layer很好,寫presentation layer就很臭,並且兩層混雜。
所以,推出JSP+Bean,用JSP寫presentation layer,用Bean寫business layer。SUN自己的意思也是將來用JSP替代Servlet。
可是,這不是說,學了Servlet沒用,實際上,還是應該從Servlet入門,再上JSP,再上JSP+BEAN。
強調的是:學了JSP,不會用JavaBean並進行整合,等於沒學。大家多花點力氣在JSP+Bean上。
我們可以看到,當ASP+COM和JSP+Bean都採用組件技術後,所有的組件都是先進行編譯,並駐留內存,然後快速執行。所以,大家經常吹的Servlet/JSP先編譯駐內存後執行的速度優勢就沒有了。
反之,ASP+COM+IIS+NT緊密整合,應該會有較大的速度優勢呈現。而且,ASP+COM+IIS+NT開發效率非常高,雖然BUG很多。
那麼,為什麼還用JSP+Bean?
因為JAVA實在前途遠大。微軟分拆後,操作系統將群雄並起,應用軟體的開發商必定要找一個通用開發語言進行開發,JAVA一統天下的時機就到了。如果微軟分拆順利,從中分出的應用軟體公司將成為JAVA的新領導者。
目前的JAVA大頭SUN和IBM都死氣沉沉,令人失望。希望新公司能注入新活力。不過,新公司很有可能和舊SUN展開JAVA標准大戰,雙方各自製定標准,影響JAVA誇平台。
另外,現在的機器速度越來越快,JAVA的速度劣勢很快就可以被克服。javabean可以作為模型+控制,也可以單做模型,也可以只用來做數據傳遞(JSP發送數據到Bean,BeanN執行execute,操作資料庫,反之也可)
如果還沒學到其它框架,如HIBERNATE,SPRING,STRUTS等。那javabean的作用是用來作數據的裝載,這種bean我稱為數據bean,比如從資料庫上查詢出的記錄可以保存在數據bean中。
javabean的另一外作用是用來處理一些業務邏輯,比如可以在javabean中用JDBC去訪問資料庫,從而從資料庫中載入信息到數據bean中,也可以從資料庫中刪除、保存數據等。
而Servlet的作用主要是用來控制頁面的跳轉,比如說從login.jsp發一個請求到Servlet中,Servlet調用業務bean的方法去查詢資料庫是否有此密碼和用戶名,如果正確Servlet就可以用request或者response對象的方法跳轉到想要的頁面。

JSP開發的兩種模式
模式一:JSP+JavaBeans
這就是指JSP+JavaBean技術。在模式一中,JSP頁面獨自響應請求並將處理結果返回客戶。所有的數據通過Bean來處理JSP實現頁面的表現。模式一技術也實現了頁面的表現--和頁面的商業邏輯相分離。
大量使用模式形式,常常會導致頁面被嵌入大量的腳本語言或JAVA代碼。當需要處理的商業邏輯很復雜時,這種情況會變得非常糟糕。大量的代碼會使整個頁面變得非常復雜。對於前端界面設計人員來說,這簡直不可想像。
這種情況在大項目中最為常見,這也造成了代碼的開發和維護出現困難,造成了不必要的資源浪費,在任何項目中,這樣的模式總會導致多多少少的定義不清的響應和項目管理的困難。
綜上所訴,模式一不能滿足大型項目的需要,但是可以較好的滿足小型應用,在簡單的應用中可以考慮模式一。

模式二:JSP+Servlet+JavaBeans
Servlets技術是一種採用JAVA技術來實現CGI功能的一種術。Servlets技術是運行在WEB伺服器上,用來生成WEB頁面。Servlets技術非常適用於伺服器端的處理和編程,並且Servlet會長期駐留在他們所處的位置。
但是在實際的項目開發過程中,頁面設計者可以方便地使用普通HTML工具來開發JSP頁面Servlet卻更適合於後端開發者使用,開發Servlet需要的是JAVA集成開發環境,也就是說Servlet技術更需要編程人員。
模式二技術結合了JSP和Servlet技術充分體現了兩者的技術優點。在此模式中通過JSP來表現頁面。通過Servlet來完成大量的事務處理。Servlet充當一個控制者的角色,並負責向客戶發送請求。Servlet創建JSP所需要的Bean和對象,然後根據用戶的請求行為,決定將哪個JSP頁面發送給客戶。
從開發的觀點,模式二具有更清晰的頁面表現,清楚的開發者角色劃分,可以充分利用開發小組的界面設計人員,這些優勢在大型項目開發中表現的尤為突出,使用這一模式,可以充分發揮每個開發者各自的特長,界面設計人員可以充分發揮自己的表現力,設計出優美的界面表現形式,設計人員可以充分發揮自己的商務處理思維,來實現項目中的業務處理。在大型項目中,模式二更被採用。

Servlet是一種獨立於平台和協議的位於Web伺服器內部的伺服器端的Java應用程序,與傳統的從命令行啟動的Java應用程序不同,Servlet由Web伺服器進行載入,該Web伺服器必須包含支持Servlet的Java虛擬機。
Java的Servlet與JSP(JavaServerPages)的比較:
JavaServerPages(JSP)是一種實現普通靜態HTML和動態HTML混合編碼的技術,JSP並沒有增加任何本質上不能用Servlet實現的功能。但是,在 JSP中編寫靜態HTML更加方便,不必再用println語句來輸出每一行HTML代碼。更重要的是,藉助內容和外觀的分離,頁面製作中不同性質的任務可以方便地分開:比如,由頁面設計者進行HTML設計,同時留出供Servlet程序員插入動態內容的空間。
JSP動態Web內容可能是動態Web內容的一項偉大的技術,並可將內容和表示presentation相分離,那為什麼servlets仍然有必要和JSP同時實施?
其實servlets的實用性並不是一個問題。它們在伺服器端處理方面的表現非常優秀,而且,由於它們引人注目的安裝方式而繼續存在著。事實上,可以將 JSP看作一種servlets的高級抽象,它以Servlet2.1的API擴展的形式來實現。
注意:不應該不加選擇地使用servlets;它們可能並不適用於每個人。例如,當一個頁面設計者可以很簡單地使用方便的HTML或XML工具來編寫 JSP頁面時,servlets可能更適合那些在後端的開發者,因為他們經常使用某種IDE來編寫。這是一種通常需要較高編程經驗的處理工作。
當發布servlets時,甚至開發者都不得不小心確保在presentation和內容之間不存在緊密結合。通常可以通過增加一個第三方發行包如 htmlKona來做到這一點。但即使可以做到這一點,雖然可以通過簡單的屏幕上的調整提供一些靈活性,仍無法保證在presentation自身格式上的變化。例如,如果你的presentation從HTML改變到DHTML,將仍然需要確保發行包和新的格式相一致,在最壞的case--scenario中,如果一個發行包無法得到,你將結束在動態web的內容中對presentation使用手寫代碼。所以,解決方法是什麼呢?
方法之一就是同時使用JSP和servlet技術來建立應用系統。

C. 怎樣有java socket實現發送接受表情類似qq詳細點代碼

哈 我正好在做一個類似qq的系統,不過還沒完工,不過可以運行,現在只實現了登錄,顯示分組,列出好友,查看好友信息功冊,看看代碼吧
哎 類太多了,像什麼vo類及實現類我就不發了,再說這些類沒什麼技術含量
如果有必要的話 你留下郵箱,我將兩個工程和資料庫代碼發給你
伺服器類:
package chat;

import impl.UserImpl;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import vo.Userinfo;
import .UserDao;

/**
* 伺服器類,用於接受來自客戶端的請求,本系統規定來自客戶端每一次請求 所傳過來的參數不少於兩個,第一個用來標識此次請求將做什麼操作,後面
* 的參數為客戶端請求服務所需的必要參數
*
* @author 程勝
* @version 0.1
* @date 09-01-08
*
*/
public class ChatServer extends Thread {
// 定義最大連接數
private static final int MAXLINK = 50;

// 記錄當前連接數
public static int linkNum = 0;

// 定義服務連接對象
private static ServerSocket ss;

public static void main(String[] args) throws Exception {
// 實例化服務類
ss = new ServerSocket(8001);
// 啟用多線程:其實就是調用run方法,好像沒必要另啟線程,哎 寫好了 就不改了
new ChatServer().start();
System.out.println("伺服器已成功啟動…………");
}

/*
* 覆寫run方法
*/
public void run() {
Socket soc = null;
try {
// 循環監聽客戶端請求
while (true) {
while (true) {
// 如果連接數已滿,則等待
if (linkNum >= MAXLINK)
this.sleep(100);
else {
break;
}
}
// 監聽請求
soc = ss.accept();
// 將連接加一
linkNum++;
// 獲得socket對象後調用處理類
new Operate(soc);
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (soc != null) {
try {
soc.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("伺服器出現莫名故障,伺服器退出!");
}
}

}
}

/**
* 操作類,用來處理來自客戶端的請求
*
* @author Administrator
*
*/
class Operate {
// 接定義用於實別客戶端發來的頭號請求將做何操作的變數
private String operate;

/**
* 以下幾行用於聲明網路操作的必要變數
*/
private Socket soc = null;

private InputStream ips = null;

private OutputStream ops = null;

private ObjectOutputStream soops = null;

private ObjectInputStream soips = null;

/**
* 構造函數,在其中為以上定義的變數的賦值
*
* @param soc
*/
Operate(Socket soc) {
this.soc = soc;
try {
ips = soc.getInputStream();
ops = soc.getOutputStream();
soips = new ObjectInputStream(ips);
// 接收從客戶端發來的頭號請求,它用於實別此次請求的內容
operate = soips.readObject().toString();
} catch (Exception e) {
System.out.println(e);
}
// 調用實際操作方法
whichOpe();

}

/**
* 判斷是哪個操作
*/
private void whichOpe() {
if ("login".equals(operate)) {
login();
} else {
if ("".equals(operate)) {

}
}
}

/**
* 連接資料庫,進行登錄驗證
*/
private void login() {
UserDao user = new UserImpl();
Userinfo user = null;
try {
// 讀取從客戶端傳過來的數據
user = (Userinfo) soips.readObject();
user = user.login(user);
soops = new ObjectOutputStream(ops);
// 將結果傳給客戶端
soops.writeObject(user);
soops.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
soops.close();
soips.close();
soc.close();
// 將連接數減一
ChatServer.linkNum--;

} catch (IOException e) {
System.out.println(e);
}
}
}
}
客戶端的兩個類:
package client;

import java.awt.Font;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import vo.Userinfo;

/**
* 登錄界面,繼承自jframe類
*
* @author 程勝
* @version 0.1
* @date 09-01-08
* @address 學校寢室:綜合樓424
*
*/
public class Login extends JFrame {
private final int TEXTSIZE = 10;// 定義文本長度的值

private JLabel lname = new JLabel("用戶名");

private JLabel lpassword = new JLabel("密碼");

private JLabel lhead = new JLabel("用戶登錄");

private JButton bok = new JButton("登錄");

private JButton bcancel = new JButton("退出");

private JPanel pcenter = new JPanel();

private JPanel pname = new JPanel();

private JPanel ppwd = new JPanel();

private JPanel psouth = new JPanel();

private JPanel pnorth = new JPanel();

private TextField pwd = new TextField(TEXTSIZE);

private JTextField name = new JTextField(TEXTSIZE);

private GridLayout glayout = new GridLayout();

public Login() {
// 設置界面大小及位置
this.setBounds(300, 200, 320, 250);
this.setTitle("用戶登錄");
this.setResizable(false);
// 設置窗口的關閉方式
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
// 布置窗口
this.frameLayout();
// 添加事件
this.addAction();
// 顯示窗口
this.show();
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Login();
}

/**
* 布置容器
*/
private final void frameLayout() {
lhead.setFont(new Font("", Font.BOLD, 28));
glayout.setColumns(1);
glayout.setRows(2);
pcenter.setLayout(glayout);
pname.add(lname);
pname.add(name);
pwd.setEchoChar('*');
ppwd.add(lpassword);
ppwd.add(pwd);
pnorth.add(lhead);
psouth.add(bok);
psouth.add(bcancel);
pcenter.add(pname);
pcenter.add(ppwd);
this.add(pnorth, "North");
this.add(pcenter, "Center");
this.add(psouth, "South");
}

/**
* 添加事件
*/
private final void addAction() {
bok.addActionListener(new AddAction());
bcancel.addActionListener(new AddAction());
name.addActionListener(new AddAction());
pwd.addActionListener(new AddAction());

}

/**
* 此類為內置類,用於事件處理
*
* @author Administrator
*
*/
private class AddAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == bcancel) {
System.exit(0);

} else {
if ("".equals(name.getText()) || "".equals(pwd.getText())) {
JOptionPane.showMessageDialog(Login.this, "用戶名和密碼不能為空");
} else {
try {
// 判斷輸入的數據是否合法
Integer.parseInt(name.getText());
} catch (Exception ex) {
JOptionPane.showMessageDialog(Login.this, "請正確輸入號碼");
return;
}
new TcpLogin(name.getText(), pwd.getText()).check();
}
}
}

}

/**
* 登錄驗證類,內置類 將用戶名和密碼傳到伺服器做驗證
*
* @author 程勝
* @version 0.1
* @date 09-01-08
*/
class TcpLogin {
private int name;

private String pwd = "";

/**
* 構造函數,初始化用戶名和密碼的值
*
* @param name
* @param pwd
*/
TcpLogin(String name, String pwd) {
this.name = Integer.parseInt(name);
this.pwd = pwd;
}

/**
* 連接伺服器,驗證用戶信息方法
*/
void check() {
Window waitWin=new Window(Login.this);
// 獲得界面
Login login = Login.this;
Userinfo user = new Userinfo();
user.setUserId(name);
user.setPassword(pwd);
Socket soc = null;
InputStream ips = null;
OutputStream ops = null;
ObjectInputStream coips = null;
ObjectOutputStream coops = null;
try {
soc = new Socket("127.0.0.1", 8001);
ips = soc.getInputStream();
ops = soc.getOutputStream();

coops = new ObjectOutputStream(ops);
coops.writeObject("login");
coops.writeObject(user);
coops.flush();

ObjectInputStream oips = new ObjectInputStream(ips);
user = null;
user = (Userinfo) oips.readObject();
if (user != null){
new XiHa(user);
login.dispose();
}
else {
JOptionPane.showMessageDialog(login, "用戶名和密碼錯誤");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ips.close();
ops.close();
soc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

}
package client;

import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.Timer;
import javax.swing.tree.DefaultMutableTreeNode;

import vo.Groupinfo;
import vo.Relationinfo;
import vo.Userinfo;

/**
* 此類為本程序客戶端的主界面,剛想了好會兒決定取名叫』嘻哈『 意為』嘻嘻哈哈『
*
* @author 程勝
* @version 0.1
* @date 09-01-08
* @address 學校寢室:綜合樓424
*/
public class XiHa extends JFrame {
// 好友信息
static List<Userinfo> friends = new ArrayList<Userinfo>();
// 用戶信息
private Userinfo user = null;

private JPanel ptree = new JPanel();

private JPanel psouth = new JPanel();

private JButton bfind = new JButton("查找");

private JButton bsystem = new JButton("系統設置");

/**
* 構造函數,設置界面基本參數
*/
public XiHa(Userinfo user) {
this.user = user;
this.setTitle("嘻嘻哈哈");
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setBounds(800, 100, 200, 500);
this.setResizable(false);
// 布置界面
initFrame();
// this.pack();
this.setVisible(true);
}

/**
* 用於界面布置
*/
private void initFrame() {
ptree.add(new JScrollPane(new CreateTree(user).createNode()));
psouth.add(bsystem);
psouth.add(bfind);
this.add(ptree, "Center");
this.add(psouth, "South");

}
}

/**
* 本類用於創建以用戶信息為節點的樹
*
* @author 程勝
* @version 0.1
* @date 09-01-08
* @address 學校寢室:綜合樓424
*
*/
class CreateTree {
JTree tree=null;
private Userinfo user = null;

CreateTree(Userinfo user) {
this.user = user;
}

/**
* 用伺服器傳回的數據創建一棵樹
*
* @return
*/
JTree createNode() {
//根結點
DefaultMutableTreeNode all = new DefaultMutableTreeNode("所有好友");
Set<Groupinfo> groups = user.getGroupinfos();
Set<Relationinfo> relations = user.getRelationinfosForUserId();
Iterator<Groupinfo> ig = groups.iterator();
Iterator<Relationinfo> ir = null;
Groupinfo group = null;
Relationinfo relation = null;
DefaultMutableTreeNode friendNode = null;
Userinfo friend = null;
while (ig.hasNext()) {
group = ig.next();
friendNode = new DefaultMutableTreeNode(group.getGroupName());

ir = relations.iterator();
while (ir.hasNext()) {
relation = ir.next();
if (relation.getResideGroupId() == group.getGroupId()) {
friend = relation.getFriend();
friendNode.add(new DefaultMutableTreeNode(friend
.getPetname()
+ "(" + relation.getFriendId() + ")"));
XiHa.friends.add(friend);
}
}
all.add(friendNode);
// rootTree.add(friendNode);
}
tree=new JTree(all);
tree.addMouseListener(new TreeListener());
return tree;
}
/**
* 此類為創建樹的內置類,用於對結點的事件處理
*
* @author 程勝
* @version 0.1
* @date 09-01-09
* @address 學校寢室:綜合樓424
*/
class TreeListener extends MouseAdapter{
private JFrame friendInfo=null;
private String nodeInfo="";
//用於區分單擊雙擊
Timer mouseTimer =null;
/*
* 覆寫mouseAdapter中的mouseClicked方法,滑鼠點擊時觸發
*/
public void mouseClicked(MouseEvent e){

//返回選定的結點
DefaultMutableTreeNode treeNode =null;
treeNode =(DefaultMutableTreeNode)CreateTree.this.tree.getLastSelectedPathComponent();
if(treeNode==null)return;
//如果它不是葉子結點就返回
if(!treeNode.isLeaf())return;

nodeInfo=treeNode.toString();
if(e.getClickCount()==1){
mouseTimer = new javax.swing.Timer(350, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//布置信息界面
initFriendInfo();
mouseTimer.stop();
}
});
mouseTimer.restart();

}else{
if(e.getClickCount()==2&&mouseTimer.isRunning()){
mouseTimer.stop();
//實例化聊天界面
new WinChat();
}

}

}

/**
* 布置friendInfo的界面
*/
private void initFriendInfo() {
friendInfo=new JFrame();
friendInfo.setSize(300,120);
friendInfo.setDefaultCloseOperation(friendInfo.DISPOSE_ON_CLOSE);
friendInfo.setLocationRelativeTo(null);
friendInfoContent(this.treat());
friendInfo.setVisible(true);

}
/**
* 設置窗口中的具體內容
* @param friendId
* @return
*/
private void friendInfoContent(int friendId) {
friendInfo.dispose();
Userinfo friend=this.findFriend(friendId);
JPanel pmain=new JPanel();
pmain.setLayout(new GridLayout(3,1));
JPanel panel1=new JPanel();
panel1.add(new JLabel("嘻哈號:"+friend.getUserId()+" "+"昵稱:"+friend.getPetname()));
JPanel panel2=new JPanel();
panel2.add(new JLabel("姓名:"+(friend.getName()==null?"":friend.getName())+" "+"年齡:"+friend.getAge()+" "+"性別:"+friend.getSex()));
JPanel panel3=new JPanel();
panel3.add(new JLabel("個性簽名: "+(friend.getAutograph()==null?"":friend.getAutograph())));
pmain.add(panel1);pmain.add(panel2);pmain.add(panel3);
friendInfo.add(pmain);
}
/**
* 此方法用於獲得好友的id號 從節點上的文本中獲取
* @return 好友id
*/
private int treat(){
int len=nodeInfo.getBytes().length;
int friendId=Integer.parseInt(new String(nodeInfo.getBytes(),len-5,4));
return friendId;

}
/**
* 此方法用於按id查找好友信息
* @param friendId
* @return 好友信息
*/
private Userinfo findFriend(int friendId){
Userinfo friend=null;
Iterator friends=XiHa.friends.iterator();
while(friends.hasNext()){
Userinfo ifriend=(Userinfo)friends.next();
if(ifriend.getUserId()==friendId){
friend=ifriend;
break;
}
}
return friend;

}

}
}
/**
* 本類聊天窗口類,還不知道該怎麼寫,現在有點茫然,剛跟網友交流了一下
* 覺得前面寫的通信代碼很不規范,應該重新寫,哎 先把界面寫好再說
*
* 一會兒就要回去過年了,可能就沒那麼時間寫這個系統了
* @author 程勝
* @version 0.1
* @date 09-01-11
* @address 學校寢室:綜合樓424
*
*/
class WinChat extends JFrame{
private JPanel pmain=new JPanel();
private JPanel pcether=new JPanel();
private JPanel psouth=new JPanel();
//private JTextArea precod=new JTextArea(JTextArea.);
}

D. 誰能詳細介紹一下java swing里的JTable JTree是怎樣用的以及他們的方法!

Swing是由100%純Java實現的,Swing組件是用Java實現的輕量級( light-weight)組件,沒有本地代碼,不依賴操作系統的支持,這是它與AWT組件的最大區別。由於AWT組件通過與具體平台相關的對等類(Peer)實現,因此Swing比AWT組件具有更強的實用性。Swing在不同的平台上表現一致,並且有能力提供本地窗口系統不支持的其它特性。

Swing採用了一種MVC的設計範式,即"模型-視圖-控制"(Model-View-Controller),其中模型用來保存內容,視圖用來顯示內容,控制器用來控制用戶輸入。

在AWT組件中,由於控制組件外觀的對等類與具體平台相關,使得AWT組件總是只有與本機相關的外觀。Swing使得程序在一個平台上運行時能夠有不同的外觀。用戶可以選擇自己習慣的外觀。

7.1.2 Swing的類層次結構

在javax.swing包中,定義了兩種類型的組件:頂層容器(JFrame,JApplet,JDialog和JWindow)和輕量級組件。Swing組件都是AWT的Container類的直接子類和間接子類。

java.awt.Component
-java.awt.Container
-java.awt.Window
-java.awt.Frame-javax.swing.JFrame
-javax.Dialog-javax.swing.JDialog
-javax.swing.JWindow
-java.awt.Applet-javax.swing.JApplet
-javax.swing.Box
-javax.swing.Jcomponet

swing包是Swing提供的最大包,它包含將近100個類和25個介面,幾乎所有的Swing組件都在swing包中,只有JtableHeader和 JtextComponent是例外,它們分別在swing.table和swing.text中。
swing.border包中定義了事件和事件監聽器類,與AWT的event包類似。它們都包括事件類和監聽器介面。
swing.pending包包含了沒有完全實現的Swing組件。
swing.table包中主要包括了表格組建(JTable)的支持類。
swing.tree同樣是JTree的支持類。
swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用於顯示和編輯文檔的包。

閱讀全文

與jtree資料庫相關的資料

熱點內容
servu批量上傳文件 瀏覽:930
dnf85版本罐子 瀏覽:174
製作一款app需要什麼人員 瀏覽:553
哪些場所的網路比較好 瀏覽:317
魅族5更新文件在哪裡 瀏覽:68
linux怎麼修改文件夾所屬用戶 瀏覽:359
mcafee怎麼信任文件 瀏覽:87
蘋果超薄筆記本換cpu 瀏覽:507
蘋果6s為什麼微信一直振動 瀏覽:618
高速路app哪個好用 瀏覽:387
蘋果4s的網路怎麼設置 瀏覽:361
javatimer替代 瀏覽:753
ps美化照片視頻教程 瀏覽:835
會聲會影保存文件格式 瀏覽:396
蘋果手機怎樣設置問題 瀏覽:878
win10徹底刪除一個文件 瀏覽:631
電商平台代碼查詢 瀏覽:580
辦公室用文件伺服器 瀏覽:14
saemysql用戶名密碼 瀏覽:58
紅米為什麼顯示E網路 瀏覽:768

友情鏈接