仲介交易 SEO診斷 淘寶客 雲主機 技術大廳
在最近的課程設計中,要求我們使用Struts框架和HIbernate框架結合來完成一個學生選課系統。 很多同學因沒有學懂這兩個框架而有所抱怨,抱怨到為什麼不使用MVC模式,因為他們已經對MVC瞭若指掌。
因此我就不得不說JSO網站開發中存在的兩種模式了。
Mode1
簡單的說,Mode1模式也分為兩種情況,一種是完全使用JSP來開發,而另一種則是使用JSP+JavaBean來開發。 這兩種方案的唯一優點就在於,適合於小型的網站開發中,例如一個簡單的個人主頁,使用Mode1模式是你的首選方案。
當然如果你的專案足夠小,使用純JSP來開發,讓你的維護也會更加簡單。 因為它免去了修改JavaBean之後,還需要重新編譯為".class"檔的麻煩。
而Mode1的缺點也是不可忽視的,開發過程中,將大量的邏輯處理代碼放在了JSP和JavaBean中,這導致了JavaBean複雜度增加,關聯程度 提高(也叫耦合度),我們在完美開發中追求的是"高內聚低耦合", 所以在大型的專案開發中,我們還是會把Mode1模式丟在一旁的。
Mode1示意圖
Mode2
Mode2中是以servlet為主體的,通過servlet接受客戶請求,調用不同的JavaBean處理,將結果返回到JSP頁面中,如此分工明確, 效率提高,而且方便專案維護,是大型網站建設的首選。 在Mode2中,有一個叫做MVC的設計模式。 它設計模式分為模型層,顯示層,控制層。
MVC設計模式
這樣理解MVC和Struts
如果你難以理解MVC和Struts到底有何關聯,那麼你可以這樣認為:MVC是一個定義的標準interface(介面),而Struts只是完美的實現了MVC介面而已。 除了Struts,EJB也是一個MVC的實現。
Struts和Hibernate的結合
現在不難理解,在整個"學生選課系統"設計過程中,Struts是用來獲取表單資料的,Hibernate是用來持久化物件到資料庫的。 基本的設計流程為:
一:介面設計,首先你需要將前臺的頁面構造完美,給消費者留下一個好的印象。
這是我設計的前臺登陸介面
二:考慮持久層:就那當前的專案來說,"學生選課系統"當以學生為主,每位學生是可以選擇多門學科的,所以存在了一對多的關係,在Hibernate中使 用標籤進行關係的映射。 通過匯出映射關係到資料庫中。 就可以將物件關係持久化到資料庫中了。
三:Struts過程:通過Struts來獲得表單資料,再通過調用Hibernate的HQL語句進行資料的驗證,是登陸驗證的關鍵所在。 等整個系統修 改完畢,我會將具體代碼貼出供大家參考。 而對於前臺資料的驗證,我沒有使用JAVAscript和是使用了Struts的Validaate驗證框架,如 果你不懂這個,你可以參照<>。
關於Hibernate和Mysql編碼問題
編碼問題是最讓人抓狂的問題,使用Hibernate存入中文字元,而資料庫確實一堆的"???" 讓人很是惱火。 我們需要做的就是編碼的統一。 而 「UTF-8」的編碼優勢我就不說了,它完全可以支援中午編碼顯示,所以我們在構造資料庫過程中,最後手動為其設置模式編碼方式,CREATE DATABASE test DEFAULT CHARSET=UTF8。
之後需要修改的就是Hibernate的編碼方式了。 方案一:
在「hibernate.cfg.xml」檔中,應該如此寫「URL」的配置:
Xml 代碼
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding= UTF-8</property>
方案二:
1, mysql安裝時設置字元集utf-8(包括資料庫字元集,以及表的字元集), jdbc驅動用最新的。
2.hibernate設定檔(hibernate.cfg.xml)中,加上屬性
Xml 代碼
<property name="connection.useUnicode">true</property> <property name=" connection.characterEncoding">UTF-8</property>
3. web.xml設置Filter
Xml 代碼
<filter> <filter-name> Set Web Application Character Encoding </filter-name> <filter-class> com.util.SetEncodeFilter</filter-class> <init-param> <param-name>defaultencoding</ param-name> <param-value>UTF-8</param-value> </init-param> </filter> < filter-mapping> <filter-name> Set Web Application Character Encoding </filter-name> & nbsp; <url-pattern>/*</url-pattern> </filter-mapping>