1. 程式人生 > >SSH(三大框架總結)

SSH(三大框架總結)

JAVA三大框架ssh-StrutsSpringHibernate
Struts

1. struts是一個按MVC模式設計的Web層框架,其實它就是一個大大的servlet,這個Servlet名為ActionServlet,或是 ActionServlet的子類。我們可以在web.xml檔案中將符合某種特徵的所有請求交給這個Servlet處理,這個Servlet再參照一個配置檔案(通常為/WEB-INF/struts-config.xml)將各個請求分別分配給不同的action去處理。
一個擴充套件知識點:struts的配置檔案可以有多個,可以按模組配置各自的配置檔案,這樣可以防止配置檔案的過度膨脹;


2. ActionServlet把請求交給action去處理之前,會將請求引數封裝成一個formbean物件(就是一個java類,這個類中的每個屬性對應一個請求引數),封裝成一個什麼樣的formbean物件呢?看配置檔案。
3.要說明的是, ActionServletformbean物件傳遞給actionexecute方法之前,可能會呼叫formbeanvalidate方法進行校驗,只有校驗通過後才將這個formbean物件傳遞給actionexecute方法,否則,它將返回一個錯誤頁面,這個錯誤頁面由input屬性指定,(看配置檔案)作者為什麼將這裡命名為 input屬性,而不是
error屬性,我們後面結合實際的執行效果進行分析。
4.action執行完後要返回顯示的結果檢視,這個結果檢視是用一個ActionForward物件來表示的,actionforward物件通過struts-config.xml配置檔案中的配置關聯到某個jsp 頁面,因為程式中使用的是在struts-config.xml配置檔案為jsp頁面設定的邏輯名,這樣可以實現action程式程式碼與返回的jsp頁面名稱的解耦。


Hibernate

1. 面向物件設計的軟體內部執行過程可以理解成就是在不斷建立各種新物件、建立物件之間的關係,呼叫物件的方法來改變各個物件的狀態和物件消亡的過程,不管程式執行的過程和操作怎麼樣,本質上都是要得到一個結果,程式上一個時刻和下一個時刻的執行結果的差異就表現在記憶體中的物件狀態發生了變化。

2.為了在關機和記憶體空間不夠的狀況下,保持程式的執行狀態,需要將記憶體中的物件狀態儲存到持久化裝置和從持久化裝置中恢復出物件的狀態,通常都是儲存到關係資料庫來儲存大量物件資訊。從Java程式的執行功能上來講,儲存物件狀態的功能相比系統執行的其他功能來說,應該是一個很不起眼的附屬功能,java採用 jdbc來實現這個功能,這個不起眼的功能卻要編寫大量的程式碼,而做的事情僅僅是儲存物件和恢復物件,並且那些大量的jdbc程式碼並沒有什麼技術含量,基本上是採用一套例行公事的標準程式碼模板來編寫,是一種苦活和重複性的工作。
3.通過資料庫儲存java程式執行時產生的物件和恢復物件,其實就是實現了java物件與關係資料庫記錄的對映關係,稱為ORM(即Object Relation Mapping),人們可以通過封裝JDBC程式碼來實現了這種功能,封裝出來的產品稱之為ORM框架,Hibernate就是其中的一種流行ORM框架。使用Hibernate框架,不用寫JDBC程式碼,僅僅是呼叫一個save方法,就可以將物件儲存到關係資料庫中,僅僅是呼叫一個get方法,就可以從資料庫中加載出一個物件。
4.使用Hibernate的基本流程是:配置Configuration物件、產生SessionFactory、建立session物件,啟動事務,完成CRUD操作,提交事務,關閉session
5.使用Hibernate時,先要配置hibernate.cfg.xml檔案,其中配置資料庫連線資訊和方言等,還要為每個實體配置相應的hbm.xml檔案,hibernate.cfg.xml檔案中需要登記每個hbm.xml檔案。
6.在應用Hibernate時,重點要了解Session的快取原理,級聯,延遲載入和hql查詢。
3AOP的作用。

Spring

1.Spring實現了工廠模式的工廠類(在這裡有必要解釋清楚什麼是工廠模式),這個類名為BeanFactory(實際上是一個介面),在程式中通常BeanFactory的子類ApplicationContextSpring相當於一個大的工廠類,在其配置檔案中通過<bean>元素配置用於建立例項物件的類名和例項物件的屬性。
2. Spring提供了對IOC良好支援,IOC是一種程式設計思想,是一種架構藝術,利用這種思想可以很好地實現模組之間的解耦。IOC也稱為DIDepency Injection),什麼叫依賴注入呢?
譬如,Class Programmer

Computer computer = null;
public void code()

//Computer computer = new IBMComputer();
//Computer computer = beanfacotry.getComputer();
computer.write();

public void setComputer(Computer computer)

this.computer = computer;


另外兩種方式都由依賴,第一個直接依賴於目標類,第二個把依賴轉移到工廠上,第三個徹底與目標和工廠解耦了。在spring的配置檔案中配置片段如下:
<bean id=”computer” class=”cn.itcast.interview.Computer”>
</bean>

<bean id=”programmer” class=”cn.itcast.interview.Programmer”>
<property name=”computer” ref=”computer”></property>
</bean>
3. Spring提供了對AOP技術的良好封裝, AOP稱為面向切面程式設計,就是系統中有很多各不相干的類的方法,在這些眾多方法中要加入某種系統功能的程式碼,例如,加入日誌,加入許可權判斷,加入異常處理,這種應用稱為AOP。實現AOP功能採用的是代理技術,客戶端程式不再呼叫目標,而呼叫代理類,代理類與目標類對外具有相同的方法宣告,有兩種方式可以實現相同的方法宣告,一是實現相同的介面,二是作為目標的子類在,JDK中採用Proxy類產生動態代理的方式為某個介面生成實現類,如果要為某個類生成子類,則可以用CGLI B。在生成的代理類的方法中加入系統功能和呼叫目標類的相應方法,系統功能的代理以Advice物件進行提供,顯然要創建出代理物件,至少需要目標類和 Advice類。spring提供了這種支援,只需要在spring配置檔案中配置這兩個元素即可實現代理和aop功能,例如,
<bean id=”proxy” type=”org.spring.framework.aop.ProxyBeanFactory”>
<property name=”target” ref=””></property>
<property name=”advisor” ref=””></property>
</bean>

Struts優缺點
優點:
1. 實現MVC模式,結構清晰,使開發者只關注業務邏輯的實現.
2.有豐富的tag可以用 ,Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發效率
3. 頁面導航
使系統的脈絡更加清晰。通過一個配置檔案,即可把握整個系統各部分之間的聯絡,這對於後期的維護有著莫大的好處。尤其是當另一批開發者接手這個專案時,這種優勢體現得更加明顯。
4. 提供Exception處理機制 .
5. 資料庫連結池管理
6. 支援I18N
缺點
一、轉到展示層時,需要配置forward,如果有十個展示層的jsp,需要配置十次struts,而且還不包括有時候目錄、檔案變更,需要重新修改forward,注意,每次修改配置之後,要求重新部署整個專案,而tomcate這樣的伺服器,還必須重新啟動伺服器
二、 Struts Action必需是threadsafe方式,它僅僅允許一個例項去處理所有的請求。所以action用到的所有的資源都必需統一同步,這個就引起了執行緒安全的問題。
三、 測試不方便. Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴於Web容器,單元測試也很難實現。不過有一個Junit的擴充套件工具Struts TestCase可以實現它的單元測試。
四、型別的轉換. StrutsFormBean把所有的資料都作為String型別,它可以使用工具Commons-Beanutils進行型別轉化。但它的轉化都是在Class級別,而且轉化的型別是不可配置的。型別轉化時的錯誤資訊返回給使用者也是非常困難的。
五、對Servlet的依賴性過強. Struts處理Action時必需要依賴ServletRequest ServletResponse,所有它擺脫不了Servlet容器。
六、前端表示式語言方面.Struts集成了JSTL,所以它主要使用JSTL的表示式語言來獲取資料。可是JSTL的表示式語言在Collection和索引屬性方面處理顯得很弱。
七、對Action執行的控制困難. Struts建立一個Action,如果想控制它的執行順序將會非常困難。甚至你要重新去寫Servlet來實現你的這個功能需求。
八、對Action 執行前和後的處理. Struts處理Action的時候是基於classhierarchies,很難在action處理前和後進行操作。
九、對事件支援不夠. struts中,實際是一個表單Form對應一個Action(DispatchAction),換一句話說:在Struts中實際是一個表單只能 對應一個事件,struts這種事件方式稱為application eventapplication eventcomponent event相比是一種粗粒度的事件。

一、Spring
Spring是一個解決了許多在J2EE開發中常見的問題的強大框架。 Spring提供了管理業務物件的一致方法並且鼓勵了注入對介面程式設計而不是對類程式設計的良好習慣。Spring的架構基礎是基於使用JavaBean屬性的Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構建完關注所有架構層的完整解決方案方面是獨一無二的。 Spring提供了唯一的資料訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率並且減少了可能的錯誤。Spring的資料訪問架構還集成了Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務管理抽象,它能夠在各種底層事務管理技術,例如JTA或者JDBC事務提供一個一致的程式設計模型。Spring提供了一個用標準Java語言編寫的AOP框架,它給POJOs提供了宣告式的事務管理和其他企業事務--如果你需要--還能實現你自己的aspects。這個框架足夠強大,使得應用程式能夠拋開 EJB的複雜性,同時享受著和傳統EJB相關的關鍵服務。Spring還提供了可以和IoC容器整合的強大而靈活的MVC Web框架。

二、STRUCTS
Struts 是一個基於Sun J2EE平臺的MVC框架,主要是採用Servlet和JSP技術來實現的。由於Struts能充分滿足應用開發的需求,簡單易用,敏捷迅速,在過去的一年中頗受關注。Struts把Servlet、JSP、自定義標籤和資訊資源(message resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再自己編碼實現全套MVC模式,極大的節省了時間,所以說Struts是一個非常不錯的應用框架。

三、Hibernate
Hibernate是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式實用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任。,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任。

相關推薦

SSH三大框架總結

JAVA三大框架ssh-Struts、Spring、Hibernate Struts 1. struts是一個按MVC模式設計的Web層框架,其實它就是一個大大的servlet,這個Servlet名為ActionServlet,或是 ActionServlet的子類。我

Hibernate框架初學小總結

Hibernate配置檔案 一對多: 編寫JavaBean: 一方:要編寫set集合,必須手動初始化。 多方:編寫物件,不可以手動初始化。 編寫對映的配置檔案

微信小程式開發——使用sshstruts2+hibernate+spring框架實現後臺與微信前臺進行通訊

使用ssh框架實現對微信小程式前臺的通訊,做到前後臺分離,後臺頁面都為靜態頁面,通過用json來現實與前臺通訊(面向介面程式設計)。在這次因為只為了實現通訊所以沒有用hibernate。只用了struts2+spring,也是ssh框架中struts和spring整合。實現了

Scrapy框架安裝錯誤解決最全總結

問題描述:當前環境win10,python_3.6.5,64位。 在windows下,在dos中執行pip install Scrapy報錯:解決方案:需要安裝依賴,http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下載Tw

專案總結—校園辦公管理系統SSM框架搭建

登入頁面 學以致用,學習完SSM框架之後,獨立完成一個小院辦公管理系統,熟悉框架的開發流程,熟悉專案的開發流程,完成一個簡單的校園辦公管理系統,下圖是自己畫的UML圖,實現相關功能。 開發環境:Windows + Tomcat 開發工具:My

Hibernate hbm 外來鍵關聯——SSH Spring+Struts+Hibernate框架搭建之配置檔案序列六

      hibernate管理資料庫後,bbm.xml的關聯配置很重要,<many-to-one> 與<one-to-many>一定要配置正確             繼

深度學習框架分語言總結

以下列舉了基於10種語言實現的30餘種機器學習/深度學習框架,其中比較常用的有Theano、Keras、Caffe、TensorFlow等。 Python Theano 是一種用於使用數列來定

eclipse(luna)搭建SSHstruts2+spring4+hibernate4

eclipse enc cti ppi 文件中 releases path ram cat 準備工作: java環境 tomcat環境(這裏使用tomcat8.0) eclipse(已添加了server runtime插件) ========================

Linux的SSHSecure Shell Protocol服務

for authent 緊急 gpo 般的 body 方式 names ask   在數據傳輸前,SSH會對需要傳輸的數據進行加密,保證會話安全與會話中傳輸數據的安全,SSH客戶端還包含一個遠程拷貝scp。 1、SSH的結構 SSH服務由服務端軟件(openssh)和客戶端

中國科學技術大學第五屆資訊保安大賽hackergame2018自我總結

https://hack2018.lug.ustc.edu.cn 這是我第一次參加ctf(應該也是第一次聽說吧),居然隨緣拿了6個flag(本來7個,還有一個明明對了不算我對的),也算是入門了吧,也讓我對ctf產生了興趣,以後我應該也會接著參加這類比賽吧(雖然這讓我自閉) 1、簽到題 -------

中國科學技術大學第五屆信息安全大賽hackergame2018自我總結

python3 編譯 fill 解碼 問答 與他 methods c 語言 出現 https://hack2018.lug.ustc.edu.cn 這是我第一次參加ctf(應該也是第一次聽說吧),居然隨緣拿了6個flag(本來7個,還有一個明明對了不算我對的),也算是入門

java程式設計師|超詳細面經四面一總結,助你逆襲!

面經預告:阿里、網易、京東、多益網路。 面經不同的人問的問題很可能不同,不能押寶在這裡,不過幫助大家用來做模擬還是不錯的~以下按收到offer順序列出   多益網路-平臺研發 挺神奇的,流程上寫的就一面我還以為寫錯了,連hr面都沒有。。。 一面:8-17 自我介

python小結 函數小白總結&生成器&叠代器定義

time 鍵值 gen log 元組 默認 增加 http 特殊 【def】 定義一個函數 f() 調用這個函數 f 只是相當於調用一個函數對象,返回的是一個函數的內存地址,要搞清楚這一點,這樣會對以後高階函數的理解有幫助 def f():

H264的解碼總結概念性的總結

概念簡介: 1:nal的作用:簡稱網路抽象層,負責H264的格式化資料並且提供頭資訊,以保證資料適合各種信和儲存介質上的傳輸。 nal的結構是: NAL頭+RBSP(所謂的RBSP是原始編碼資料後面加了結尾位元) RBSP為資料塊:資料塊分為 A:SODB最原始的編碼資料, B:RBSP

linux環境php安裝solr擴充套件親測總結

1、從http://pecl.php.net/package/solr下載最新版本。 我下載到/usr/tmp      cd /usr/tmp   wget https://pecl.php.net/get/solr-2.4.0.tgz

Python常見面試題彙總根據面試總結

Redis: Redis快取擊穿、快取雪崩、快取重建 回答參考: 快取擊穿:     當一個連線訪問快取資料庫中不存在的資料時,會直接通過快取資料庫到後端資料庫中查詢資料,但如果有大量連線在查詢一個不存在的資料,就會有大量連線直接訪問到後

Centos7 yum快速安裝ffmpeg以及經驗總結

經驗總結: (現在的yum安裝的ffmpeg版本不支援迴圈播放視訊,如有需要這個功能的還是要編譯安裝的——-stream_loop -1只有ffmpeg版本3.2以上的才可以使用) yum安裝FFmpeg比原始碼編譯安裝省時省力,但缺點也很明顯,版本過老,為0.6.5版,最新版已為2.6

小程式無限層級路由方案框架依賴

背景 小程式歷史棧最多隻支援10層 當小程式業務比較複雜時,就很容易超過10層。 當超過10層後,有的機型是點選無反應,有的機型會出現一些未知錯誤 為了解決這些問題,我們引入了無限層級路由方案。 方案 首先宣告一下,最初方案並不是我提出的,是我司內部一位清華學霸提出的。但他們是基於w

java 呼叫 matlab 問題大總結優質文章總結

Java呼叫Matlab函式以及同時配置多版本JDK的方法 https://blog.csdn.net/jacksonary/article/details/78913656 生成Jar包各種常見問題: http://blog.sina.com.cn/s/blog_65cee699010

微信小程式多媒體檔案上傳及下載springboot框架

/** * 微信檔案上傳介面 * @param file 待上傳檔案的完整路徑 */ public FileUploadOrDownload uploadTempMedia(String file) { /