# 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`