# 緒論
## Web Application 發展史
1. HTML(1990):靜態網頁
2. CGI (Conmmon Gateway Interface):第一個動態網頁技術
- 致命傷:使用process 耗費太多資源 (硬體資源稀缺)
- 但當時上網人數也不多
3. JSP, ASP: server-side動態網頁
4. JS: client-side動態網頁
開發web application層級:
|level| content |
|---| -------- |
|4| Pattern |
|3| framework (Spring, Hibernate) |
|2| platform (Java EE, .Net) 處理底層網路連線, 元件生命週期 |
|1| Turing complete language及前端HTML JS知識 |
[圖靈完備性是什麼?](https://stackoverflow.com/questions/7284/what-is-turing-complete)
## Http協定
- 無狀態的TCP/IP
- 斷線式服務:請求=>建立連線=>回應=>斷線
## 動態網頁技術分類
1. server-side 動態網頁技術
- jsp, asp, php...
- MPA(multi page application)
- 每次發送請求server回應一個page內容
- monolitic (單體式架構)
2. client-side 動態網頁技術
- 分類:
- Hybrid: SPA但有多頁式特性 範例:ESPN, FB, X
- SPA(single page application):把網頁當GUI開發 範例:Google Doc
- 適合用在前後端分離架構:
- 前端: 使用Angular, React, Vue前端框架處理html, css, js
- 後端: Restful Web Service (現行多採 micro service (微服務))
- 透過 ajax溝通
隨著APP跟分散式結構興起,前後端分離逐漸成為主流。
## web service API
- Rest
- SOAP
## 前後端分離架構
- 圖
### 前後端分離發展及優勢
- 重要技術:非同步請求
- 好處:
1. 有別於以往web socket,微服務可以提供給需多異質平台使用(ex: App, GUI, 其他server)
2. 彈性應用服務:ex:一站式服務透過網址(API呼叫)整合許多功能
- 非同步整合方案:
- 非同步service
- 非同步DB (ex:R2DBC 非同步DB Driver)
- 非同步client (ajax)
### 結構圖
### 相關技術
1. 前端框架:
- 3大框架:
1. Angular(Google)
2. React (Meta)
3. Vue
- 整合js, html, css
2. 介面:OpenAPI
只要遵守一致介面,不論用什麼語言或技術開發為服務都可以
3. 後端:Micro-Profile:微服務實作標準
- Java:
- Spring REST
- Java EE JAX-RS
- .Net:
- Web API
5. O-R mapping框架:封裝DB操作。
- 最大價值:當系統table複雜時,用O-R mapping取代JDBC操作可以大幅降低錯誤發生機率。(ex: sql參數對錯)
## Spring (Spring Boot) 只能用來開發微服務(Restful API)嗎?
Spring 本身是low level框架,可以開發任何應用。
1. Spring MVC: 開發server-side 動態網頁 (JSP, Themleaf)
2. Spring REST: 提供Restful Web Service
- Hateos
- 相似:
- Jave EE JAX-RS
- .Net WebAPI
3. Spring也可以開發GUI, 排程
## 課程大綱
1. Spring 由來
2. Spring 核心技術
- IoC container
- DI
- AOP
3. 透過DB交互講解template概念
JDBC:都是固定步驟適合用template處理
- Spring and JDBC
- Spring and Transaction
- Spring and Hibernate & JPA
4. 支援MessageDrivenBean (為了取代EJB)
- Spring and JMS
- Spring and Timer
5. Spring and Web Application (Spring MVC)
6. Spring Boot
7. Spring Batch (有時間會教)