.11 四種屬性範圍
.1.1 request
在伺服器內部進行頁面跳轉的時候,可以進行request.setAttribute()進行屬性設值。
伺服器內部跳轉:位址列是不會發生變化的,只在伺服器內部進行jsp/servlet的請求,我們一般用做多層結構中。
request範圍內的變數只在單次的伺服器端頁面跳轉內有效。
<% request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); Student stu = StudentService.getStudentByUsernameAndPwd(username, password); if (null != stu) { request.setAttribute("students", StudentService.getAllStudents()); request.setAttribute("stu", stu); %> <jsp:forward page="success.jsp"/> <% } %> <jsp:forward page="index.jsp"> <jsp:param name="msg" value="賬號或密碼錯誤" /> </jsp:forward> <% } %> |
在success.jsp中獲取request設定的屬性值
<% Student stu1 = (Student)request.getAttribute("stu"); List<Student> students =
(List<Student>) request.getAttribute("students") %> |
.1.2 關於分層設計的概念
在MVC設計模式中的業務處理步驟
(1) 從客戶端獲取頁面引數到指定的伺服器端頁面(jsp),使用request.getParameter();
(2) 使用引數在Service方法中進行業務邏輯的處理,並返回處理結果(一般為JavaBean);
(3) 將處理結果放到頁面級的變數request中,request.setAttribute(“name”,Object);
(4) 通過伺服器端的頁面跳轉(jsp:forward)到相應的檢視層(success.jsp)進行資料的獲取和頁面展現輸出,request.getAttribute(“name”)
.1.3 pageContext
只在當前伺服器頁面中進行資料的儲存和讀取,頁面級別的
<% pageContext.setAttribute("num", 2); // // Integer num = (Integer) pageContext.getAttribute("num"); out.print(num); %> |
.1.4 session
會話級別的變數,我們一般使用Session處理使用者的登入資訊
簡單的理解,開啟一個瀏覽器,無論你開啟多少的便籤頁,session的會話級變數都會存在,除非使用session.removeAttribute()將其顯示的銷燬。
.1.5 application
伺服器級別的變數,只要服務啟動未關閉,該變數就會一直存在,除非顯示的銷燬。
<% Integer num = (Integer) application.getAttribute("num"); if (null == num) { application.setAttribute("num", 1); } else { application.setAttribute("num", num+1); } %> 該頁面被訪問<%=application.getAttribute("num") %>次 |