作用域:顧名思義就是其作用的範圍 在程序中就是一段程序代碼中所用到的名字並不總是有效/可用的,而限定這個名字的可用性的代碼範圍就是這個名字的作用域。(百度的)
那麼在jsp中就有四大作用域
1.application作用域(serveltContext)
其作用範圍就是在整個Web程序中使用 屬於大家共享的(現在還沒怎麼接觸過 暫時放着)
2.session域
session是一次會話 這說明在一次會話中共享其數據(當我們向服務器發送第一個請求開始,只要頁面不關閉,或者會話未過期(默認30分鐘),或者未調用HttpSession的invalidate()方法,接下來的操作都屬於同一次會話的範疇。)
應用舉例:在用戶登錄一個系統後 獲取用戶的用戶名
1.我們需要獲取一個session會話對象(session和cookie的最明顯的區別是session是存放在服務器上的 cookie是存放在客戶端的 )
HttpSession session = request.getSession();
2.假設用戶登錄了此係統並且成功登錄了 那麼用戶的一些信息例如他的用戶名 身份 等一些信息我們可能還需要在其他頁面使用 那麼就將他的數據存放在session作用域中(session.setAttribute("user", user);) 我們當在其他頁面時再去獲取相應的數據內容。
// 獲得用戶的姓名 密碼
String ID = request.getParameter("ID");
String password = request.getParameter("password");
// 將用戶名和密碼傳到service層
UserService service = new UserService();
User user = service.login(ID, password);
// 判斷用戶是否成功的登陸
if (user != null) {
// 用戶登錄成功 重點看這裏!!!!
session.setAttribute("user", user);
// 獲得登錄者的身份
int status = user.getStatus();
if (status == 0) {
// 定書者身份
// 重定向到登錄成功頁面
try {
response.sendRedirect(request.getContextPath() + "/admin/Buyer.jsp");
} catch (IOException e) {
e.printStackTrace();
}
3.當我們將數據存放在session域中的時候就可以在這個會話範疇內使用相應的數據了。例如:我們在用戶登錄了系統進入首頁後需要獲取用戶的用戶名就可以直接使用(頁面爲top.jsp):
用戶名:<font color="blue">${user.name }</font>
(這是個人對session域的理解。)
3.request域(一次客戶端請求:從客戶端發起到服務器接收並響應該請求,或者將該請求forward到另一個頁面或者Servlet進行處理而結束。這裏可以看這個一起輔助理解https://blog.csdn.net/fulishafulisha/article/details/84949677)
其實用法和上面session的用法差不多 差別就是作用域的範圍
4.page域
就是在這一個頁面使用 這個就比較簡單!
我個人覺得使用比較多的是session域和request域 在什麼使用什麼域最主要的是看實際情況來決定。