---
# System prepended metadata

title: '0514'
tags: [Servlet, 大吳上課]

---

###### tags: `大吳上課` `Servlet`
design partern 
    hook and anchor
# 0514
## 小組相關
ER model (Table)完成後

1. 練習SQL create Table指令
2. 整合大家的1.
3. 送假資料
4. 建VO
5. 建DAO interface & DAO.java
6. JDBCDAO
7. (可於專案上線前一週) JNDIDAO


## 第一節課
開啟檔案
eclipse>SL314
1. Test_DataSource.java
2. web.xml
eclipse>Server>Tomcat
3. context.xml
UltraEdit>Tomcat>IBM_9
4. select_page_Basic-mySQL.jsp
5. web.xml
6. conf>context.xml

為何一個DataSource物件可以代表一個資料庫?
    因為該物件能getConnection，此方法只有資料庫才有。 此技術來自於微軟，ODBC的資料來源，該技術只能來自於資料庫的連線。

透過這個DataSourece物件所取得的資料庫連線(Connection)，一定是來自於連線池(Connection Pool)的資料庫連線嗎?
    微軟ODBC一定沒有、過去不一定，現在的伺服器一定都有(時代在變)，DataSource會自行和ConnectionPoolDataSource，現在的伺服器幾乎實作以下三介面一類別達成"一定":
    ConnectionEvent
    ConnectionEventListener
    ConnectionPoolDataSource
    PooledConnection
補充:
JDBC四大類
1. JDBC-ODBC Bridge
    不完全支援JDBC2.0的method(可能會因為資料庫太新，無法匯入至"建立新的資料來源"當中)
    原生碼任何錯誤都會讓Server當掉
    
## 第二節課
Webl應用系統如何使用JNDI命名服務來登記DataSourece的服務
P.180
JNDI為命名服務及取服務所用的(不一定只有資料庫用)
課程中為DataSourece會用

實務上，複製貼上即可

## 第三節課
Context.xml>Server.xml
註冊於Context.xml，可以給所有專案用
Server.xml只針對一個專案
代名詞:
1. WebApp
2. root
3. context.xml
若公司無context.xml功能類型的，則用server.xml

暴力貓的關係，web.xml中甚至不用註冊以下程式碼
```
	  <resource-ref>
		    <description>DB Connection</description>
		    <res-ref-name>jdbc/TestDB</res-ref-name>
		    <res-type>javax.sql.DataSource</res-type>
		    <res-auth>Container</res-auth>
	  </resource-ref>

```
一樣可以開啟網頁，但其他server不行，只有tomcat可以
只需要select_page_Basic_mySql.jsp中的註冊與context.xml中的註冊名稱相同即可。其他伺服器中，會有一個文件檔當作轉接器用，用來連結web.xml再轉至select_page_Basic_mySql.jsp

貓: A>C pass B
其他伺服器: A>B>C B為轉接器
下圖為轉接器檔的程式碼
![](https://i.imgur.com/dQ9yWM4.jpg)

## 第四節課
### 練習改寫資料庫
將DBPhoneLookup.java改寫

將Class.forname等載入改成連線池的做法
```
//		舊的
//      // Load (and therefore register) the JDBC Driver
//      Class.forName("com.mysql.cj.jdbc.Driver");
//
//      // Get a Connection to the database
//      con = DriverManager.getConnection(
//        "jdbc:mysql://localhost:3306/db01?serverTimezone=Asia/Taipei", "root", "24708053");

			//新的
			Context ctx = new javax.naming.InitialContext();
			DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/TestDB2");
			con = ds.getConnection();
```

JDBC練習，在完成專題前可改成JNDI(效能較佳)

## 第五節課
SL314中有GifReader的四個改版，可參考

available僅限用於從硬碟中適用，SQL不適用(將檔案大小直接取得，然後一次IO)

載入路徑時，相關路徑說明P.196

## 第六節課 
單元9
測貓咪