SpringMVC 01 SpringMVC概述及入门案例 筆記
來源:SpringMVC 01 SpringMVC概述及入门案例 000 三层架构介绍和MVC设计模型介绍 2:38
Java三層架構,表現層(SpringModel(Javabean) View(JSP) Controller(Servlet))、業務層(Spring)、持久層(Dao)
傳統的web應用程式都是以JSP+Servlet+Javabean來實現,這是最基本的MVC架構,JSP負責呈現,Servlet負責流程邏輯控制,Javabean負責資料封裝,但是由於Jsp介面需要嵌入過多Java程式碼導致混亂,Servlet和Javabean負責大量跳轉和運算,耦合緊密,程式複用度低等等。
Struts
為了解決這些問題,出現了Struts框架,它有一箇中央控制類(一個Servlet),針對不同的業務,我們需要一個Action類負責頁面跳轉和後臺邏輯運算,一個或幾個JSP頁面負責資料的輸入和輸出顯示,還有一個Form類負責傳遞Action和JSP中間的資料。JSP中可以使用Struts框架提供的一組標籤,就像使用HTML標籤一樣,但是可以完成非常複雜的邏輯。從此JSP頁面中不需要出現一行保衛的Java程式碼了。可是所有的運算邏輯都放在Struts的Action裡將使得Action類複用度低和邏輯混亂,所以通常人們會把整個web應用分成三層,Struts負責顯示層,它呼叫業務層完成運算邏輯,業務層再呼叫持久層完成資料庫的讀寫。使用JDBC連線來讀寫資料庫,我們最常見的就是開啟資料庫連線、使用複雜的SQL語句進行讀寫、關閉連線,獲得的資料又需要轉換或封裝後往外傳,這是一個繁瑣的過程。
現在已經換成了SpringMVC
Hibernate
這時出現了Hibernate框架,它需要你建立一系列的持久化類,每個類的屬性都可以簡單的看做和一張資料庫表的屬性一一對應,當然也可以實現關係資料庫的各種表間關聯的對應。當我們需要相關操作時,不用再關注資料庫表。我們不用再去一行行的查詢資料庫,只需要持久化類就可以完成增刪改查的功能,使得我們的軟體開發真正面向物件,而不是面向混亂的程式碼。使用Hibernate比JDBC方式減少了80%的程式設計量。
現在我們有三個層了,可是每層之間的呼叫時怎樣的呢?比如顯示層的Struts需要呼叫一個業務類,就需要new一個業務類出來,然後使用;業務類需要呼叫持久層的類,也需要new一個持久層類出來用。通過這種new的方式互相呼叫就是軟體開發中最糟糕設計的體現。簡單的說,就是呼叫者依賴被呼叫者,它們之間形成了強耦合,如果我想在其他地方複用某個類,則這個類依賴的其他類也需要包含。程式就變得很混亂,每個類相互依賴相互呼叫,複用度極低。如果一個類做了修改,則依賴它的很多類都會受到牽連。
為此,出現Spring框架。
Spring的作用就是完全解耦類之間的依賴關係,一個類如果要依賴什麼,那就是一個介面。至於如何實現這個介面,這都不重要了。只要拿到一個實現了這個介面的類,就可以輕鬆的通過xml配置檔案把實現類注射到呼叫介面的那個類裡。所有類之間的這種依賴關係就完全通過配置檔案的方式替代了。所以Spring框架最核心的就是所謂的依賴注入和控制反轉。
現在的結構是,Struts負責表現層,Hibernate負責持久層,Spring負責業務層,這個結構是目前國內最流行的Java Web應用程式架構。
另外,由於Spring使用的依賴映射以及AOP(面向切面程式設計),所以它的這種內部模式非常優秀,以至於Spring自己也實現了一個使用依賴映射的MVC框架,叫Spring MVC,同時為了很好的處理事務,Spring集成了Hibernate,使事務管理從Hibernate的持久層提升到業務層,使用更加方便和強大。
業務流程:在表示層中,首先通過JSP頁面實現互動介面,負責接收請求(Request)和傳送響應(Response),然後Struts根據配置檔案(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理。在業務層中,管理服務元件的Spring IOC容器負責向Action提交業務模型(Model)元件和該元件的協作物件資料處理(DAO)元件完成業務邏輯,並提供事務處理、緩衝池等容器元件以提升系統性能和保證資料的完整性。而在持久層中,則依賴於Hibernate的物件化對映和資料庫互動,處理DAO元件請求的資料,返回處理結果。
-----------------------------------------------------------------------------------------------------------------
來源:SpringMVC 01 SpringMVC概述及入门案例 001 SpringMVC框架的介绍2:07
使用SpringMVC的原因是因為SpringMVC算是Spring的衍生產品,在做整合的部分會比較輕鬆
Spring是由Rod Johnson 撰寫,並在其著作 Expert One-on-One: J2EE Design and Development 中有提到過,它是個輕量級(Lightweight)容器(Container)、實現 IoC(Inversion of Control)、AOP(Aspect-oriented programming)概念,是一個全方位的應用程式(Application)框架(Framework),可協助建立以往在 EJB 下才有可能建立的一些應用程式。
來源:SpringMVC 01 SpringMVC概述及入门案例 001 SpringMVC框架的介绍10:53
SpringMVC入口是Servlet,Struts2是Filter
SpringMVC是基於方法設計的,Struts2是基於類設計的,一個要new一個不用
SpringMVC支援JSR303處理ajax更為快速
(JSR303是一套JavaBean參數校驗的基準)
-----------------------------------------------------------------------------------------------------------------
來源:SpringMVC 01 SpringMVC概述及入门案例 003 入门程序之搭建开发环境 2:00~2:40
加速maven項目擴建過慢問題
在project創建的時候 在Properties處add
key: archetypeCatalog value: internal
-----------------------------------------------------------------------------------------------------------------
來源:SpringMVC 01 SpringMVC概述及入门案例 003 入门程序之搭建开发环境 7:40~8:10
接收servlet請求
<servlet>
第一條是servlet name 取什麼都可以
第二條是依賴類
<servlet-mapping>
第一條的名稱必須得是<servlet>的名稱
第二條/代表全部攔截
-----------------------------------------------------------------------------------------------------------------------
來源:SpringMVC 01 SpringMVC概述及入门案例 003 入门程序之搭建开发环境 9:22
開發環境最基礎配置
-----------------------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 005 入门案例的流程总结 5:00
Servlet 全稱 Java Servlet 是Java編寫伺服器的程式,主要功能在於互動瀏覽和修改資料,生成動態Web
狹義上來講為Java的一個介面,廣義上來講視為一個類別
Servlet的事件有三類,上下文事件、會話事件和請求事件
1.對Servlet上下文進行監聽
ServletContext物件的建立和刪除以及屬性的新增、刪除和修改等操作。
ServletContextAttributeListener:監聽對ServletContext屬性的操作,如增加、刪除、修改操作。
ServletContextListener:監聽ServletContext,當建立ServletContext時,激發contextInitialized (ServletContextEvent sce)方法;當銷燬ServletContext時,激發contextDestroyed(ServletContext- Event sce)方法。
2.監聽Http會話
監聽Http會話活動情況、Http會話中屬性設定情況,也可以監聽Http會話的active、paasivate情況等。
HttpSessionListener:監聽HttpSession的操作。當建立一個Session時,激發session Created (SessionEvent se)方法;當銷燬一個Session時,激發sessionDestroyed
HttpSessionActivationListener:用於監聽Http會話active、passivate情況。
HttpSessionAttributeListener:監聽HttpSession中屬性的操作。當在Session增加一個屬性時,激發attributeAdded(HttpSessionBindingEvent se) 方法;當在Session刪除一個屬性時,激發attributeRemoved(HttpSessionBindingEvent se)方法;在Session屬性被重新設定時,激發attributeReplaced(HttpSessionBindingEvent se) 方法。
3.對客戶端請求進行監聽
對客戶端的請求進行監聽是在Servlet 2.4規範中新新增的一項技術,使用的介面類如下:
ServletRequestListener介面類。
ServletRequestAttrubuteListener介面類。
-----------------------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 005 入门案例的流程总结 8:46
-----------------------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 006 入门案例的流程总结 0:20
SpringMVC框架 基於組件方式執行流程
1.前端丟回一個request //hello
2.至映射器尋找應對的Controller的方法
3.返回Controller內的方法
4.通過適配器處理,主要是用於處理Controller的方法,假如來不同的類,則可以通過這個適配器相容
5.執行Controller
6.返回Controller結果
7.返回Controller結果
8.到視圖解析器找到跳轉目標(找到返回值的頁面)
9.返回view值
10.顯示
以上的東西,可以用<mvc:annotation-driven />開啟
<!-- 視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" /><!-- 找哪個路徑下的文件 -->
<property name="suffix" value=".jsp" /><!-- 文件後綴名稱 -->
</bean>
<!-- 處理器映射器、處理器適配器 -->
<mvc:annotation-driven />
使用<mvc:annotation-driven /> 可省略下面的bean開啟
-----------------------------------------------------------------------------------------------------------------------SpringMVC 01 SpringMVC概述及入门案例 007 RequestMapping注解的作用 1:00
@RequestMapping
Target 代表 可以放在 方法(method)上 或者是 類(class)上
類似
可以用於區分不同類的不同方法 呼叫則以download/page 類似這樣的路徑呼叫
-----------------------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 008 RequestMapping注解的属性 0:54

AliasFor = 相同
也就是 path 跟 value 都是路徑的意思
----------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 008 RequestMapping注解的属性 0:54




AliasFor = 相同
也就是 path 跟 value 都是路徑的意思
----------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 008 RequestMapping注解的属性 0:54
Method
可以接受哪一種請求方式
----------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 008 RequestMapping注解的属性 5:00
Params
限制傳送的資料內容
比如
params = {"username"}
則代表,你的回傳值必須要有username的屬性
params = {"username=hehe"}
則代表,你的回傳值,必須要是username=hehe,不然不會通過
----------------------------------------------------------------------------------------------------------
SpringMVC 01 SpringMVC概述及入门案例 008 RequestMapping注解的属性 8:20
Headers
發送時要有請求頭
以上是請求頭。
留言
張貼留言