1. 程式人生 > >JavaWeb11-HTML篇筆記(一)

JavaWeb11-HTML篇筆記(一)

Java

第11章WEB11-Cookie&Session篇
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篇筆記(一)