Java架構(gòu):
10年的安鄉(xiāng)網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整安鄉(xiāng)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“安鄉(xiāng)網(wǎng)站設(shè)計”,“安鄉(xiāng)網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
軟件架構(gòu)作為一個概念,體現(xiàn)在技術(shù)和業(yè)務(wù)兩個方面。
從技術(shù)角度來說:軟件架構(gòu)隨著技術(shù)的革新不斷地更新其內(nèi)容,軟件架構(gòu)建立于當(dāng)前技術(shù)和一些基本原則的基礎(chǔ)之上。
先說一些基本原則:
分層原則:分層是為了降低軟件深度復(fù)雜性而使用的關(guān)鍵思想,就像社會有了階級一樣,軟件有了層次結(jié)構(gòu)。
模塊化原則:模塊化是化解軟件廣度復(fù)雜的必然手段,模塊化的目的就是讓軟件分工。
接口實現(xiàn)分離原則隨著軟件模塊化的不斷深入改進,面向接口編程而不是面向?qū)崿F(xiàn)編程可以讓復(fù)雜度日趨增高的軟件降低模塊之間的耦合度,從而讓各模塊更輕松改進。從這個原則出發(fā),軟件也從微觀進行了細致的規(guī)范化。
還有兩個比較小但很重要的原則:
細節(jié)隱藏原則很顯然把復(fù)雜問題簡化,把難看的細節(jié)隱去,能讓軟件結(jié)構(gòu)更清晰。其實這個原則使用很普遍,java/c++語言中的封裝原則以及設(shè)計模式中的Facade(外觀)模式就很能體現(xiàn)這個原則的精神。
依賴倒置原則隨著軟件結(jié)構(gòu)的進一步發(fā)展,層與層之間、模塊與模塊之間的依賴逐漸加深,而層、模塊的動態(tài)可插拔要求不端增大。依賴倒置原則可看視為接口實現(xiàn)分離原則的深化,根據(jù)此原則的精神,軟件進入了工具時代。這個原則有點類似于知名的好萊塢法則:Don't call us, we'll call you。
以上這些原則奠定了我們的軟件架構(gòu)的價值指標(biāo)。但軟件架構(gòu)畢竟是建立在當(dāng)前技術(shù)之上的。而每一代技術(shù)都有架構(gòu)模式。過去的不再說了,讓我們現(xiàn)在就來看一下當(dāng)前流行的技術(shù),以及當(dāng)前我們能采用的架構(gòu)。
因為面向?qū)ο笫钱?dāng)前最流行開發(fā)技術(shù),且設(shè)計模式的大量使用使面向?qū)ο蟮淖呦虺墒欤鴶?shù)據(jù)庫是當(dāng)前最有效的存儲結(jié)構(gòu)、web界面是當(dāng)前最流行的用戶接口,所以當(dāng)前最典型的三層次架構(gòu)就架構(gòu)在以上幾項技術(shù)的基礎(chǔ)之上,用數(shù)據(jù)庫作存儲層、用面向?qū)ο髞韺崿F(xiàn)業(yè)務(wù)層、用web來作為用戶接口層。我們從三層次架構(gòu)談起:
因為面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)不適配,所以在標(biāo)準三層次架構(gòu)的基礎(chǔ)上,我們增加了數(shù)據(jù)持久層,來管理O-R雙向映射,但目前一直沒有最理想的實現(xiàn)技術(shù)。cmp和entity bean技術(shù)因為其實現(xiàn)復(fù)雜,功能前景有限,已接近被淘汰的邊緣。JDO及hibernate作為o-r映射的后期之秀,尤其是hibernate,功能相當(dāng)完備。推薦作為持久層的首選
在業(yè)務(wù)層,因為當(dāng)前業(yè)務(wù)日趨負載,且變動頻繁,所以我們必須有足夠敏捷的技術(shù)來保證我們的適應(yīng)變化的能力,在標(biāo)準j2ee系統(tǒng)中session bean負責(zé)業(yè)務(wù)處理,且有不錯的性能表現(xiàn),但采用ejb系統(tǒng)對業(yè)務(wù)架構(gòu)模式改變太大,且其復(fù)雜而昂貴,業(yè)務(wù)代碼移植性差。而spring 作為一個bean配置的輕量級架構(gòu),漂亮的IOC模式實現(xiàn),對業(yè)務(wù)架構(gòu)影響小,所以推薦作為中間層業(yè)務(wù)框架。
在用戶結(jié)構(gòu)層,雖然servlet/jsp/jstl/javaBean 能夠?qū)崿F(xiàn)MVC架構(gòu),但終究過于粗糙。struts對MVC架構(gòu)的實現(xiàn)就比較完美,Taperstry也極好地實現(xiàn)MVC架構(gòu),且采用基于事件的方式,非常誘人,惜其不夠成熟,我們?nèi)耘f推薦struts作為用戶接口層基礎(chǔ)架構(gòu)。
因為業(yè)務(wù)層是三層次架構(gòu)中最有決定意義的,所以讓我們回到業(yè)務(wù)層細致地分析一下,在復(fù)雜的業(yè)務(wù)我們常常需要以下基礎(chǔ)服務(wù)的一種或幾種:事務(wù)一致性服務(wù)acid(tool:jta/jts)、并發(fā)加鎖服務(wù)concurrentlock、池化管理服務(wù)cache、訪問控制服務(wù)(tool:jaas)、流程控制服務(wù)workflow、動態(tài)實現(xiàn)服務(wù)IOC,串行化消息服務(wù)(tool:jms)、負載平衡服務(wù)blance等。如果我們不采用重量級應(yīng)用服務(wù)器(如weblogic,websphere,jboss等)及重量級組件(EJB),我們必須自己實現(xiàn)其中一些服務(wù)。雖然我們大多情況下,不需要所有這些服務(wù),但實現(xiàn)起來卻非易事。幸運的是我們有大量的開源實現(xiàn)代碼,但采用開源代碼卻常常是件不輕松的事。
隨著xml作為結(jié)構(gòu)化信息傳輸和存儲地位日漸重要,一些xml文檔操作工具(DOM,Digester,SAX等)的使用愈發(fā)重要,而隨著xml schema的java binding工具(jaxb,xmlbean等)工具的成熟,采用xml schema來設(shè)計xml文檔格式,然后采用java binding來生成java bean 會成為主要編程模式,而這又進一步使數(shù)據(jù)中心向xml轉(zhuǎn)移,使在中小數(shù)據(jù)量上,愈發(fā)傾向于以xquery為查詢語言的xml數(shù)據(jù)庫。最近還有一個趨勢,microsoft,ibm等紛紛大量開發(fā)中間軟件如(microsoft office之infopath),可以直接從xml schema 生成 錄入頁面等非常實用的功能。還有web service 的廣泛應(yīng)用,都將對軟件的架構(gòu)有非常重大的影響。至于面向服務(wù)架構(gòu)(SOA)前景如何,三層次架構(gòu)什么時候走入歷史,現(xiàn)在還很難定論。
aop的發(fā)展也會對軟件架構(gòu)有很深的影響,但在面向?qū)ο蠹軜?gòu)里,無論aspectJ還是jboss-aop抑是aspectWerks、nanning都有其自身的嚴重問題:維護性很差,所以說它將很難走遠。也許作為一個很好的思想,它將在web service里大展身手。
rdf,owl作為w3c語義模型的標(biāo)志性的語言,也很難想象能在當(dāng)前業(yè)務(wù)架構(gòu)發(fā)揮太大影響。但如果真如它所聲稱那樣,廣泛地改變著信息的結(jié)構(gòu)。那么對軟件架構(gòu)也會有深遠影響。
有關(guān)架構(gòu)設(shè)計的一些忠告:
盡量建立完整的持久對象層.可獲得高回報
盡量將各功能分層,分塊,每一模塊均依賴假定的其它模塊的外觀
不能依賴靜態(tài)數(shù)據(jù)來實現(xiàn)IOC模式,應(yīng)該依賴數(shù)據(jù)特征接口,靜態(tài)數(shù)據(jù)僅是數(shù)據(jù)特征接口實現(xiàn)方式之一
架構(gòu)設(shè)計時xml是支持而不是依賴.但可以提供單一的xml版本的實現(xiàn)
從業(yè)務(wù)角度說:軟件架構(gòu)應(yīng)是深刻體現(xiàn)業(yè)務(wù)內(nèi)部規(guī)則的業(yè)務(wù)架構(gòu),但因為業(yè)務(wù)變化頻纴,所以軟件架構(gòu)很難保持恒定不變,但業(yè)務(wù)的頻繁變化不應(yīng)是軟件架構(gòu)大規(guī)模頻繁變化的原因,軟件架構(gòu)應(yīng)是基于變化的架構(gòu)。
一種業(yè)務(wù)有其在一段時間內(nèi)穩(wěn)定存在的理由(暫且不談),業(yè)務(wù)內(nèi)部有許多用例,每一種用例都有固定的規(guī)則,每一規(guī)則都有一些可供判定的項,每一項從某一維度來觀察都是可測量的,我們的架構(gòu)首先必須保證完美適應(yīng)每一項每一種測量方式,很多失敗的架構(gòu)都是因為很多項的測量方式都發(fā)生變更這種微觀變化中。
每個用例都有規(guī)則,我們在作業(yè)務(wù)用例分析,常常假定一些規(guī)則是先驗的,持久穩(wěn)定的,然而后來的業(yè)務(wù)改變常常又證明這種看法是錯誤的,然而常常我們的架構(gòu)已經(jīng)為之付出了不可挽回的代價。大量事實證明:規(guī)則的變化常常用例變化的根本原因。所以我們的架構(gòu)要盡可能適應(yīng)規(guī)則的變化,盡可能建立規(guī)則模版。
每個用例都關(guān)系著不同的角色。每一個用例的產(chǎn)生都必然是因為角色的變更(注意:不是替換,而是增強或減弱),所以注意角色的各種可能情況,對架構(gòu)的設(shè)計有舉足輕重的意義。在我們當(dāng)前的三層架構(gòu)里,角色完美地對應(yīng)接口概念。
在一個系統(tǒng)里很多用例都相互關(guān)聯(lián),考慮到每個用例均有可能有不同的特例,所以在架構(gòu)設(shè)計中,盡量采用依賴倒置原則。如架構(gòu)許可可采用消息通信模式(JMS)。這樣可降低耦合度。
現(xiàn)在我們談一下業(yè)務(wù)穩(wěn)定存在理由對業(yè)務(wù)的影響。存在即是合理,在這里當(dāng)然是正確的。業(yè)務(wù)因人而存在,所以問業(yè)務(wù)存在的理由即是問不同角色的需要這項業(yè)務(wù)的理由以及喜歡不喜歡當(dāng)前業(yè)務(wù)用例的理由,所有這樣的角色都應(yīng)該在系統(tǒng)里預(yù)留?!洞m(xù)》
在架構(gòu)設(shè)計中有幾個原則可以考慮:
用例盡量細分
用例盡量抽象
角色盡量獨立
項測量獨立原則
追求簡單性
這里未提供相關(guān)的例子,例子會在以后的更新時提供。
業(yè)務(wù)和模式之間的關(guān)系
業(yè)務(wù)中的一些用例之間的關(guān)系常常和一些常規(guī)的模式很相似。但隨著時間的演化,慢慢地和先前的模式有了分歧。這是個正常的現(xiàn)象。但這對系統(tǒng)架構(gòu)卻要求非常高,要求系統(tǒng)架構(gòu)能適應(yīng)一些模式的更替。在這里我們盡可能早地注意到用例之間的相互角色變化,為架構(gòu)更新做好準備.
十大常用框架:
一、SpringMVC
二、Spring
三、Mybatis
四、Dubbo
五、Maven
六、RabbitMQ
七、Log4j
八、Ehcache
九、Redis
十、Shiro
延展閱讀:
一、SpringMVC
Spring Web MVC是一種基于Java的實現(xiàn)了Web MVC設(shè)計模式的請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將web層進行職責(zé)解耦,基于請求驅(qū)動指的就是使用請求-響應(yīng)模型,框架的目的就是幫助我們簡化開發(fā),Spring Web MVC也是要簡化我們?nèi)粘eb開發(fā)的。
模型(Model )封裝了應(yīng)用程序的數(shù)據(jù)和一般他們會組成的POJO。
視圖(View)是負責(zé)呈現(xiàn)模型數(shù)據(jù)和一般它生成的HTML輸出,客戶端的瀏覽器能夠解釋。
控制器(Controller )負責(zé)處理用戶的請求,并建立適當(dāng)?shù)哪P?,并把它傳遞給視圖渲染。
Spring的web模型 - 視圖 - 控制器(MVC)框架是圍繞著處理所有的HTTP請求和響應(yīng)的DispatcherServlet的設(shè)計。
Spring Web MVC處理請求的流程
具體執(zhí)行步驟如下:
1、 首先用戶發(fā)送請求————前端控制器,前端控制器根據(jù)請求信息(如URL)來決定選擇哪一個頁面控制器進行處理并把請求委托給它,即以前的控制器的控制邏輯部分;圖2-1中的1、2步驟;
2、 頁面控制器接收到請求后,進行功能處理,首先需要收集和綁定請求參數(shù)到一個對象,這個對象在Spring Web MVC中叫命令對象,并進行驗證,然后將命令對象委托給業(yè)務(wù)對象進行處理;處理完畢后返回一個ModelAndView(模型數(shù)據(jù)和邏輯視圖名);圖2-1中的3、4、5步驟;
3、 前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名,選擇相應(yīng)的視圖進行渲染,并把模型數(shù)據(jù)傳入以便視圖渲染;圖2-1中的步驟6、7;
4、 前端控制器再次收回控制權(quán),將響應(yīng)返回給用戶,圖2-1中的步驟8;至此整個結(jié)束。
二、Spring
2.1、IOC容器:
IOC容器就是具有依賴注入功能的容器,IOC容器負責(zé)實例化、定位、配置應(yīng)用程序中的對象及建立這些對象間的依賴。應(yīng)用程序無需直接在代碼中new相關(guān)的對象,應(yīng)用程序由IOC容器進行組裝。在Spring中BeanFactory是IOC容器的實際代表者。
2.2、AOP:
簡單地說,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護性。AOP代表的是一個橫向的關(guān)系
AOP用來封裝橫切關(guān)注點,具體可以在下面的場景中使用:
Authentication 權(quán)限?
Caching 緩存?
Context passing 內(nèi)容傳遞?
Error handling 錯誤處理?
Lazy loading 懶加載?
Debugging調(diào)試?
logging, tracing, profiling and monitoring 記錄跟蹤 優(yōu)化 校準?
Performance optimization 性能優(yōu)化?
Persistence持久化?
Resource pooling 資源池?
Synchronization 同步?
Transactions 事務(wù)
三、Mybatis
MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。
總體流程:
(1)加載配置并初始化?
觸發(fā)條件:加載配置文件?
將SQL的配置信息加載成為一個個MappedStatement對象(包括了傳入?yún)?shù)映射配置、執(zhí)行的SQL語句、結(jié)果映射配置),存儲在內(nèi)存中。
(2)接收調(diào)用請求?
觸發(fā)條件:調(diào)用Mybatis提供的API?
傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對象?
處理過程:將請求傳遞給下層的請求處理層進行處理。
(3)處理操作請求 觸發(fā)條件:API接口層傳遞請求過來?
傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對象
處理過程:
(A)根據(jù)SQL的ID查找對應(yīng)的MappedStatement對象。
(B)根據(jù)傳入?yún)?shù)對象解析MappedStatement對象,得到最終要執(zhí)行的SQL和執(zhí)行傳入?yún)?shù)。
(C)獲取數(shù)據(jù)庫連接,根據(jù)得到的最終SQL語句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫執(zhí)行,并得到執(zhí)行結(jié)果。
(D)根據(jù)MappedStatement對象中的結(jié)果映射配置對得到的執(zhí)行結(jié)果進行轉(zhuǎn)換處理,并得到最終的處理結(jié)果。
(E)釋放連接資源。
(4)返回處理結(jié)果將最終的處理結(jié)果返回。
MyBatis 最強大的特性之一就是它的動態(tài)語句功能。如果您以前有使用JDBC或者類似框架的經(jīng)歷,您就會明白把SQL語句條件連接在一起是多么的痛苦,要確保不能忘記空格或者不要在columns列后面省略一個逗號等。動態(tài)語句能夠完全解決掉這些痛苦。
四、Dubbo
Dubbo是一個分布式服務(wù)框架,致力于提供高性能和透明化的RPC(遠程過程調(diào)用協(xié)議)遠程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案。簡單的說,dubbo就是個服務(wù)框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務(wù)框架的需求,并且本質(zhì)上是個服務(wù)調(diào)用的東東,說白了就是個遠程服務(wù)調(diào)用的分布式框架。
1、透明化的遠程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠程方法,只需簡單配置,沒有任何API侵入。
2、軟負載均衡及容錯機制,可在內(nèi)網(wǎng)替代F5等硬件負載均衡器,降低成本,減少單點。
3、 服務(wù)自動注冊與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址,注冊中心基于接口名查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。
節(jié)點角色說明:?
Provider: 暴露服務(wù)的服務(wù)提供方。?
Consumer: 調(diào)用遠程服務(wù)的服務(wù)消費方。?
Registry: 服務(wù)注冊與發(fā)現(xiàn)的注冊中心。?
Monitor: 統(tǒng)計服務(wù)的調(diào)用次調(diào)和調(diào)用時間的監(jiān)控中心。?
Container: 服務(wù)運行容器。
五、Maven
Maven這個個項目管理和構(gòu)建自動化工具,越來越多的開發(fā)人員使用它來管理項目中的jar包。但是對于我們程序員來說,我們最關(guān)心的是它的項目構(gòu)建功能。
六、RabbitMQ
消息隊列一般是在項目中,將一些無需即時返回且耗時的操作提取出來,進行了異步處理,而這種異步處理的方式大大的節(jié)省了服務(wù)器的請求響應(yīng)時間,從而提高了系統(tǒng)的吞吐量。
RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務(wù)器。
Erlang是一門動態(tài)類型的函數(shù)式編程語言。對應(yīng)到Erlang里,每個Actor對應(yīng)著一個Erlang進程,進程之間通過消息傳遞進行通信。相比共享內(nèi)存,進程間通過消息傳遞來通信帶來的直接好處就是消除了直接的鎖開銷(不考慮Erlang虛擬機底層實現(xiàn)中的鎖應(yīng)用)。
AMQP(Advanced Message Queue Protocol)定義了一種消息系統(tǒng)規(guī)范。這個規(guī)范描述了在一個分布式的系統(tǒng)中各個子系統(tǒng)如何通過消息交互。
七、Log4j
日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。
八、Ehcache
EhCache 是一個純Java的進程內(nèi)緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。Ehcache是一種廣泛使用的開源Java分布式緩存。主要面向通用緩存,Java EE和輕量級容器。它具有內(nèi)存和磁盤存儲,緩存加載器,緩存擴展,緩存異常處理程序,一個gzip緩存servlet過濾器,支持REST和SOAP api等特點。
優(yōu)點:?
1、 快速?
2、 簡單?
3、 多種緩存策略?
4、緩存數(shù)據(jù)有兩級:內(nèi)存和磁盤,因此無需擔(dān)心容量問題?
5、 緩存數(shù)據(jù)會在虛擬機重啟的過程中寫入磁盤?
6、可以通過RMI、可插入API等方式進行分布式緩存?
7、 具有緩存和緩存管理器的偵聽接口?
8、支持多緩存管理器實例,以及一個實例的多個緩存區(qū)域?
9、提供Hibernate的緩存實現(xiàn)
缺點:?
1、使用磁盤Cache的時候非常占用磁盤空間:這是因為DiskCache的算法簡單,該算法簡單也導(dǎo)致Cache的效率非常高。它只是對元素直接追加存儲。因此搜索元素的時候非常的快。如果使用DiskCache的,在很頻繁的應(yīng)用中,很快磁盤會滿。
2、 不能保證數(shù)據(jù)的安全:當(dāng)突然kill掉java的時候,可能會產(chǎn)生沖突,EhCache的解決方法是如果文件沖突了,則重建cache。這對于Cache數(shù)據(jù)需要保存的時候可能不利。當(dāng)然,Cache只是簡單的加速,而不能保證數(shù)據(jù)的安全。如果想保證數(shù)據(jù)的存儲安全,可以使用Bekeley DB Java Edition版本。這是個嵌入式數(shù)據(jù)庫??梢源_保存儲安全和空間的利用率。
九、Redis
redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步。
Redis數(shù)據(jù)庫完全在內(nèi)存中,使用磁盤僅用于持久性。相比許多鍵值數(shù)據(jù)存儲,Redis擁有一套較為豐富的數(shù)據(jù)類型。Redis可以將數(shù)據(jù)復(fù)制到任意數(shù)量的從服務(wù)器。
1.2、Redis優(yōu)點:
(1)異??焖伲篟edis的速度非???,每秒能執(zhí)行約11萬集合,每秒約81000+條記錄。
(2)支持豐富的數(shù)據(jù)類型:Redis支持最大多數(shù)開發(fā)人員已經(jīng)知道像列表,集合,有序集合,散列數(shù)據(jù)類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以處理通過它的數(shù)據(jù)類型更好。
(3)操作都是原子性:所有Redis操作是原子的,這保證了如果兩個客戶端同時訪問的Redis服務(wù)器將獲得更新后的值。
(4)多功能實用工具:Redis是一個多實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發(fā)布/訂閱),任何短暫的數(shù)據(jù),應(yīng)用程序,如Web應(yīng)用程序會話,網(wǎng)頁命中計數(shù)等。
1.3、Redis缺點:?
(1)單線程?
(2)耗內(nèi)存
十、Shiro
Apache Shiro是Java的一個安全框架,旨在簡化身份驗證和授權(quán)。Shiro在JavaSE和JavaEE項目中都可以使用。它主要用來處理身份認證,授權(quán),企業(yè)會話管理和加密等。Shiro的具體功能點如下:
(1)身份認證/登錄,驗證用戶是不是擁有相應(yīng)的身份;
(2)授權(quán),即權(quán)限驗證,驗證某個已認證的用戶是否擁有某個權(quán)限;即判斷用戶是否能做事情,常見的如:驗證某個用戶是否擁有某個角色?;蛘呒毩6鹊尿炞C某個用戶對某個資源是否具有某個權(quán)限;
(3)會話管理,即用戶登錄后就是一次會話,在沒有退出之前,它的所有信息都在會話中;會話可以是普通JavaSE環(huán)境的,也可以是如Web環(huán)境的;
(4)加密,保護數(shù)據(jù)的安全性,如密碼加密存儲到數(shù)據(jù)庫,而不是明文存儲;
(5)Web支持,可以非常容易的集成到Web環(huán)境;?
Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色/權(quán)限不必每次去查,這樣可以提高效率;
(6)shiro支持多線程應(yīng)用的并發(fā)驗證,即如在一個線程中開啟另一個線程,能把權(quán)限自動傳播過去;
(7)提供測試支持;
(8)允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;
(9)記住我,這個是非常常見的功能,即一次登錄后,下次再來的話不用登錄了。
java基礎(chǔ),三大主流數(shù)據(jù)庫mysql,orcale,sql server;然后是j2ee的相關(guān)知識,也就是java開發(fā)框架。
Spring Framework 【Java 開源JEE框架】
Spring是一個解決了許多在J2EE開發(fā)中常見的問題的強大框架。
Spring提供了管理業(yè)務(wù)對象的一致方法并且鼓勵了注入對接口編程而不是對類編程的良好習(xí)慣。Spring的架構(gòu)基礎(chǔ)是基于使用JavaBean屬性的
Inversion of
Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構(gòu)建完關(guān)注所有架構(gòu)層的完整解決方案方面是獨一無二的。
Spring提供了唯一的數(shù)據(jù)訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率并且減少了可能的錯誤。Spring的數(shù)據(jù)訪問架構(gòu)還集成了
Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務(wù)管理抽象,它能夠在各種底層事務(wù)管理技術(shù),例如JTA或者
JDBC事務(wù)提供一個一致的編程模型。Spring提供了一個用標(biāo)準Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務(wù)管理和其他企業(yè)事務(wù)
--如果你需要--還能實現(xiàn)你自己的aspects。這個框架足夠強大,使得應(yīng)用程序能夠拋開EJB的復(fù)雜性,同時享受著和傳統(tǒng)EJB相關(guān)的關(guān)鍵服務(wù)。
Spring還提供了可以和IoC容器集成的強大而靈活的MVC Web框架。【SpringIDE:Eclipse平臺下一個輔助開發(fā)插件】.
WebWork 【Java開源Web開發(fā)框架】
WebWork是由OpenSymphony組織開發(fā)的,致力于組件化和代碼重用的拉出式MVC模式J2EE
Web框架。WebWork目前最新版本是2.1,現(xiàn)在的WebWork2.x前身是Rickard
Oberg開發(fā)的WebWork,但現(xiàn)在WebWork已經(jīng)被拆分成了Xwork1和WebWork2兩個項目。
Xwork簡潔、靈活功能強大,它是一個標(biāo)準的Command模式實現(xiàn),并且完全從web層脫離出來。
Xwork提供了很多核心功能:前端攔截機(interceptor),運行時表單屬性驗證,類型轉(zhuǎn)換,強大的表達式語言(OGNL – the
Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。
WebWork2建立在Xwork之上,處理HTTP的響應(yīng)和請求。WebWork2使用ServletDispatcher將HTTP請求的變成
Action(業(yè)務(wù)層Action類),
session(會話)application(應(yīng)用程序)范圍的映射,request請求參數(shù)映射。WebWork2支持多視圖表示,視圖部分可以使用
JSP, Velocity, FreeMarker,
JasperReports,XML等。在WebWork2.2中添加了對AJAX的支持,這支持是構(gòu)建在DWR與Dojo這兩個框架的基礎(chǔ)之上.
【EclipseWork:用于WebWork輔助開發(fā)的一個Eclipse插件】
Struts 【Java開源Web開發(fā)框架】
Struts是一個基于Sun
J2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)來實現(xiàn)的。由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡單易用,敏捷迅速,在過去的一年中頗受關(guān)注。Struts把Servlet、JSP、自定義標(biāo)簽和信息資源(message
resources)整合到一個統(tǒng)一的框架中,開發(fā)人員利用其進行開發(fā)時不用再自己編碼實現(xiàn)全套MVC模式,極大的節(jié)省了時間,所以說Struts是一個非常不錯的應(yīng)用框架?!維trutsIDE:用于Struts輔助開發(fā)的一個Eclipse插件】
Hibernate 【Java開源持久層框架】
Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。
Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序?qū)嵱?,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Eclipse平臺下的Hibernate輔助開發(fā)工具:【Hibernate
Synchronizer】【MiddlegenIDE】
Quartz 【Java開源調(diào)度框架】
Quartz是OpenSymphony開源組織在Job
scheduling領(lǐng)域又一個開源項目,它可以與J2EE與J2SE應(yīng)用程序相結(jié)合也可以單獨使用。Quartz可以用來創(chuàng)建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復(fù)雜的日程序表。Jobs可以做成標(biāo)準的Java組件或
EJBs。Quartz的最新版本為Quartz 1.5.0。
Velocity 【Java開源模板引擎】
Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template
language)來引用由java代碼定義的對象。當(dāng)Velocity應(yīng)用于web開發(fā)時,界面設(shè)計人員可以和java程序開發(fā)人員同步開發(fā)一個遵循MVC架構(gòu)的web站點,也就是說,頁面設(shè)計人員可以只關(guān)注頁面的顯示效果,而由java程序開發(fā)人員關(guān)注業(yè)務(wù)邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。
Velocity的能力遠不止web站點開發(fā)這個領(lǐng)域,例如,它可以從模板(template)產(chǎn)生SQL和PostScript、XML,它也可以被當(dāng)作一個獨立工具來產(chǎn)生源代碼和報告,或者作為其他系統(tǒng)的集成組件使用。Velocity也可以為Turbine
web開發(fā)架構(gòu)提供模板服務(wù)(template
service)。Velocity+Turbine提供一個模板服務(wù)的方式允許一個web應(yīng)用以一個真正的MVC模型進行開發(fā)?!綱eloEclipse
:Velocity在Eclipse平臺下的一個輔助開發(fā)插件】
IBATIS 【Java開源持久層框架】
使用ibatis 提供的ORM機制,對業(yè)務(wù)邏輯實現(xiàn)人員而言,面對的是純粹的Java對象, 這一層與通過Hibernate 實現(xiàn)ORM
而言基本一致,而對于具體的數(shù)據(jù)操作,Hibernate 會自動生成SQL 語句,而ibatis 則要求開發(fā)者編寫具體的SQL
語句。相對Hibernate等 “全自動”O(jiān)RM機制而言,ibatis
以SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上的讓步,為系統(tǒng)設(shè)計提供了更大的自由空間。作為“全自動”O(jiān)RM 實現(xiàn)的一種有益補充,ibatis 的出現(xiàn)顯
得別具意義。
Compiere ERPCRM 【Java開源ERP與CRM系統(tǒng)】
Compiere
ERPCRM為全球范圍內(nèi)的中小型企業(yè)提供綜合型解決方案,覆蓋從客戶管理、供應(yīng)鏈到財務(wù)管理的全部領(lǐng)域,支持多組織、多幣種、多會計模式、多成本計算、多語種、多稅制等國際化特性。易于安裝、易于實施、易于使用。只需要短短幾個小時,您就可以使用申購-采購-發(fā)票-付款、報價-訂單-發(fā)票-收款、產(chǎn)品與定價、資產(chǎn)管理、客戶關(guān)系、供應(yīng)商關(guān)系、員工關(guān)系、經(jīng)營業(yè)績分析等強大功能了。
Roller Weblogger 【Java開源Blog博客】
這個weblogging
設(shè)計得比較精巧,源代碼是很好的學(xué)習(xí)資料。它支持weblogging應(yīng)有的特性如:評論功能,所見即所得HTML編輯,TrackBack,提供頁面模板,RSS
syndication,blogroll管理和提供一個XML-RPC 接口。
Eclipse 【Java開源IDE】
Eclipse平臺是IBM向開發(fā)源碼社區(qū)捐贈的開發(fā)框架,它之所以出名并不是因為IBM宣稱投入開發(fā)的資金總數(shù)
—4千萬美元,而是因為如此巨大的投入所帶來的成果:一個成熟的、精心設(shè)計的以及可擴展的體系結(jié)構(gòu)。
XPlanner 【Java開源項目管理】
XPlanner 一個基于Web的XP團隊計劃和跟蹤工具。XP獨特的開發(fā)概念如iteration、user
stories等,XPlanner都提供了相對應(yīng)的的管理工具,XPlanner支持XP開發(fā)流程,并解決利用XP思想來開發(fā)項目所碰到的問題。
XPlanner特點包括:簡單的模型規(guī)劃,虛擬筆記卡(Virtual note cards),iterations、user
stories與工作記錄的追蹤,未完成stories將自動迭代,工作時間追蹤,生成團隊效率,個人工時報表,SOAP界面支持。
HSQLDB 【Java開源開源數(shù)據(jù)庫】
HSQLDB(Hypersonic SQL)是純Java開發(fā)的關(guān)系型數(shù)據(jù)庫,并提供JDBC驅(qū)動存取數(shù)據(jù)。支持ANSI-92 標(biāo)準
SQL語法。而且他占的空間很小。大約只有160K,擁有快速的數(shù)據(jù)庫引擎。
Liferay 【Java開源門戶系統(tǒng)】
代表了完整的J2EE應(yīng)用,使用了Web、EJB以及JMS等技術(shù),特別是其前臺界面部分使用Struts
框架技術(shù),基于XML的portlet配置文件可以自由地動態(tài)擴展,使用了Web Services來支持一些遠程信息的獲取,使用 Apahce
Lucene實現(xiàn)全文檢索功能。
主要特點:
提供單一登陸接口,多認證模式(LDAP或 SQL);
管理員能通過用戶界面輕松管理用戶,組,角色;
用戶能可以根據(jù)需要定制個性化的portal layout;
能夠在主流的J2EE應(yīng)用服務(wù)器上運行,如JBoss+Jetty/Tomcat,JOnAS;
支 持主流的數(shù)據(jù)庫,如PostgreSQL,MySQL;
使用了第三放的開源項目,如Hibernate, Lucene, Struts;
支持包括中文在內(nèi)的多種語言;
采用最先進的技術(shù) Java, EJB, JMS, SOAP, XML;
JetSpeed 【Java開源門戶系統(tǒng)】
Jetspeed是一個開放源代碼的企業(yè)信息門戶(EIP)的實現(xiàn), 使用的技術(shù)是Java和XML. 用戶可以使用瀏覽器,
支持WAP協(xié)議的手機或者其它的設(shè)備訪問Jetspeed架設(shè)的信息門戶獲取信息. Jetspeed扮演著信息集中器的角色,
它能夠把信息集中起來并且很容易地提供給用戶.
Jetspeed具有如下的特征:
即將成為標(biāo)準化的Java Portlet API
基于模板的布局, 包括JSP和Velocity
通過開放的內(nèi)容同步技術(shù)支持遠程XML 內(nèi)容交換
定制默認的主頁
使用數(shù)據(jù)庫進行用戶認證
內(nèi)存緩存技術(shù), 加快頁面的響應(yīng)
通 過Rich Site Summary技術(shù), 支持同步內(nèi)容
和Cocoon, WebMacro, Velocity集成.
Wireless Markup Language (WML) 支持
使用XML格式的配置文件注冊portlet.
完整的 Web Application Archive (WAR) 支持
Web應(yīng)用程序開發(fā)的基礎(chǔ)設(shè)施
可以在本地緩 存遠程內(nèi)容
與Avantgo同步
可移植到所有支持JDK1.2和Servlet 2.2的平臺
與 Turbine模塊和服務(wù)集成
可以根據(jù)用戶, 安裝媒體類型和語言的不同設(shè)定, 產(chǎn)生不同的個性化服務(wù)
持續(xù)化服 務(wù)使得所由的portlet能夠容易的存儲每個用戶的狀態(tài), 頁面和portlet
使用皮膚技術(shù)使得用戶可以選擇portlet的顏 色和顯示屬性
自定義功能是的管理員可以選擇portlet以及定義個人頁面的布局
在數(shù)據(jù)庫中存儲PSML
通 過Jetspeed的安全portlets管理用戶, 組,角色和權(quán)限
基于角色對訪問portlet進行控制
JOnAS 【Java開源應(yīng)用服務(wù)器】
JOnAS是一個開放源代碼的J2EE實現(xiàn),在ObjectWeb協(xié)會中開發(fā)。整合了Tomcat或Jetty成為它的Web容器,以確保符合Servlet
2.3和JSP 1.2規(guī)范。JOnAS服務(wù)器依賴或?qū)崿F(xiàn)以下的Java API:JCA、JDBC、JTA
、JMS、JMX、JNDI、JAAS、JavaMail 。
JFox3.0 【Java開源應(yīng)用服務(wù)器】
JFox 是 Open Source Java EE Application Server,致力于提供輕量級的Java
EE應(yīng)用服務(wù)器,從3.0開始,JFox提供了一個支持模塊化的MVC框架,以簡化EJB以及Web應(yīng)用的開發(fā)!
如果您正在尋找一個簡單、輕量、高效、完善的Java EE開發(fā)平臺,那么JFox正是您需要的。
JFox 3.0 擁有以下特性:
重 新設(shè)計的 IoC 微內(nèi)核,融入 OSGi 模塊化思想
設(shè)計成嵌入式架構(gòu),能夠和任何 Java Web Server集成部署
支 持 EJB3,JPA規(guī)范,支持容器內(nèi)和容器外兩種方式運行EJB和JPA組件
支持 EJB 發(fā)布成Web Service
采 用 JOTM()提供事務(wù)處理,支持兩階段提交 (2PC)
采用 XAPool() 提供 XA
DataSource,支持智能連接池管理
內(nèi)置 MVC 框架,實現(xiàn)自動Form
Mapping,Validator,Uploading等功能,支持JSP/Velocity/Freemarker頁面引擎,并支持直接在
Action中注入EJB
支持多應(yīng)用模塊部署,讓中大型應(yīng)用充分享受模塊化開發(fā)帶來的優(yōu)勢
提供 Manager 管理模塊,可以查看和管理各種運行時參數(shù)
提供根據(jù) JFox 特色重寫的 Petstore 應(yīng)用模塊
EasyJWeb 【Java開源Web開發(fā)框架】
EasyJWeb是基于java技術(shù),應(yīng)用于WEB應(yīng)用程序快速開發(fā)的MVC框架,框架設(shè)計構(gòu)思來源于國內(nèi)眾多項目實踐,框架充分借簽了當(dāng)前主要流行的開源Web框架(Struts、JSF、Tapestry
、Webwork),吸取了其優(yōu)點及精華,利用Velocity作為模板頁面引擎,是一個實現(xiàn)了頁面及代碼完全分離的MVC開發(fā)框架。是一個能實現(xiàn)中小型
Web應(yīng)用系統(tǒng)快速開發(fā)的簡易Web框架。
通過EasyJWeb
Tools提供的配套開發(fā)工具,可以實現(xiàn)基于EasyJWeb框架的Web應(yīng)用快速開發(fā),包括常用應(yīng)用軟件的代碼自生成、數(shù)據(jù)庫添刪改查(CRUD)代碼生成、自動頁面模版生成、配置文件管理等。
框架特點:
零配文件置支持。以前我們每接觸一個框架,開始總都要被
他的配置文件折騰一番。EasyJWeb實現(xiàn)零配置支持,可以不寫一句配置文件就在框架基礎(chǔ)上構(gòu)建你的運用。(適合小型網(wǎng)站系統(tǒng))。
簡 易的模板頁面設(shè)計支持:放棄使用jsp,使用簡單Velocity腳本語言作為頁面模板。
頁面程序完全分離:實現(xiàn)顯示頁面與程序邏輯 的完全分離,克服了傳統(tǒng)jsp頁面難于維護的問題。
基于頁面組件的框架。靈活的頁面組件配置,可以直接通過配置文件設(shè)置字段級的事件 組件。
快速開發(fā)支持:通過EasyJWeb
Tools,可以自動生成應(yīng)用軟件模板代碼,定制并管理自己的J2EE代碼模板,代碼生成模板支持最流行的實用Java開發(fā)框架(如hibernate、
Spring等)實現(xiàn)快速開發(fā)。
Tapestry 【Java開源Web開發(fā)框架】
Tapestry是一個開源的基于servlet的應(yīng)用程序框架,它使用組件對象模型來創(chuàng)建動態(tài)的,交互的web應(yīng)用。一個組件就是任意一個帶有
jwcid屬性的html標(biāo)記。其中jwc的意思是Java Web
Component。Tapestry使得java代碼與html完全分離,利用這個框架開發(fā)大型應(yīng)用變得輕而易舉。并且開發(fā)的應(yīng)用很容易維護和升級。
Tapestry支持本地化,其錯誤報告也很詳細。Tapestry主要利用javabean和xml技術(shù)進行開發(fā)?!維pindle:Tapestry
輔助開發(fā)Eclipse插件】.
FreeMarker 【Java開源模板引擎】
FreeMarker允許Java
servlet保持圖形設(shè)計同應(yīng)用程序邏輯的分離,這是通過在模板中密封HTML完成的。模板用servlet提供的數(shù)據(jù)動態(tài)地生成
HTML。模板語言是強大的直觀的,編譯器速度快,輸出接近靜態(tài)HTML頁面的速度。
【FreeMarker Eclipse Plugin與FreeMarker IDE:Eclipse平臺下的輔助開發(fā)工具】
Lucene 【Java開源搜索引擎】
Apache
Lucene是一個基于Java全文搜索引擎,利用它可以輕易地為Java軟件加入全文搜尋功能。Lucene的最主要工作是替文件的每一個字作索引,索引讓搜尋的效率比傳統(tǒng)的逐字比較大大提高,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的是使使用者可以隨時應(yīng)自已需要自訂其功能。
iText 【Java開源PDF類庫】
iText是一個能夠快速產(chǎn)生PDF文件的java類庫。iText的java類對于那些要產(chǎn)生包含文本,表格,圖形的只讀文檔是很有用的。它的類庫尤其與java
Servlet有很好的給合。使用iText與PDF能夠使你正確的控制Servlet的輸出。
Groovy 【Java開源動態(tài)語言】
Groovy是一種基于JVM的敏捷開發(fā)語言,它結(jié)合了Python、Ruby和 Smalltalk的許多強大的特性。
Groovy已在WebWork2中的應(yīng)用。它可以被編譯為標(biāo)準的Java Bytecode。
OpenCms 【Java開源CMS系統(tǒng)】
OpenCms是一個J2EE的產(chǎn)品,它是用 Java寫成的。它和Tomcat捆綁在一起。但是也能夠使用ATG
Dynamo、WebLogic和WebSphere。OpenCms支持多種RDBMS來保存內(nèi)容,包括Oracle、SQL
Server、Sybase和mySQL。新版本提供了一個新的模板引擎,JSP支持,一種新的連接管理系統(tǒng),提高了穩(wěn)定性。
JUnit 【Java開源測試工具】
JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing
framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。
BlueJ 【Java開源IDE】
BlueJ是一個專門為入門級教學(xué)設(shè)計的JavaTM 開發(fā)環(huán)境。它是由澳大利亞墨爾本Monash大學(xué)BlueJ小組設(shè)計并開發(fā)的。
XWiki 【Java開源Wiki系統(tǒng)】
XWiki是一個強大的Java開源的Wiki引擎。它支持一些受歡迎的特性如:
內(nèi) 容管理(瀏覽/編輯/預(yù)覽/保存),
支持附件,
版本控制,
全文本搜索,
權(quán) 限管理
使用Hibernate進行數(shù)據(jù)存儲,
RSS輸出與顯示外部的RSS feeds,
多 語言支持,
提供XML/RPC的API,
WYSIWYG HTML編輯器,
導(dǎo)出為PDF
Groovy 腳本支持等等....。
EJBCA 【Java開源網(wǎng)絡(luò)服務(wù)器端組件】
EJBCA是一個全功能的CA系統(tǒng)軟件,它基于J2EE技術(shù),并提供了一個強大的、高性能并基于組件的CA。EJBCA兼具靈活性和平臺獨立性,能夠獨立使用,也能和任何J2EE應(yīng)用程序集成。
JXTA 【Java開源其它項目】
Sun微系統(tǒng)公司公開了旨在建立P2P(Peer to
Peer)通用技術(shù)基礎(chǔ)的JXTA計劃。JXTA技術(shù)是網(wǎng)絡(luò)編程和計算的平臺,用以解決現(xiàn)代分布計算尤其是點對點(P2P)計算中出現(xiàn)的問題。
JXTA將建立核心的網(wǎng)絡(luò)計算技術(shù),提供支持在任何平臺、任何地方以及任何時間實現(xiàn)P2P計算的一整套簡單、小巧和靈活的機制。JXTA首先將歸納目前
P2P的功能特別,而后建立核心的技術(shù)來表達目前的P2P計算的局限性。其重點是創(chuàng)建基本的機制,而具體的策略選擇權(quán)則交給應(yīng)用的開發(fā)者。JXTA將充分利用XML、Java等開放技術(shù),使得UNIX操作系統(tǒng)更強大和靈活,比如利用管道(Pipes)傳輸Shell命令實現(xiàn)復(fù)雜的計算任務(wù)。JXTA支持
P2P應(yīng)用的基本功能來建立一個P2P系統(tǒng),還將努力證實這些可以成為建立更高層功能的基礎(chǔ)構(gòu)造模塊。JXTA架構(gòu)可以分為三個層面:JXTA核心層、
JXTA業(yè)務(wù)層和JXTA應(yīng)用層。
DWR 【Java開源AJAX框架】
DWR(Direct Web
Remoting)是一個WEB遠程調(diào)用框架.利用這個框架可以讓AJAX開發(fā)變得很簡單.利用DWR可以在客戶端利用JavaScript直接調(diào)用服務(wù)端的Java方法并返回值給JavaScript就好像直接本地客戶端調(diào)用一樣(DWR根據(jù)Java類來動態(tài)生成JavaScrip代碼).它的最新版本
DWR0.6添加許多特性如:支持Dom Trees的自動配置,支持Spring(JavaScript遠程調(diào)用spring
bean),更好瀏覽器支持,還支持一個可選的commons-logging日記操作.
ZK 【Java開源AJAX框架】
ZK是一個Ajax Java Web框架,利用少量代碼就能夠開發(fā)出擁有Rich
UI的Web應(yīng)用。ZK提供基于XUL的標(biāo)記語言和事件驅(qū)動的組件,可以讓你像開發(fā)桌面應(yīng)用程序一樣簡單。支持EL表達式和腳本語言包括:JavaScript、Ruby和Groovy等。支持Annotation及數(shù)據(jù)綁定。集成Google
Maps、FCKeditor、DOJO以及Timeline。
java框架實在是太多了,網(wǎng)上一抄一大段,根本就了解不到什么。我還是以我的經(jīng)驗來說一下j2ee的框架。
1.首先力推struts2框架,這是最經(jīng)典的框架(可以說沒有“之一”)??梢詭湍憧焖俅罱ǔ鲆粋€MVC模型出來。(注:struts1已經(jīng)很少用了,且問題也很多,強烈推薦使用struts2).
2.Spring框架,這是排行第二的框架(我個人排得,非權(quán)威),這個框架出彩的地方就在于它的“依賴注入”和“控制反轉(zhuǎn)”。簡單的說,就是在程序運行的時候才將參數(shù)注入到容器里。
3.持久層框架選Hibernate和Ibatis。 Hibernate自動化能力強,開發(fā)大型應(yīng)用可以節(jié)約開發(fā)時間,ibatis小巧簡潔,靈活。
4.Jquery是繼prototype之后又一個優(yōu)秀的Javacript框架,封裝了很多javascript方法,是開發(fā)jsp用的框架,目前很流行
一般開發(fā),都是使用Struts2+Spring+Hibernate(ibatis)整合,前端用jquery或者其他類似框架。對于簡單的系統(tǒng),有時用Spring MVC一個框架即可。
做個 namespace 和 SQL id 的約定,按照約定寫就自動執(zhí)行對應(yīng)的 mapper 下的 SQL ;
自己添加字段默認映射規(guī)則,比如默認支持駝峰與下劃線的自動轉(zhuǎn)換,特殊規(guī)則的才需要定義;
對簡單的 insert one 或 select by id 這些添加形如 ORM 工具那般的功能,不需要額外寫 SQL 。
在 XML 寫 SQL 比較清晰 /清爽。
java常用開源框架如下:\x0d\x0a1.Spring Framework 【Java開源JEE框架】\x0d\x0a\x0d\x0aSpring是一個解決了許多在J2EE開發(fā)中常見的問題的強大框架。 Spring提供了管理業(yè)務(wù)對象的一致方法并且鼓勵了注入對接口編程而不是對類編程的良好習(xí)慣。Spring的架構(gòu)基礎(chǔ)是基于使用JavaBean屬性的Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構(gòu)建完關(guān)注所有架構(gòu)層的完整解決方案方面是獨一無二的。 \x0d\x0a\x0d\x0a2.WebWork 【Java開源Web開發(fā)框架】\x0d\x0a\x0d\x0aWebWork是由OpenSymphony組織開發(fā)的,致力于組件化和代碼重用的拉出式MVC模式J2EE Web框架。\x0d\x0a\x0d\x0a3.Struts 【Java開源Web開發(fā)框架】\x0d\x0a\x0d\x0aStruts是一個基于Sun J2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)來實現(xiàn)的。由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡單易用,敏捷迅速,在過去的一年中頗受關(guān)注。Struts把Servlet、JSP、自定義標(biāo)簽和信息資源(message resources)整合到一個統(tǒng)一的框架中\(zhòng)x0d\x0a\x0d\x0a4.Hibernate 【Java開源持久層框架】\x0d\x0a\x0d\x0aHibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合\x0d\x0a\x0d\x0a5.Quartz 【Java開源調(diào)度框架】\x0d\x0a\x0d\x0aQuartz是OpenSymphony開源組織在Job scheduling領(lǐng)域又一個開源項目,它可以與J2EE與J2SE應(yīng)用程序相結(jié)合也可以單獨使用。Quartz可以用來創(chuàng)建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復(fù)雜的日程序表。\x0d\x0a\x0d\x0a6.Velocity 【Java開源模板引擎】\x0d\x0a\x0d\x0aVelocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。 當(dāng)Velocity應(yīng)用于web開發(fā)時,界面設(shè)計人員可以和java程序開發(fā)人員同步開發(fā)一個遵循MVC架構(gòu)的web站點,也就是說,頁面設(shè)計人員可以只關(guān)注頁面的顯示效果,而由java程序開發(fā)人員關(guān)注業(yè)務(wù)邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。 \x0d\x0a\x0d\x0a7.IBATIS 【Java開源持久層框架】\x0d\x0a\x0d\x0a使用ibatis 提供的ORM機制,對業(yè)務(wù)邏輯實現(xiàn)人員而言,面對的是純粹的Java對象, 這一層與通過Hibernate 實現(xiàn)ORM 而言基本一致,而對于具體的數(shù)據(jù)操作,Hibernate 會自動生成SQL 語句,而ibatis 則要求開發(fā)者編寫具體的SQL 語句。相對Hibernate等 “全自動”O(jiān)RM機制而言,ibatis 以SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上的讓步,為系統(tǒng) 設(shè)計提供了更大的自由空間。作為“全自動”O(jiān)RM 實現(xiàn)的一種有益補充,ibatis 的出現(xiàn)顯 得別具意義。
網(wǎng)頁名稱:java持久層框架的代碼 java 持久化框架
轉(zhuǎn)載源于:http://aaarwkj.com/article30/dooosso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信小程序、、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)