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

作者:小寶鴿
原文:http://t.cn/RGdV5mJ

一、SpringMVC

Spring Web MVC是一種基于Java的實現(xiàn)了Web MVC設計模式的請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將web層進行職責解耦,基于請求驅(qū)動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發(fā),Spring Web MVC也是要簡化我們?nèi)粘eb開發(fā)的。

  • 模型(Model )封裝了應用程序的數(shù)據(jù)和一般他們會組成的POJO。
  • 視圖(View)是負責呈現(xiàn)模型數(shù)據(jù)和一般它生成的HTML輸出,客戶端的瀏覽器能夠解釋。
  • 控制器(Controller )負責處理用戶的請求,并建立適當?shù)哪P?,并把它傳遞給視圖渲染。

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

Spring Web MVC處理請求的流程

具體執(zhí)行步驟如下:

  1. 首先用戶發(fā)送請求————>前端控制器,前端控制器根據(jù)請求信息(如URL)來決定選擇哪一個頁面控制器進行處理并把請求委托給它,即以前的控制器的控制邏輯部分;圖2-1中的1、2步驟;
  2. 頁面控制器接收到請求后,進行功能處理,首先需要收集和綁定請求參數(shù)到一個對象,這個對象在Spring Web MVC中叫命令對象,并進行驗證,然后將命令對象委托給業(yè)務對象進行處理;處理完畢后返回一個ModelAndView(模型數(shù)據(jù)和邏輯視圖名);圖2-1中的3、4、5步驟;
  3. 前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名,選擇相應的視圖進行渲染,并把模型數(shù)據(jù)傳入以便視圖渲染;圖2-1中的步驟6、7;
  4. 前端控制器再次收回控制權(quán),將響應返回給用戶,圖2-1中的步驟8;至此整個結(jié)束。

二、Spring

2.1、IOC容器

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

2.2、AOP

簡單地說,就是將那些與業(yè)務無關,卻為業(yè)務模塊所共同調(diào)用的邏輯或責任封裝起來,便于減少系統(tǒng)的重復代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護性。AOP代表的是一個橫向的關系。

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

  • 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 事務

三、Mybatis

MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(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查找對應的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是一個分布式服務框架,致力于提供高性能和透明化的RPC(遠程過程調(diào)用協(xié)議)遠程服務調(diào)用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,并且本質(zhì)上是個服務調(diào)用的東東,說白了就是個遠程服務調(diào)用的分布式框架。

1、透明化的遠程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠程方法,只需簡單配置,沒有任何API侵入。

2、軟負載均衡及容錯機制,可在內(nèi)網(wǎng)替代F5等硬件負載均衡器,降低成本,減少單點。

3、 服務自動注冊與發(fā)現(xiàn),不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務提供者。

節(jié)點角色說明:

  • Provider: 暴露服務的服務提供方。
  • Consumer: 調(diào)用遠程服務的服務消費方。
  • Registry: 服務注冊與發(fā)現(xiàn)的注冊中心。
  • Monitor: 統(tǒng)計服務的調(diào)用次調(diào)和調(diào)用時間的監(jiān)控中心。
  • Container: 服務運行容器。

五、Maven

Maven這個個項目管理和構(gòu)建自動化工具,越來越多的開發(fā)人員使用它來管理項目中的jar包。但是對于我們程序員來說,我們最關心的是它的項目構(gòu)建功能。

六、RabbitMQ

消息隊列一般是在項目中,將一些無需即時返回且耗時的操作提取出來,進行了異步處理,而這種異步處理的方式大大的節(jié)省了服務器的請求響應時間,從而提高了系統(tǒng)的吞吐量。

RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務器。

Erlang是一門動態(tài)類型的函數(shù)式編程語言。對應到Erlang里,每個Actor對應著一個Erlang進程,進程之間通過消息傳遞進行通信。相比共享內(nèi)存,進程間通過消息傳遞來通信帶來的直接好處就是消除了直接的鎖開銷(不考慮Erlang虛擬機底層實現(xiàn)中的鎖應用)。

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)存和磁盤,因此無需擔心容量問題
5、 緩存數(shù)據(jù)會在虛擬機重啟的過程中寫入磁盤
6、可以通過RMI、可插入API等方式進行分布式緩存
7、 具有緩存和緩存管理器的偵聽接口
8、支持多緩存管理器實例,以及一個實例的多個緩存區(qū)域
9、提供Hibernate的緩存實現(xiàn)

缺點:

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

2、不能保證數(shù)據(jù)的安全。當突然kill掉java的時候,可能會產(chǎn)生沖突,EhCache的解決方法是如果文件沖突了,則重建cache。這對于Cache數(shù)據(jù)需要保存的時候可能不利。當然,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及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現(xiàn)了master-slave(主從)同步。

Redis數(shù)據(jù)庫完全在內(nèi)存中,使用磁盤僅用于持久性。相比許多鍵值數(shù)據(jù)存儲,Redis擁有一套較為豐富的數(shù)據(jù)類型。Redis可以將數(shù)據(jù)復制到任意數(shù)量的從服務器。

1.2、Redis優(yōu)點:

(1)異常快速:Redis的速度非???,每秒能執(zhí)行約11萬集合,每秒約81000+條記錄。
(2)支持豐富的數(shù)據(jù)類型:Redis支持最大多數(shù)開發(fā)人員已經(jīng)知道像列表,集合,有序集合,散列數(shù)據(jù)類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以處理通過它的數(shù)據(jù)類型更好。
(3)操作都是原子性:所有Redis操作是原子的,這保證了如果兩個客戶端同時訪問的Redis服務器將獲得更新后的值。
(4)多功能實用工具:Redis是一個多實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發(fā)布/訂閱),任何短暫的數(shù)據(jù),應用程序,如Web應用程序會話,網(wǎng)頁命中計數(shù)等。

1.3、Redis缺點: (1)單線程 (2)耗內(nèi)存

十、Shiro

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

(1)身份認證/登錄,驗證用戶是不是擁有相應的身份;
(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支持多線程應用的并發(fā)驗證,即如在一個線程中開啟另一個線程,能把權(quán)限自動傳播過去;
(7)提供測試支持;
(8)允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;
(9)記住我,這個是非常常見的功能,即一次登錄后,下次再來的話不用登錄了。

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

十一、設計模式

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

思想:

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

針對接口編程,真對接口編程,依賴于抽象而不依賴于具體。

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

一個實體應當盡量少的與其他實體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨立。

使用多個隔離的接口,比使用單個接口要好。

里氏代換原則:

(1)子類的能力必須大于等于父類,即父類可以使用的方法,子類都可以使用。
(2)返回值也是同樣的道理。假設一個父類方法返回一個List,子類返回一個ArrayList,這當然可以。如果父類方法返回一個ArrayList,子類返回一個List,就說不通了。這里子類返回值的能力是比父類小的。
(3)還有拋出異常的情況。任何子類方法可以聲明拋出父類方法聲明異常的子類。 而不能聲明拋出父類沒有聲明的異常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 來源: 小寶鴿 - CSDN博客 一、SpringMVC Spring Web MVC是一種基于Java的實現(xiàn)了W...
    言射手閱讀 401評論 1 15
  • 作者:小寶鴿原文:http://t.cn/RGdV5mJ 一、SpringMVC Spring Web MVC是一...
    51CTO學院閱讀 1,474評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,535評論 19 139
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,787評論 11 349
  • 我們總喜歡和別人比較,為了顯得自己比較上進,我們比較的對象要比我們優(yōu)秀很多。結(jié)果呢,我們發(fā)現(xiàn)自己的那點小成就根本不...
    躺平專家閱讀 672評論 0 2

友情鏈接更多精彩內(nèi)容