---
# System prepended metadata

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

---

# 0502
## 第一節課
### ServerSocket=嬤嬤桑 Socket小姐
埠號與session
### 黑板的資訊
#### ServletContext P.98 大
介面
ServletContext context = getServletContext();
註:context = appliation(JSP)
#### Session P.158 中
介面
HttoSession session = req.getSession;
註:session = session(JSP)
### ServletContext>session>request>page
## 第二節課
### ServletContext&session_Set/Get
測行為
session與ServletContext為不同層，同樣的key不會覆蓋其value

Context不同瀏覽器(無痕視為不同瀏覽器)可以共同使用，但session不行(會有不同ID)，需重新Set Key/Value

session預設為無新Request請求狀況(兩個Request之間)，暫存30分鐘

session.getID()為很大很大，大到不可能重複的隨機亂數，避免重複ID

req.getSession(false){預設為true}若為一開始的狀況下，會因為沒有session而產生500錯誤訊息
PS:若有要抓取session且進行運算，若抓到空值也會產生500

req.getSession()會沿用舊有的session，若無則創建一個，讓後面req繼續沿用(30分內且同一瀏覽器)

**結論:session只存在當前瀏覽器(關閉或30分沒動作即消失)，context則儲存在伺服器中**

## 第三節課
### 銜接下午課程(取得client端的資訊)
HTTPS驗證身分(HTTPS身分{BASIC,DIGEST}，表單式{FORM})
保密四項任務中，資料的保密性及完整性透過以上兩種驗證方法會無法達成，只能達成登入及權限

## 第四節課
### 驗證_安全性
P.296&298測試 
登入、權限、保密性、完整性

HTTP身分驗證
method中GET,POST通常一起註冊
role-name在web.xml中註冊
login-config為判斷何種驗證
安全性差(編碼用Base64、MD5)

表單式驗證
跟HTTP身分證驗證差不多
只是較為美觀
安全性更差(編碼只能用Base64)

登入及權限皆有達成，但無法有保密性及完整性

專題使用SSL(P.301~304)
四個任務都能完成

manager-gui註冊位置在manager資料夾當中(對專案影響不大)

## 第五節課
### client抓值相關練習
P.106使用各類型box因注意事項，詳見課本
Radio,CheckBox無選擇則為null
其餘為"空字串"或不需驗證

資料庫的值在前端需要有個欄位對應
方便對於資料庫新刪修改
ER Model>EmpVO>前端操作

從client端抓值的話
getParamter抓單個值
getParamterValues抓複數值

抓值練習
檔案:form.html & Hello.java

文字輸入區若無值會產生空字串(EX:?name1=&name2=peter2)
name1=""(空字串)
Checkbox若沒選值，則不會送出，radio亦同

測試用get比較容易觀察值的變化，post則不會顯示在網址上

中文編碼須統一才能重複執行
ParameterSnoop檔案中 接收為big5，傳出去為UTF-8造成亂碼

from ParameterSnoop.java
res.setContentType("text/plain; charset=Big5"); 十六行
req.setCharacterEncoding("UTF-8"); 二十三行

from form.html
"<META 我是空白 http-equiv="Content-Type" content="text/html; charset=BIG5">" 第四行


## 第六節課
### String
介紹tomcat 8以前，中文處理較為麻煩
詳見Servlet5>課程中分享>05>HelloGet.java

### 補充
P.91有作業可練習(排程練習)

### 取得路徑資訊
可透過網址後增加/xxx.txt來增加額外路徑資訊

P.109
  getContextPath,getServletPath,getPathInfo組成網址

getScheme,getServerName,getServerPort可忽略，因為會自動增加 參考P.196

getPathTranslated跟下載相關，getRealPath跟上傳相關

預習301~303
介紹登入系統account，詳見課本

## 第七節課
### 動態生成
form.html,Hello.java需動態產生位置

避免使用..，可能造成後面問題

`out.println("<br><img src=\""+req.getContextPath()+"/images/tomcat.gif\">");
 out.println("<br><img src=\""+      "/IBM_9"      +"/images/tomcat.gif\">");
    out.println("<br><img src=\"/IBM_9/images/tomcat.gif\">");`
第一個為最佳解
二三路徑寫死可能會造成問題，專案名稱修改則無法使用

###### tags: `大吳上課` `Servlet`