---
# System prepended metadata

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

---

###### tags: `大吳上課` `Servlet`
# 0512
##  第一節課
### 不使用cookie的替代方法
透過URL取代cookie傳Session，若無cookie可用的話

### 專題製作不要關閉cookie

### 預習方向
第十章全部
第十一張out、if、foreach
P.225 MVC購物車

購物車使用技術:JDBC、泛型、集合、Servlet

~~Array可以用，但可能會有超出長度的問題~~

<!-- List<ProductVO> -->

List最優

補充Cookie，預設為沒給存活時間的話，關閉瀏覽器即消失

## 第二節課

看SessionTracker.java，Manuallnvalidate.java，SessionSnoop.java

encodeURL可跨平台(透過jsessionid在URL上存取，會直接帶著走)

URL很危險 小心使用(不夠保密)

cookie的方式在關閉以後理論上會抓不回來，但可以透過URL找SessionID 找回

若給URL，就URL優先

若已經有Cookie在執行中，丟其他的URL覆蓋，後面URL的方式會被忽略，因已經有Cookie的在執行中了，不會有繞道的行為


## 第三節課
檢查 Session有幾條在tomcat中，要有getSession才會產生Session的存在，Session為人為物件，若沒產生則不會產生該物件

HttpSession session = req.getSession();

使用者端會靠cookie存，伺服器端會存Session，伺服器關掉後仍存在Session，但要正常shutdown，若強制關閉則可能會消失

## 第四節克
在JDBC的"+"要用"%2b","&">"&amp;"o

mysql的驅動程式8.0.13跟以前版本有很大差別

```
//註: 將來如果theURL註冊於XML檔案內的時候，以下的[&]必須改寫為[&amp;]
	public static final String theURL = 
			  "jdbc:mysql://localhost:3306/db01?serverTimezone=Asia/Taipei"
                                          // 必須設定時區:  [serverTimezone=Asia/Taipei]
	                                           /* 事實上也可用[serverTimezone=GMT+8]  -->  [serverTimezone=GMT%2B8]
	                                            * GMT+8 可以表示台灣或香港時區: 但要注意不可以用[+]號，需要轉用[%2B]代替[+]
	                                            * serverTimezone值的列表: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
	                                           */
  //註: 以下可省略不設定
		  + "&sslMode=PREFERRED"              // SSL注意1.從Connector / J 8.0.13新版開始，"sslMode"的預設值為"PREFERRED"，它等效於的舊版的"useSSL=true&requireSSL=false&verifyServerCertificate=false"
                                          // SSL注意2.新版與Connector / J 8.0.12及更早版本的預設設置有所不同，舊版常看到的是使用useSSL=false以解決客戶端應用程式無SSL的問題 
                                          // SSL注意3.新版如果明確地設置了"sslMode"，則將忽略舊式屬性。如果未明確設置"sslMode"或"useSSL"，則將應用預設設置為"sslMode = PREFERRED" --> 可以查看官方文件connector-j-8.0-en.pdf第32頁

			+ "&rewriteBatchedStatements=true"  // 批次更新需要此資訊

			+ "&allowPublicKeyRetrieval=true"   // 配合MySQL 8以後版本對密碼儲存機制的設定

			+ "&useUnicode=true"                // 可以不用再設定: 參見如下
			+ "&characterEncoding=utf-8"        // 可以不用再設定: 因為mySQL8 預設的編碼已經從[latin1] 改為 [utf8mb4] --> 可以執行 show variables like '%character%'; 查看
      ; 
```

驅動程式匯入三種方式

1. UltraEdit的匯入
2. IDE的匯入
3. 伺服器本身自帶

## 第五節課 

### 解釋連線池

wait();,notify();

優點
1. 提高資料庫效能
2. 解決交易的問題

"&nbsp" 為空白
toString方法在println(xxx)，自動呼叫xxx.

DBPhoneLookup.java 大雜燴 很多技術都在當中使用，
提供給小專案，
位置在C:\Teacher_wu\SL314_Servlet5課程分享\SL314_課程中分享\10B_DataBase (mySQL8●)

補充JDBC在P.168

## 第六節課

兩張表格互相關聯會較難處理在關聯上

1. session
2. 區域變數 
3. try{} catch{}
4. 重複使用
5. 連線池 