當下流行的兩種企業(yè)開發(fā)MVC開源框架桑孩,是我們Java程序猿必備知識能力拜鹤。MVC,即模型(model)-視圖(view)-控制器(controller)的縮寫流椒,一種軟件設(shè)計典范敏簿,用一種業(yè)務(wù)邏輯、數(shù)據(jù)宣虾、界面顯示分離的方法組織代碼惯裕,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時绣硝,不需要重新編寫業(yè)務(wù)邏輯蜻势。框架之所以流行鹉胖,在于其易復用和簡化開發(fā)握玛,精髓在思想,掌握了核心思想甫菠,我們掌握其他類似框架也不會有問題挠铲,建議大家有精力的話讀一下框架源碼,尤其是Spring寂诱。
關(guān)于SSM框架:
SSM框架是spring MVC 拂苹,spring和mybatis框架的整合,是標準的MVC模式刹衫,將整個系統(tǒng)劃分為表現(xiàn)層醋寝,controller層,service層带迟,DAO層四層
使用spring MVC負責請求的轉(zhuǎn)發(fā)和視圖管理
spring實現(xiàn)業(yè)務(wù)對象管理音羞,mybatis作為數(shù)據(jù)對象的持久化引擎
?
SpringMVC:
1.客戶端發(fā)送請求到DispacherServlet(分發(fā)器)
2.由DispacherServlet控制器查詢HanderMapping,找到處理請求的Controller
3.Controller調(diào)用業(yè)務(wù)邏輯處理后仓犬,返回ModelAndView
4.DispacherSerclet查詢視圖解析器嗅绰,找到ModelAndView指定的視圖
5.視圖負責將結(jié)果顯示到客戶端
Spring:我們平時開發(fā)接觸最多的估計就是IOC容器,它可以裝載bean(也就是我們Java中的類搀继,當然也包括service dao里面的)窘面,有了這個機制,我們就不用在每次使用這個類的時候為它初始化叽躯,很少看到關(guān)鍵字new财边。另外spring的aop,事務(wù)管理等等都是我們經(jīng)常用到的点骑。
Mybatis:mybatis是對jdbc的封裝酣难,它讓數(shù)據(jù)庫底層操作變的透明谍夭。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關(guān)聯(lián)到各實體類的Mapper文件憨募,Mapper文件中配置了每個類對數(shù)據(jù)庫所需進行的sql語句映射紧索。在每次與數(shù)據(jù)庫交互時,通過sqlSessionFactory拿到一個sqlSession菜谣,再執(zhí)行sql命令珠漂。
要完成一個功能:
先寫實體類entity,定義對象的屬性尾膊,(可以參照數(shù)據(jù)庫中表的字段來設(shè)置媳危,數(shù)據(jù)庫的設(shè)計應(yīng)該在所有編碼開始之前)。
寫Mapper.xml(Mybatis)眯停,其中定義你的功能济舆,對應(yīng)要對數(shù)據(jù)庫進行的那些操作,比如 insert莺债、selectAll滋觉、selectByKey、delete齐邦、update等椎侠。
寫Mapper.java,將Mapper.xml中的操作按照id映射成Java函數(shù)措拇。
寫Service.java我纪,為控制層提供服務(wù),接受控制層的參數(shù)丐吓,完成相應(yīng)的功能浅悉,并返回給控制層。
寫Controller.java券犁,連接頁面請求和服務(wù)層术健,獲取頁面請求的參數(shù),通過自動裝配粘衬,映射不同的URL到相應(yīng)的處理函數(shù)荞估,并獲取參數(shù),對參數(shù)進行處理稚新,之后傳給服務(wù)層勘伺。
寫JSP頁面調(diào)用,請求哪些參數(shù)褂删,需要獲取什么數(shù)據(jù)飞醉。
DataBase ===>Entity ===> Mapper.xml ===> Mapper.Java?===> Service.java ===>Controller.java ===> Jsp.
?
關(guān)于SSH框架:
SSH框架則是Struts2,Spring和Hibernate框架的整合屯阀,其中Struts2 做控制器(controller)冒掌,spring 管理各層的組件噪裕,hibernate 負責持久化層蹲盘。
hibernate:
優(yōu)勢:
1. 對JDBC訪問數(shù)據(jù)庫的代碼做了封裝股毫,大大簡化了數(shù)據(jù)訪問層繁瑣的重復性代碼。
2. Hibernate是一個基于JDBC的主流持久化框架召衔,是一個優(yōu)秀的ORM實現(xiàn)铃诬。他很大程度的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性苍凛。
4. hibernate的性能非常好趣席,因為它是個輕量級框架。映射的靈活性很出色醇蝴。它支持各種關(guān)系數(shù)據(jù)庫宣肚,從一對一到多對多的各種復雜關(guān)系。
原理:
1.通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的resource="com/xx/User.hbm.xml"/>讀取并解析映射信息
3.通過config.buildSessionFactory();//創(chuàng)建SessionFactory
4.sessionFactory.openSession();//打開Sesssion
5.session.beginTransaction();//創(chuàng)建事務(wù)Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事務(wù)
8.關(guān)閉Session
9.關(guān)閉SesstionFactory
Struts2:
Struts 2框架本身大致可以分為3個部分:核心控制器FilterDispatcher悠栓、業(yè)務(wù)控制器Action和用戶實現(xiàn)的企業(yè)業(yè)務(wù)邏輯組件霉涨。核心控制器FilterDispatcher是Struts 2框架的基礎(chǔ),包含了框架內(nèi)部的控制流程和處理機制惭适。業(yè)務(wù)控制器Action和業(yè)務(wù)邏輯組件是需要用戶來自己實現(xiàn)的笙瑟。用戶在開發(fā)Action和業(yè)務(wù)邏輯組件的同時,還需要編寫相關(guān)的配置文件癞志,供核心控制器FilterDispatcher來使用往枷。 Struts 2的工作流程相對于Struts 1要簡單,與WebWork框架基本相同凄杯,所以說Struts 2是WebWork的升級版本错洁。基本簡要流程如下:1戒突、客戶端瀏覽器發(fā)出HTTP請求屯碴。2、根據(jù)web.xml配置妖谴,該請求被FilterDispatcher接收窿锉。3、根據(jù)struts.xml配置膝舅,找到需要調(diào)用的Action類和方法嗡载, 并通過IoC方式,將值注入給Aciton仍稀。4洼滚、Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯,這一步包含表單驗證技潘。5遥巴、Action執(zhí)行完畢千康,根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到相應(yīng)頁面铲掐。6拾弃、返回HTTP響應(yīng)到客戶端瀏覽器。7摆霉、想要朝這方面發(fā)展或者真心有興趣的豪椿。可以找我要一些基礎(chǔ)的學習視頻携栋,Q號碼:3342995915搭盾,這個是免費的,希望同學找我要的時候不要有理所應(yīng)當?shù)膽B(tài)度婉支,畢竟都是我的心血鸯隅,希望你是真的有一顆想要學好java的心,我也會盡所能的去幫助你成為一名優(yōu)秀的程序員向挖。
Struts的工作流程:
在web應(yīng)用啟動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象當ActionServlet接收到一個客戶請求時,將執(zhí)行如下流程.
-(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;
-(2)如果ActionForm實例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對象中;
-(3)根據(jù)配置信息決定是否需要表單驗證.如果需要驗證,就調(diào)用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象, 就表示表單驗證成功;
-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個Action,如果相應(yīng)的 Action實例不存在,就先創(chuàng)建這個實例,然后調(diào)用Action的execute()方法;
-(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)發(fā)給 ActionForward對象指向的JSP組件;
-(7)ActionForward對象指向JSP組件生成動態(tài)網(wǎng)頁,返回給客戶;
Spring:
Spring框架是一個分層架構(gòu)蝌以,由 7 個定義良好的模塊組成。Spring 模塊構(gòu)建在核心容器之上户誓,核心容器定義了創(chuàng)建饼灿、配置和管理 bean 的方式,
組成Spring 框架的每個模塊(或組件)都可以單獨存在帝美,或者與其他一個或多個模塊聯(lián)合實現(xiàn)碍彭。每個模塊的功能如下:
☆ 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory悼潭,它是工廠模式的實現(xiàn)庇忌。BeanFactory 使用控制反轉(zhuǎn) (IOC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開。
Spring 框架的功能可以用在任何 J2EE 服務(wù)器中舰褪,大多數(shù)功能也適用于不受管理的環(huán)境皆疹。Spring 的核心要點是:支持不綁定到特定 J2EE 服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問對象。毫無疑問占拍,這樣的對象可以在不同 J2EE 環(huán)境 (Web 或 EJB)略就、獨立應(yīng)用程序、測試環(huán)境之間重用晃酒。
IOC 和AOP
控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對象表牢,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務(wù)連接贝次,但在配置文件中描述哪一個組件需要哪一項服務(wù)崔兴。容器(在 Spring 框架中是 IOC 容器) 負責將這些聯(lián)系在一起。
在典型的 IOC 場景中,容器創(chuàng)建了所有對象敲茄,并設(shè)置必要的屬性將它們連接在一起位谋,決定什么時間調(diào)用方法。
Spring 設(shè)計的核心是org.springframework.beans 包堰燎,它的設(shè)計目標是與 JavaBean 組件一起使用掏父。這個包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介爽待。下一個最高級抽象是 BeanFactory 接口损同,它是工廠設(shè)計模式的實現(xiàn),允許通過名稱創(chuàng)建和檢索對象鸟款。BeanFactory也可以管理對象之間的關(guān)系。1茂卦、具有1-5工作經(jīng)驗的何什,面對目前流行的技術(shù)不知從何下手,需要突破技術(shù)瓶頸的可以加等龙。2处渣、在公司待久了,過得很安逸蛛砰,但跳槽時面試碰壁罐栈。需要在短時間內(nèi)進修、跳槽拿高薪的可以加泥畅。3荠诬、如果沒有工作經(jīng)驗,但基礎(chǔ)非常扎實位仁,對java工作機制柑贞,常用設(shè)計思想,常用java開發(fā)框架掌握熟練的聂抢,可以加钧嘶。4、覺得自己很牛B琳疏,一般需求都能搞定有决。但是所學的知識點沒有系統(tǒng)化,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以加空盼。5. 群號:JAVA程序猿 650385180備注好信息书幕!6.阿里Java高級大牛直播講解知識點,分享知識我注,多年工作經(jīng)驗的梳理和總結(jié)按咒,帶著大家全面、科學地建立自己的技術(shù)體系和技術(shù)認知;
BeanFactory 支持兩個對象模型。
□ 單態(tài) 模型提供了具有特定名稱的對象的共享實例励七,可以在查詢時對其進行檢索智袭。Singleton 是默認的也是最常用的對象模型。對于無狀態(tài)服務(wù)對象很理想掠抬。
□ 原型 模型確保每次檢索都會創(chuàng)建單獨的對象吼野。在每個用戶都需要自己的對象時,原型模型最適合两波。
bean 工廠的概念是 Spring 作為 IOC 容器的基礎(chǔ)瞳步。IOC 將處理事情的責任從應(yīng)用程序代碼轉(zhuǎn)移到框架。Spring 框架使用 JavaBean 屬性和配置數(shù)據(jù)來指出必須設(shè)置的依賴關(guān)系腰奋。
BeanFactory 接口
因為org.springframework.beans.factory.BeanFactory 是一個簡單接口单起,所以可以針對各種底層存儲方法實現(xiàn)。最常用的 BeanFactory 定義是 XmlBeanFactory劣坊,它根據(jù) XML 文件中的定義裝入 bean嘀倒,在XML 文件中定義的 Bean 是被消極加載的,這意味在需要bean 之前局冰,bean 本身不會被初始化测蘑。要從BeanFactory 檢索 bean,只需調(diào)用getBean() 方法康二,傳入將要檢索的 bean 的名稱即可碳胳,每個 bean 的定義都可以是 POJO (用類名和 JavaBean 初始化屬性定義) 或 FactoryBean。FactoryBean 接口為使用 Spring 框架構(gòu)建的應(yīng)用程序添加了一個間接的級別沫勿。
總結(jié):SSM和SSH不同主要在MVC實現(xiàn)方式挨约,以及ORM持久化方面不同(Hiibernate與Mybatis)。SSM越來越輕量級配置藕帜,將注解開發(fā)發(fā)揮到極致烫罩,且ORM實現(xiàn)更加靈活,SQL優(yōu)化更簡便洽故;而SSH較注重配置開發(fā)贝攒,其中的Hiibernate對JDBC的完整封裝更面向?qū)ο螅瑢υ鰟h改查的數(shù)據(jù)維護更自動化时甚,但SQL優(yōu)化方面較弱隘弊,且入門門檻稍高。