1. 程式人生 > >Java Web前端到後臺常用框架介紹

Java Web前端到後臺常用框架介紹

一,SpringMVC

Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動型別的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,Spring Web MVC也是要簡化我們日常Web開發的。

模型(Model )封裝了應用程式的資料和一般他們會組成的POJO。

檢視(View)是負責呈現模型資料和一般它生成的HTML輸出,客戶端的瀏覽器能夠解釋。

控制器(Controller )負責處理使用者的請求,並建立適當的模型,並把它傳遞給檢視渲染。

Spring的web模型 – 檢視 – 控制器(MVC)框架是圍繞著處理所有的HTTP請求和響應的DispatcherServlet的設計。

Spring Web MVC處理請求的流程

這裡寫圖片描述

具體執行步驟如下:

1、 首先使用者傳送請求————>前端控制器,前端控制器根據請求資訊(如URL)來決定選擇哪一個頁面控制器進行處理並把請求委託給它,即以前的控制器的控制邏輯部分;圖2-1中的1、2步驟;

2、 頁面控制器接收到請求後,進行功能處理,首先需要收集和繫結請求引數到一個物件,這個物件在Spring Web MVC中叫命令物件,並進行驗證,然後將命令物件委託給業務物件進行處理;處理完畢後返回一個ModelAndView(模型資料和邏輯檢視名);圖2-1中的3、4、5步驟;

3、 前端控制器收回控制權,然後根據返回的邏輯檢視名,選擇相應的檢視進行渲染,並把模型資料傳入以便檢視渲染;圖2-1中的步驟6、7;

4、 前端控制器再次收回控制權,將響應返回給使用者,圖2-1中的步驟8;至此整個結束。

二、Spring

IOC容器就是具有依賴注入功能的容器,IOC容器負責例項化、定位、配置應用程式中的物件及建立這些物件間的依賴。應用程式無需直接在程式碼中new相關的物件,應用程式由IOC容器進行組裝。在Spring中BeanFactory是IOC容器的實際代表者。

簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。AOP代表的是一個橫向的關係

AOP用來封裝橫切關注點,具體可以在下面的場景中使用:

Authentication 許可權
Caching 快取
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 懶載入
Debugging  除錯
logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
Performance optimization 效能優化
Persistence  持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務

三、Mybatis

MyBatis 是支援普通 SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始對映,將介面和 Java 的POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

總體流程:

(1)載入配置並初始化
觸發條件:載入配置檔案
將SQL的配置資訊載入成為一個個MappedStatement物件(包括了傳入引數對映配置、執行的SQL語句、結果對映配置),儲存在記憶體中。

(2)接收呼叫請求
觸發條件:呼叫Mybatis提供的API
傳入引數:為SQL的ID和傳入引數物件
處理過程:將請求傳遞給下層的請求處理層進行處理。

(3)處理操作請求 觸發條件:API介面層傳遞請求過來
傳入引數:為SQL的ID和傳入引數物件

處理過程:

(A)根據SQL的ID查詢對應的MappedStatement物件。

(B)根據傳入引數物件解析MappedStatement物件,得到最終要執行的SQL和執行傳入引數。

(C)獲取資料庫連線,根據得到的最終SQL語句和執行傳入引數到資料庫執行,並得到執行結果。

(D)根據MappedStatement物件中的結果對映配置對得到的執行結果進行轉換處理,並得到最終的處理結果。

(E)釋放連線資源。

(4)返回處理結果將最終的處理結果返回。

MyBatis 最強大的特性之一就是它的動態語句功能。如果您以前有使用JDBC或者類似框架的經歷,您就會明白把SQL語句條件連線在一起是多麼的痛苦,要確保不能忘記空格或者不要在columns列後面省略一個逗號等。動態語句能夠完全解決掉這些痛苦。

四、Dubbo

Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC(遠端過程呼叫協議)遠端服務呼叫方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這樣的分散式服務框架的需求,並且本質上是個服務呼叫的東東,說白了就是個遠端服務呼叫的分散式框架。

1、透明化的遠端方法呼叫,就像呼叫本地方法一樣呼叫遠端方法,只需簡單配置,沒有任何API侵入。

2、軟負載均衡及容錯機制,可在內網替代F5等硬體負載均衡器,降低成本,減少單點。

3、 服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於介面名查詢服務提供者的IP地址,並且能夠平滑新增或刪除服務提供者。

節點角色說明:
Provider: 暴露服務的服務提供方。
Consumer: 呼叫遠端服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。
Container: 服務執行容器。

五、Maven

Maven這個個專案管理和構建自動化工具,越來越多的開發人員使用它來管理專案中的jar包。但是對於我們程式設計師來說,我們最關心的是它的專案構建功能。

六、RabbitMQ

訊息佇列一般是在專案中,將一些無需即時返回且耗時的操作提取出來,進行了非同步處理,而這種非同步處理的方式大大的節省了伺服器的請求響應時間,從而提高了系統的吞吐量。

RabbitMQ是用Erlang實現的一個高併發高可靠AMQP訊息佇列伺服器。

Erlang是一門動態型別的函數語言程式設計語言。對應到Erlang裡,每個Actor對應著一個Erlang程序,程序之間通過訊息傳遞進行通訊。相比共享記憶體,程序間通過訊息傳遞來通訊帶來的直接好處就是消除了直接的鎖開銷(不考慮Erlang虛擬機器底層實現中的鎖應用)。

AMQP(Advanced Message Queue Protocol)定義了一種訊息系統規範。這個規範描述了在一個分散式的系統中各個子系統如何通過訊息互動。

七、Log4j

日誌記錄的優先順序,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。

八、Ehcache

EhCache 是一個純Java的程序內快取框架,具有快速、精幹等特點,是Hibernate中預設的CacheProvider。Ehcache是一種廣泛使用的開源Java分散式快取。主要面向通用快取,Java EE和輕量級容器。它具有記憶體和磁碟儲存,快取載入器,快取擴充套件,快取異常處理程式,一個gzip快取servlet過濾器,支援REST和SOAP api等特點。

優點:
1、 快速
2、 簡單
3、 多種快取策略
4、快取資料有兩級:記憶體和磁碟,因此無需擔心容量問題
5、 快取資料會在虛擬機器重啟的過程中寫入磁碟
6、可以通過RMI、可插入API等方式進行分散式快取
7、 具有快取和快取管理器的偵聽介面
8、支援多快取管理器例項,以及一個例項的多個快取區域
9、提供Hibernate的快取實現

缺點:
1、使用磁碟Cache的時候非常佔用磁碟空間:這是因為DiskCache的演算法簡單,該演算法簡單也導致Cache的效率非常高。它只是對元素直接追加儲存。因此搜尋元素的時候非常的快。如果使用DiskCache的,在很頻繁的應用中,很快磁碟會滿。

2、 不能保證資料的安全:當突然kill掉java的時候,可能會產生衝突,EhCache的解決方法是如果檔案衝突了,則重建cache。這對於Cache資料需要儲存的時候可能不利。當然,Cache只是簡單的加速,而不能保證資料的安全。如果想保證資料的儲存安全,可以使用Bekeley DB Java Edition版本。這是個嵌入式資料庫。可以確保儲存安全和空間的利用率。

九、Redis

redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set –有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。

Redis資料庫完全在記憶體中,使用磁碟僅用於永續性。相比許多鍵值資料儲存,Redis擁有一套較為豐富的資料型別。Redis可以將資料複製到任意數量的從伺服器。

1.2、Redis優點:

(1)異常快速:Redis的速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄。

(2)支援豐富的資料型別:Redis支援最大多數開發人員已經知道像列表,集合,有序集合,雜湊資料型別。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以處理通過它的資料型別更好。

(3)操作都是原子性:所有Redis操作是原子的,這保證瞭如果兩個客戶端同時訪問的Redis伺服器將獲得更新後的值。

(4)多功能實用工具:Redis是一個多實用的工具,可以在多個用例如快取,訊息,佇列使用(Redis原生支援釋出/訂閱),任何短暫的資料,應用程式,如Web應用程式會話,網頁命中計數等。

1.3、Redis缺點:
(1)單執行緒
(2)耗記憶體

十、Shiro

Apache Shiro是Java的一個安全框架,旨在簡化身份驗證和授權。Shiro在JavaSE和JavaEE專案中都可以使用。它主要用來處理身份認證,授權,企業會話管理和加密等。Shiro的具體功能點如下:

(1)身份認證/登入,驗證使用者是不是擁有相應的身份;

(2)授權,即許可權驗證,驗證某個已認證的使用者是否擁有某個許可權;即判斷使用者是否能做事情,常見的如:驗證某個使用者是否擁有某個角色。或者細粒度的驗證某個使用者對某個資源是否具有某個許可權;

(3)會話管理,即使用者登入後就是一次會話,在沒有退出之前,它的所有資訊都在會話中;會話可以是普通JavaSE環境的,也可以是如Web環境的;

(4)加密,保護資料的安全性,如密碼加密儲存到資料庫,而不是明文儲存;

(5)Web支援,可以非常容易的整合到Web環境;
Caching:快取,比如使用者登入後,其使用者資訊、擁有的角色/許可權不必每次去查,這樣可以提高效率;

(6)shiro支援多執行緒應用的併發驗證,即如在一個執行緒中開啟另一個執行緒,能把許可權自動傳播過去;

(7)提供測試支援;

(8)允許一個使用者假裝為另一個使用者(如果他們允許)的身份進行訪問;

(9)記住我,這個是非常常見的功能,即一次登入後,下次再來的話不用登入了。

文字描述可能並不能讓猿友們完全理解具體功能的意思。下面我們以登入驗證為例,向猿友們介紹Shiro的使用。至於其他功能點,猿友們用到的時候再去深究其用法也不遲。

十一、設計模式

這個算不上框架,可自行忽略,不過博主認為設計模式的思想很有必要了解一下。

思想:

開閉原則:開閉原則就是說對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的程式碼。

針對介面程式設計,真對介面程式設計,依賴於抽象而不依賴於具體。

儘量使用合成/聚合的方式,而不是使用繼承。

一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模組相對獨立。

使用多個隔離的介面,比使用單個介面要好。

里氏代換原則:(1)子類的能力必須大於等於父類,即父類可以使用的方法,子類都可以使用。(2)返回值也是同樣的道理。假設一個父類方法返回一個List,子類返回一個ArrayList,這當然可以。如果父類方法返回一個ArrayList,子類返回一個List,就說不通了。這裡子類返回值的能力是比父類小的。(3)還有丟擲異常的情況。任何子類方法可以宣告丟擲父類方法宣告異常的子類。
而不能宣告丟擲父類沒有宣告的異常。