---
# System prepended metadata

title: 緒論
tags: [外訓]

---

# 緒論 
## 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 (有時間會教)