日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSH三大框架理解

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSH三大框架理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言:

因為剛開始工作,然后最先接觸的是Springboot,Spring boot 可以實現快速上手,但是原來的三大框架了解的不是很多,因此現在想深入的了解下,所以就寫了這篇博客,一是為了學習,二是為了做個筆記吧。好記性不如爛筆頭,所以還是寫下來比較好,也便于以后的查看。

背景知識:

我們知道,傳統的Java Web應用程序是采用JSP+Servlet+Javabean來實現的,這種模式實現了最基本的MVC分層,使的程序結構分為幾層,有負責前臺展示的 JSP、負責流程邏輯控制的Servlet以及負責數據封裝的Javabean。但是這種結構仍然存在問題:如JSP頁面中需要使用符號嵌入很多的 Java代碼,造成頁面結構混亂,Servlet和Javabean負責了大量的跳轉和運算工作,耦合緊密,程序復用度低等等。

一、SSH三大框架
  • structs
  • spring
  • Hibernate
  • 二、structs1.structs1原理

    想要理解strusts1,我是先通過strusts1的運行原理圖來理解的,然后,我們根據原理圖來講解structs1原理。

    1.1 strusts1原理圖 1.2 structs1原理步驟

    用戶在視圖層輸入數據。

    第一步:structs框架總控制器,初始化,開始讀取strusts-config.xml文件。

    struts框架的總控制器ActionServlet是一個Servlet,它在web.xml中配置成自動啟動的Servlet,在啟動時總控制器會讀取配置文件(struts-config.xml)的配置信息,為struts中不同的模塊初始化相應的對象。(面向對象思想)

    第二步:視圖層向總控制器發送Http請求

    用戶提交表單或者通過URL向WEB服務器提交請求,請求的數據用HTTP協議傳給web服務器

    第三步: Form填充

    struts的總控制器ActionServlet在用戶提交請求時將數據放到對應的form對象中的成員變量中。

    第四步:派發請求

    控制器根據配置信息,對象ActionConfig將請求派發到具體的Action,對應的formBean一并傳給這個Action中的excute()方法。

    第五步:處理業務

    Action一般只包含一個excute()方法,它負責執行相應的業務邏輯(調用其它的業務模塊)完畢后返回一個ActionForward對象。服務器通過ActionForward對象進行轉發工作。

    第六步:返回響應

    Action將業務處理的不同結果返回一個目標響應對象給總控制器。
    ?
    第七步:查找響應

    總控制器根據Action處理業務返回的目標響應對象,找到對應的資源對象,一般情況下為jsp頁面。
    ?
    第八步:響應用戶

    目標響應對象將結果傳遞給資源對象,將結果展現給用戶。

    1.3 structs的優缺點:1.優點:?
    ??①開源的框架,結構清晰?
    ??②MVC的經典實現(MVC是一種思想,而不是一種技術)?
    ??③處理異常機制,實現國際化?
    ??④具有強大的標簽庫?
    ??⑤解決了JSP頁面存在大量的JAVA代碼,維護起來方便?
    ??⑥formBean中會自動提交,不會去使用傳統的getset方法得到值、取值?

    2.缺點:?
    ??①配置復雜?
    ??②測試不方便?
    ??③依賴web容器?
    ??④action是一個單例模式,必須設置為線程安全
    2.structs2原理2.1?structs2原理圖



    第一步:客戶端初始化一個指向Servlet容器(例如Tomcat)的請求?
    第二步:這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh?Plugin)?
    第三步:接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action?
    第四步:如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy?
    第五步:ActionProxy通過Configuration?Manager詢問框架的配置文件,找到需要調用的Action類?
    第六步:ActionProxy創建一個ActionInvocation的實例。?
    第七步:ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。?

    第八步:一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可?能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2?框架中繼承的標簽。在這個過程中需要涉及到ActionMapper?

    注意:在上述過程中所有的對象(ActionResultsInterceptors,等)都是通過ObjectFactory來創建的

    2.2 structs2的優缺點: 優點:

    大量的攔截器:
    Struts2本身提供了大量的可重用的攔截器,比如類型轉換攔截器,很多時候我們從頁面取得參數,這個時候它是String類型的,我們需要手動。
    基于插件的框架:
    Struts2是一個基于插件的框架,社區中提供了很多實用的插件,比如jfreechat/json等等,使用這些插件可以簡化我們的開發,加快開發進度。
    struts2最大的缺點莫過于在好多web服務器上支持不好,例如在websphere5.5,weblogic8.1及以前版本支持非常查,需要用最新的。
    多種視圖的支持:
    多種視圖的支持:jspfreemarkerVeloctiy,只要你愿意,你甚至可以通過輕松的改造讓它支持pdf,同一個項目中你可以支持多種視圖。
    更加的模塊化:
    Struts1.X?相比,Struts2更加的模塊化,可以輕松將配置信息按功能界限拆分成多個文件,便于管理和團隊協作開發。
    與Spring的集成:
    Struts1.x相比,Struts2不必再自己編寫singleton,進一步的降低了程序間的耦合性,就Struts2內部本身而言,降低了框架本身的偶合性。
    基于pojo易于測試:

    Struts1.x中我需要Mock出這兩個Http對象,使我們很難編寫Action的單元測試,與Struts1.x相比,Struts2Action?不再依賴于HttpServletRequestHttpServletResponse對象,使我們能夠更方便的針對Action編寫單元測試。

    缺點:

    Struts2中Action中取得從jsp中傳過來的參數時還是有點麻煩。

    可以為Struts2的Action中的屬性配置上Getter和Setter方法,通過默認攔截器,就可以將請求參數設置到這些屬性中。如果用這種方式,當請求參數很多時,Action類就會被這些表單屬性弄的很臃腫,讓人感覺會很亂。還有Action中的屬性不但可以用來獲得請求參數還可以輸出到Jsp中,這樣就會更亂。假設從JSP1中獲得了參數money=100000,但是這個Action還要輸出到JSP2中,但是輸出的格式卻不同,money=100,000,這樣這個Action中的money中的值就變了。

    校驗還是感覺比較繁瑣,感覺太煩亂,也太細化了。

    如果校驗出錯的只能給用戶提示一些信息。如果有多個字段,每個字段出錯時返回到不同的畫面,這個功能在Strut2框架下借助框架提供的校驗邏輯就不容易實現。

    安全性有待提高。

    Struts2曝出2個高危安全漏洞,一個是使用縮寫的導航參數前綴時的遠程代碼執行漏洞,另一個是使用縮寫的重定向參數前綴時的開放式重定向漏洞。這些漏洞可使黑客取得網站服務器的“最高權限”,從而使企業服務器變成黑客手中的“肉雞”。

    二、spring

    1.spring簡介

    spring 是一個輕量級的,基于IOC和AOP核心技術的企業級開源開發框架

    動態注入,讓一個對象的創建不用new了,可以自動的生產,這其實就是利用java里的反射,反射其實就是在運行時動態的去創建、調用對象,Spring就是在運行時,根據xml Spring的配置文件來動態的創建對象,和調用對象里的方法的。?

    Spring還有一個核心就是AOP這個就是面向切面編程,可以為某一類對象?進行監督和控制(也就是?在調用這類對象的具體方法的前后去調用你指定的?模塊)從而達到對一個模塊擴充的功能。這些都是通過配置類達到的。?

    Spring目的:就是讓對象與對象(模塊與模塊)之間的關系沒有通過代碼來關聯,都是通過配置類說明?管理的(Spring根據這些配置?內部通過反射去動態的組裝對象)?

    注意:Spring是一個容器,凡是在容器里的對象才會有Spring所提供的這些服務和功能。

    2.spring的主要特征

    (1)輕量級:spring是一個輕量級的開發框架,基本版本大約只有2M

    (2)IOC:控制反轉,應用程序中對象之間的依賴是由spring 來控制的

    (3)AOP:面向切面編程,spring支持面向切面編程,這樣可以將業務邏輯和系統服務分開,分離

    (4)容器:包含并管理應用程序中對象的生命周期和配置信息

    (5)MVC思想:spring也是基于MVC思想的框架,也遵循模型-視圖-控制器這三個層次

    (6)事務:spring提供一個持續化的接口,可以上至擴展到本地事務下至擴展到全局事務

    (7)異常處理:Spring 提供方便的API把具體技術相關的異常(比如由JDBC,hibernate,or JDO拋出的)轉化為一致的unchecked 異常。

    ?3.spring優缺點

    優點:

  • Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。如果你僅僅使用了Struts或其他為J2EE的?API特制的framework,Spring致力于解決剩下的問題。?
  • Spring能消除在許多工程中常見的對Singleton的過多使用。根據我的經驗,這是一個很大的問題,它降低了系統的可測試性和面向對象的程度。?
  • 通過一種在不同應用程序和項目間一致的方法來處理配置文件,Spring能消除各種各樣自定義格式的屬性文件的需要。曾經對某個類要尋找的是哪個魔法般的屬性項或系統屬
  • 性感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean屬性。Inversion?of?Control的使用(在下面討論)幫助完成了這種簡化。?
  • 通過把對接口編程而不是對類編程的代價幾乎減少到沒有,Spring能夠促進養成好的編程習慣。?
  • Spring被設計為讓使用它創建的應用盡可能少的依賴于他的APIs。在Spring應用中的大多數業務對象沒有依賴于Spring。?
  • 使用Spring構建的應用程序易于單元測試。?
  • Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local?EJBs來實現業務接口,卻不會影響調用代碼。?
  • Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適用于許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不通過EJB容器,如果你僅僅需要與單個數據庫打交道,甚至不需要一個JTA實現。?
  • Spring為數據存取提供了一個一致的框架,不論是使用的是JDBC還是O/R?mapping產品(如Hibernate)。
  • 缺點:

    1.jsp中要寫很多代碼、控制器過于靈活,缺少一個公用控制器

    2.Spring不支持分布式,這也是EJB仍然在用的原因之一。

    三、hibernate框架

    1.hibernate的工作原理

    第一步:Configuration.config() 來讀取xml配置文件

    第二步:Configuration.config()來讀取配置文件里面的映射信息

    第三步:創建會話工廠

    第四步:打開會話

    第五步:開啟事務

    第六步:持久化到數據庫

    第七步:關閉會話

    第八步:關閉會話工廠

    2.hibernate優缺點

    優點:

    1.hibernate是基于ORMapping技術的開源的框架,對JDBC進行了輕量級的封裝,使用面向對象的思維來操縱數據庫。?

    2.hibernate提供了session緩存和二級緩存,對于不需要進行復雜查詢的系統,性能有提升。?

    3.低侵入式設計

    缺點:

    1.hibernate不容易上手,學習成本太高

    2.hibernate由于不直接對底層數據庫進行操作,所以不適合復雜的查詢(統計)

    3.不適合大量的聚集操作(存儲過程)


    總結

    以上是生活随笔為你收集整理的SSH三大框架理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。