JavaWeb11-HTML篇筆記(一)
阿新 • • 發佈:2018-05-23
Java第11章WEB11-Cookie&Session篇
1.1 上次課內容回顧:
1.1 上次課內容回顧:
Response * 通過response設置狀態碼:setStatus(int status); * 通過response設置響應頭:setHeader(String name,String value);,setIntHeader(String name,int value),setDateHeader(String name,long date); * 通過response設置響應體:getOutputStream(),getWriter(); * response的其他的API: * sendRedirect(String path); * response輸出中文的亂碼問題: * 字節流輸出中文: * 設置瀏覽器的字符集編碼. response.setHeader(“Content-Type”,”text/html;charset=UTF-8”); * 設置輸出內容的字節數組的字符集編碼. “”.getBytes(“UTF-8”); * 字符流輸出中文: * 設置瀏覽器字符集編碼. response.setHeader(“Content-Type”,”text/html;charset=UTF-8”); * 設置response的緩沖區的編碼. response.setCharacterEncoding(“UTF-8”); * response完成了文件下載功能: Request * 使用request獲得客戶機的信息. getRemoteAddr(),getMethod(),getRequestURI(),getRequestURL() * 獲得請求參數:getParameter(),getParameterValues(),getParameterMap() * 作為域對象存取數據:setAttribute(),getAttribute(),removeAttribute(); * 接收參數的中文亂碼的處理: * GET :new String(“”.getBytes(“ISO-8859-1”),”UTF-8”) * POST :request.setCharacterEncoding(“UTF-8”); * request何時創建和銷毀的? * 創建:從客戶端向服務器發送請求.那麽服務器創建一個request對象. * 銷毀:服務器為這次請求作出了響應之後,服務器就會銷毀request對象. * 作用範圍:一次請求. * 轉發和重定向區別? * 轉發是一次請求一次響應,重定向兩次請求和兩次響應. * 轉發地址欄不變,重定向會變化. * 轉發的路徑不需要加工程名,重定向需要加工程名. * 轉發只能在本網站內部,重定向可以定向到任何網站.
1.2 案例一:記錄用戶的上次登陸訪問時間.1.2.1 需求:
用戶登錄完成後,顯示您是第x位訪問的用戶,您的上次訪問時間是:yyyy-MM-dd.
* 如果第一次訪問的話,只顯示您是第x位用戶.
* 如果不是第一次訪問的話,顯示您是第x位訪問的用戶,您的上次訪問時間是:yyyy-MM-dd.
1.2.2 分析:1.2.2.1 技術分析:
【會話技術】
? 什麽是會話 :用戶打開一個瀏覽器訪問頁面,訪問網站的很多頁面,訪問完成後將瀏覽器關閉的過程稱為是一次會話. ? 常見的會話技術: * Cookie :將數據保存到客戶端瀏覽器. * Session :將數據保存到服務器端. ? 為什麽使用會話技術? * 私有的數據,購物信息數據保存在會話技術中. 參見圖一和圖二
? 使用會話技術:
【Cookie技術的使用】
? 向瀏覽器保存數據:
HttpServletResponse有一個方法:
* void addCookie(Cookie cookie);
? 獲得瀏覽器帶過來的Cookie:
HttpServletRequest有一個方法:
* Cookie[] getCookies();
? 創建一個Cookie對象:
* Cookie(String name,String value);
【JSP的簡單概述】
? 什麽是JSP :Java Server Pages(Java服務器端頁面).JSP = Java代碼 + HTML的元素 + JSP內置東西 ? SUN公司為什麽推出JSP動態網頁開發技術: * SUN公司推出的Servlet技術進行動態網頁開發.發現Servlet自身有不足沒有辦法與ASP,PHP技術競爭.想在動態網頁中輸出表單.在Servlet中獲得PrintWriter out = response.getWriter(); * out.println(“<form action=’’ method=’’>”); * out.println(“</form>”); * SUN又推出了動態的網頁開發技術就是JSP. ? JSP的執行過程: * JSP會被翻譯成Servlet,編譯成class進行執行的. ? JSP的嵌入Java代碼:JSP的腳本元素 * <%! %> :翻譯成類中的成員部分. 定義變量,定義方法,定義類.Servlet是線程不安全的,盡量少在類中定義成員屬性!! * <% %> :翻譯成類的service方法內部的內容. 定義變量,定義類,直接寫代碼塊. * <%= %> :翻譯成service方法內部的out.print();
1.2.2.2 步驟分析:
【步驟一】:準備登陸的案例.
【步驟二】:在統計人數的Servlet中.判斷是否是第一次訪問.
【步驟三】:根據是否是第一次顯示不同的信息,同時將當前的時候保存到Cookie中.
1.2.3 代碼實現
public class CountServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
Integer count = (Integer) this.getServletContext().getAttribute("count");
// response.getWriter().println("<h1>現在網站被訪問的次數為:"+count+"</h1>");
/**
* 獲得瀏覽器中帶過來的所有的Cookie信息,從數組中查找有沒有指定名稱的Cookie
* 判斷用戶是否是第一次訪問:(從數組中沒有找到指定名稱的Cookie)
* * 如果是第一次:顯示歡迎,記錄當前訪問的時間存入到Cookie中.
* * 如果不是第一次:顯示歡迎,上一次訪問時間,同時記錄當前訪問的時間存入到Cookie中。
*/
// 獲得瀏覽器帶過來的所有的Cookie:
Cookie[] cookies = request.getCookies();
// 從數組中查找指定名稱的Cookie:
Cookie cookie = CookieUtils.findCookie(cookies, "lastVisit");
// 判斷是否是第一次:
if(cookie == null){
// 第一次訪問
response.getWriter().println("您是第"+count+"位訪客!");
}else{
// 不是第一次
Long l = Long.parseLong(cookie.getValue());
Date d = new Date(l);
response.getWriter().println("您是第"+count+"位訪客! 上次訪問時間是:"+d.toLocaleString());
}
// 創建一個Cookie對象:
Cookie c = new Cookie("lastVisit",""+System.currentTimeMillis());
// 保存到瀏覽器端:
response.addCookie(c);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1.2.4 總結:1.2.4.1 Cookie的常用API:
? Cookie的常用的API:
* getName();
* getValue();
* setDomain(String domain); -- 設置Cookie的有效域名. // [url]www.baidu.com[/url] music.baidu.com
* setPath(String path); -- 設置Cookie的有效路徑.
* setMaxAge(int maxAge); -- 設置Cookie的有效時間.
? Cookie的分類有關:
* 會話級別的Cookie:默認的Cookie.關閉瀏覽器Cookie就會銷毀.
* 持久級別的Cookie:可以設置Cookie的有效時間.那麽關閉瀏覽器Cookie還會存在. 手動銷毀持久性Cookie. setMaxAge(0)---前提是有效路徑必須一致.
JavaWeb11-HTML篇筆記(一)