JSP實作資料傳遞和儲存
回顧
搭建Web開發環境
- 伺服器軟體:Tomcat
- log目錄 日志
- webapps目錄 存放web程式 一個個的檔案夾
- work目錄 JSP檔案翻譯成的Java檔案
- 實作靜态網站的部署
- 實作動态網站的部署
初識JSP
- HTML代碼(頁面顯示效果) + Java代碼 = JSP頁面
- JSP中的Java腳本
- 聲明:
<%! %> 可以編寫變量聲明 方法聲明
- 腳本:
<%%> 可以編寫變量聲明 調用方法等
- 表達式:
<%= %> 可以用于向頁面輸出内容 能調用有傳回值的方法和直接輸出一些變量 結尾不能編寫;号
- 聲明:
- JSP的原理
- 第一次通路此頁面時/改動後再次通路
- Tomcat的Jasper元件幫助你将JSP(模闆)翻譯成對應的Java檔案
- 聲明 -> Java類的成員位置内容
- 腳本 -> Java類的_jspService()方法内 局部内容
- 表達式 -> Java類的_jspService()方法内一個輸出語句
out:PrintWriter 可以向浏覽器頁面進行輸出内容out.print()
- HTML代碼也都通過PrintWriter的write()幫你将頁面展示出來
- 對Java檔案進行編譯
- 正常顯示到浏覽器上
JSP内置對象
1. 掌握request和response的使用
1.1 request和response的常用API
request:Java EE用于接收和處理請求資訊的
- 從請求中根據鍵取值:String getParamepter(String name);
- 從請求中根據鍵擷取多個值:String[] getParameterValues(String name);
- 頁面跳轉(請求轉發):RequestDispatcher getRequestDispatcher(String path相對位址);
- void forward(request,response);
- 在請求中攜帶資料:void setAttrbute(String name,Object value); 作用域request可以存儲資訊,但是此資訊隻能保證在同一個請求中有效。是以一般在request作用域中存儲資訊 都會建議使用請求轉發來進行頁面跳轉。
- 在請求中取出攜帶的資料:Object getAttribute(String name);
- 擷取項目的根路徑:String getContextPath();
- 例如:localhost:8080/day51-jsp-2/xxxx.jsp 的項目根路徑是:day51-jsp-2
response:Java EE用于響應用戶端的一個對象
- 頁面跳轉(重定向):void sendRedirect(String path絕對位址<帶有項目根路徑>);
1.2 掌握解決請求中文亂碼問題
GET請求:
- 先解碼再編碼 每個都需要這麼處理
- 編輯server.xml中的配置 将URL編碼更改為UTF-8
- 更新到8.0.0版本以後的Tomcat
POST請求:
- 先解碼再編碼
- request.setCharacterEncoding(“UTF-8”)
1.3 掌握轉發和重定向的差別
相同點:都可以實作頁面跳轉
不同點:
- 請求轉發:它是伺服器内部的資源跳轉,隻能跳轉到伺服器内部的一些頁面(資源)
- 請求位址不改變:例如:登入界面 -> 處理登入的頁面 -> 轉發到其他頁面(登入頁面) 位址還是處理登入的頁面
- 請求轉發是一次請求的多次跳轉
- 重定向:它是可以跳轉到任意的資源位址。 例如你可以用它跳轉到百度網站。
- 位址會改變為對應的跳轉位址。
- 重定向是開啟新的請求,與之前請求無關
聯想借錢案例。
2. 掌握session對象的使用
session也是JSP的内置對象之一,其實它是HttpSession的執行個體。
生命周期: 一次會話是由第一次通路伺服器時,Tomcat配置設定的。隻要沒有完全關閉浏覽器,都是同一個會話。
- 不同浏覽器,會話獨立。
- 預設從無操作起會話有效期為:30分鐘
- 修改全局的web.xml
<!-- ==================== Default Session Configuration ================= --> <!-- You can set the default session timeout (in minutes) for all newly --> <!-- created sessions by modifying the value below. --> <session-config> <session-timeout>30</session-timeout> </session-config>
- 在自己的web.xml中單獨修改此資訊,優先級會比它的高
- 修改全局的web.xml
它表示一次會話,多次請求和響應的過程就是會話。
- void setAttribute(String name,Object obj); 在一次會話中有效存儲資料(會話共享資料) session作用域
- Object getAttribute(String name);
- 每一次會話都會有一個會話id,擷取會話id:String getId();
- 廢棄,銷毀session:void invalidate();
3. 掌握cookie和session的差別
3.1 Cookie的概述
HTTP協定:是用于請求和響應的一種協定,但是它是無狀态的協定。
cookie是浏覽器用于在本地存儲一些網站狀态的。
- 網站打開之後,登入頁面就存儲着登入使用者名
- 本地的搜尋記錄
- 表單資料
常用API:
- 建立Cookie:Cookie(String name,String value);
- 重新設定值:cookie.setValue(String value);
- 擷取鍵名:String getName();
- 擷取值:String getValue();
- 設定有效期:setMaxAge(int seconds); 如果不設定它 cookie是一種會話級的内容,意味着和session一樣關閉就消失了。
- 删除Cookie:可以通過setMaxAge(0) 删除 隻需要到時候将name相同的Cookie設定後再響應回去就會覆寫
- 設定cookie有效路徑:setPath(String path);
- 例如:我們在localhost:8080/smbms/cookie/index.jsp 存儲了一個cookie 預設是在/cookie路徑下的内容可以取到cookie
向浏覽器存儲Cookie:
- response的API:addCookie(Cookie cookie);
從浏覽器取出Cookie:
- request的API:Cookie[] getCookies();
3.2 Cookie和Session的差別
位置不同:
- Cookie是處于浏覽器端
- Session是處于伺服器端
安全性不同:
- Cookie由于在浏覽器端 是以極其容易被竊取,不安全
- Session是處于服務端 是以擷取等不容易 相對比較安全
生命周期不同:
- Session是從用戶端第一次請求開始,由伺服器配置設定,當浏覽器完全關閉或者無操作逾時則銷毀
- Cookie是由伺服器端響應回來之後才開始生效,預設是會話級的Cookie,但是也可以設定為持久級。
存儲值不同:
- Session可以存儲Object類型
- Cookie隻能存儲String類型
Session實際上就是通過Cookie而産生的一種技術,HTTP是無狀态協定,無法儲存網站和用戶端之間的聯系,是以我們用戶端第一次請求伺服器時,伺服器就會根據用戶端産生一個唯一的session id,并且将其通過cookie的形式緩存到用戶端。當下次請求時,用戶端會自動将cookie通過請求頭傳遞給伺服器,伺服器識别到此資訊之後找到對應的session内容然後進行其他操作。
4. 掌握application對象的使用
四大作用域:用于在JSP中共享資料
- page作用域
- 僅在目前頁面有效 this
- request作用域
- 一次請求内,同一個request
- session作用域
- 一次會話内,同一個session
- application作用域
- 全局,伺服器開啟産生 伺服器關閉銷毀
注:筆記思路來自查老師!!