回顧及作業點評:
(1)jsp如何處理客戶端的請求?
使用response對象處理響應
(2)請描述轉發與重定向有何區別?
轉發是在服務器端發揮作用,通過forward方法將提交信息在多個頁面間進行傳遞。客戶端瀏覽器的地址欄不會顯示出轉向后的地址
重定向是在客戶端發揮作用,通過請求新的地址實現頁面轉向,在地址欄中可以顯示轉向后的地址
(3)JSP如何實現數據庫訪問?
使用JDBC訪問數據庫
預習檢查:(1)除了request對象和response對象,JSP還包括哪些內置對象?1、Cookie 2、session是JSP內置對象 3、application對象(2)Cookie的作用?1、對特定對象的追蹤 2、統計網頁瀏覽次數 3、簡化登錄(3)請說明session對象與application對象的區別?在一次會話范圍內容有效,在會話期間與session綁定的對象皆屬于該范圍在一個應用服務器范圍內有效,當應用服務啟動后即創建該對象,并向所有用戶所共享
本章目標
掌握Cookie的原理及應用
掌握session的原理及應用
掌握application的原理及應用
本章任務
一、使用Cookie實現保存已訪問的信息
(1)什么是Cookie?
Cookie是Web服務器保存在客戶端的一系列文本信息
Cookie的作用
對特定對象的追蹤
統計網頁瀏覽次數
簡化登錄
安全性能 容易信息泄露
(2)Cookie的語法
第一步:導入包import="javax.servlet.http.Cookie"第二步:創建CookieCookie newCookie=new Cookie("parameter", "value");parameter:用于代表cookie的名稱(key)value:用于表示當前key名稱所對應的值第三步:寫入Cookieresponse.addCookie(newCookie)(3)設置Cookie屬性的常用方法
類型 方法名稱 說 明void setMaxAge(int expiry) 設置Cookie的有效期,以秒為單位void setValue(String value) 在Cookie創建后,對Cookie進行賦值 String getName() 獲取Cookie的名稱String getValue() 獲取Cookie的值String getMaxAge() 獲取Cookie的有效時間,以秒為單位
案例:------從登錄驗證頁面表單中獲取用戶名------<% String username=reqeust.getParameter("username");//以key/value的形式創建Cookie創建Cookie,使用response的addCookie方法保存CookieCookie uname=new Cookie("uname", username); response.addCookie(uname);... ...%>-----在顯示頁面顯示用戶名---------------<%//獲取請求中的Cookie,以數組方式保存使用reqeust獲取Cookie數組,通過cookie的名稱獲取對應的內容 Cookie cookies[ ]=request.getCookies(); //循環遍歷數組,得到key=uname的Cookie for(int i=0;i<cookies.length;i++){ Cookie ucookie=cookies[i]; if(ucookie.getName().equals("uname”));//判斷Cookie的名稱 %> 歡迎你:<%=ucookie.getValue() %>//獲取key對應的value,輸出顯示 <% } %>二、使用session對象實現頁面訪問控制
(1)如圖:

(2)什么是會話?一個會話就是瀏覽器與服務器之間的一次通話,包含瀏覽器與服務器之間的多次請求、響應過程
(3)JSP內置對象session

(4)session與窗口的關系一個session對應一個窗口,那么通過超鏈接打開的窗口是否也是新的session呢?答案:不是每個session對象都與瀏覽器一一對應 重新開啟一個瀏覽器,相當于重新創建一個session對象重新開啟一個IE窗口,直接訪問系統首頁面通過超鏈接打開的新窗口,新窗口的session與其父窗口的session相同
(5)使用session實現訪問控制

在控制頁面獲取用戶請求的登錄信息進行驗證------登錄處理頁面的代碼片斷------<%if (rs.next()) { //如果是已注冊用戶在session中存放用戶登錄信息session.setAttribute("LOGINED_USER", loginedUser);response.sendRedirect("index.jsp");} else {response.sendRedirect("login.html");}%>--如果session中不存在該用戶的登錄信息,轉入登錄頁面--<%User user = (User) session.getAttribute("LOGINED_USER");if (user == null) {response.sendRedirect("login.jsp");}%>(6)include指令除了首頁面,其它頁面中同樣需要加入登錄驗證, 有沒有辦法避免冗余代碼的出現?可以將一些共性的內容寫入一個單獨的文件中,然后通過include指令引用該文件,從而降低代碼的冗余問題,也便于修改共性內容
案例:創建登錄驗證文件 loginControl.jsp<%@ page import="org.jbit.bean.User"%><%User user = (User) session.getAttribute("LOGINED_USER");if (user == null) {response.sendRedirect("login.html");}%>在后臺首頁面中使用include指令引用登錄驗證文件<%@ include file="loginControl.jsp" %>(7)Cookie與session的比較session是在服務器端保存用戶信息,Cookie是在客戶端保存用戶信息session中保存的是對象,Cookie保存的是字符串session隨會話結束而關閉,Cookie可以長期保存在客戶端Cookie通常用于保存不重要的用戶信息,重要的信息使用session保存
三、使用application對象實現統計在線人數
(1)JSP內置對象application
application類似于系統的“全局變量”,用于實現用戶之間的數據共享 application對象的常用方法:
void setAttribute(String key, Object value):以鍵/值的方式,將一個對象的值存放到application中 application.setAttribute("LOGINED_USER", new ArrayList());
Object getAttribute(String key):根據鍵去獲取application中存放對象的值
if (application.getAttribute("LOGINED_USER") != null) { List loginedUsers = (List) application.getAttribute("LOGINED_USER"); }
(2)application對象

(3)實現訪問人數統計2-1
創建登錄處理頁面------登錄處理頁面代碼片斷------if (rs.next()) {User logineduser = new User(name, pass);session.setAttribute("LOGINED_USER", logineduser);List loginedUsers = new ArrayList(); //訪問者列表if (application.getAttribute("LOGINED_USER") != null) loginedUsers = (List) application.getAttribute("LOGINED_USER");loginedUsers.add(logineduser); //把新登錄用戶的信息存入訪問者列表中application.setAttribute("LOGINED_USER", loginedUsers);response.sendRedirect("index.jsp");}創建已訪問人數統計頁面------已訪問人數統計頁面代碼片斷------<% List loginedUsers = new ArrayList(); //訪問者列表if (application.getAttribute("LOGINED_USER") != null) loginedUsers = (List) application.getAttribute("LOGINED_USER"); %>目前,有<%=loginedUsers.size()%>人已經訪問過本網站!<br><br>(4)JSP內置對象的范圍

新聞熱點
疑難解答