將以往的學習筆記搬到這里來。
Cookie
Cookie是客戶端技術,程序把每個用戶的數據以cookie的形式寫給用戶各自的瀏覽器。當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶着各自的數據去。這樣,web資源處理的就是用戶各自的數據了。
Java中的javax.servlet.http.Cookie類用於創建一個Cookie
Cookie類的主要方法 |
|||
No. |
方法 |
類型 |
描述 |
1 |
構造方法 |
實例化Cookie對象,傳入cooke名稱和cookie的值 |
|
2 |
public String getName() |
普通方法 |
取得Cookie的名字 |
3 |
public String getValue() |
普通方法 |
取得Cookie的值 |
4 |
public void setValue(String newValue) |
普通方法 |
設置Cookie的值 |
5 |
public void setMaxAge(int expiry) |
普通方法 |
設置Cookie的最大保存時間,即cookie的有效期,當服務器給瀏覽器回送一個cookie時,如果在服務器端沒有調用setMaxAge方法設置cookie的有效期,那么cookie的有效期只在一次會話過程中有效,用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然后關閉瀏覽器,整個過程稱之為一次會話,當用戶關閉瀏覽器,會話就結束了,此時cookie就會失效,如果在服務器端使用setMaxAge方法設置了cookie的有效期,比如設置了30分鍾,那么當服務器把cookie發送給瀏覽器時,此時cookie就會在客戶端的硬盤上存儲30分鍾,在30分鍾內,即使瀏覽器關了,cookie依然存在,在30分鍾內,打開瀏覽器訪問服務器時,瀏覽器都會把cookie一起帶上,這樣就可以在服務器端獲取到客戶端瀏覽器傳遞過來的cookie里面的信息了,這就是cookie設置maxAge和不設置maxAge的區別,不設置maxAge,那么cookie就只在一次會話中有效,一旦用戶關閉了瀏覽器,那么cookie就沒有了,那么瀏覽器是怎么做到這一點的呢,我們啟動一個瀏覽器,就相當於啟動一個應用程序,而服務器回送的cookie首先是存在瀏覽器的緩存中的,當瀏覽器關閉時,瀏覽器的緩存自然就沒有了,所以存儲在緩存中的cookie自然就被清掉了,而如果設置了cookie的有效期,那么瀏覽器在關閉時,就會把緩存中的cookie寫到硬盤上存儲起來,這樣cookie就能夠一直存在了。 |
6 |
public int getMaxAge() |
普通方法 |
獲取Cookies的有效期 |
7 |
public void setPath(String uri) |
普通方法 |
設置cookie的有效路徑,比如把cookie的有效路徑設置為"/xdp",那么瀏覽器訪問"xdp"目錄下的web資源時,都會帶上cookie,再比如把cookie的有效路徑設置為"/xdp/gacl",那么瀏覽器只有在訪問"xdp"目錄下的"gacl"這個目錄里面的web資源時才會帶上cookie一起訪問,而當訪問"xdp"目錄下的web資源時,瀏覽器是不帶cookie的 |
8 |
public String getPath() |
普通方法 |
獲取cookie的有效路徑 |
9 |
public void setDomain(String pattern) |
普通方法 |
設置cookie的有效域 |
10 |
public String getDomain() |
普通方法 |
獲取cookie的有效域 |
使用例子:
1.建立一個cookie:
HttpServletRequest request HttpServletResponse response Cookie cookie = new Cookie("name","value"); response.addCookie(cookie);
該cookie為隨着瀏覽器的關閉而消失,如果需要建立一個可以保存的cookie必須要使用setMaxAge(
)方法,此方法可以設置它的生命周期。如:
HttpServletRequest request HttpServletResponse response Cookie cookie = new Cookie("name","value"); cookie.setMaxAge(3600*24*3);//設置其生命周期 response.addCookie(cookie);
2.讀取cookie
HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res =(HttpServletResponse)response; Cookie[] cookies = req.getCookies(); //獲取cookie數組 HttpSession session = req.getSession(); for(Cookie cookie:cookies){//遍歷cookie數組 System.out.println(cookie.getName());//獲取cookie的名字 System.out.println(cookie.getValue()); //獲取cookie的值 }
3.簡單的一個實例
將登錄的帳號密碼存入cookie中。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String phone = request.getParameter("phone"); String password = request.getParameter("password"); String passwordMD5 = PasswordToMd5.getMD5(password);//將password加密 HttpSession session = request.getSession(); DbUtilQuery query = new QueryEmpForLogin(phone, password); ArrayList<Object> result = query.excute(); if(result.size()!=0){ System.out.println("登錄成功"); Employee employee = (Employee) result.get(0); session.setAttribute("employee",employee);//將登錄信息設置到會話 Cookie cookie = new Cookie("phone",phone);//將登錄信息加入cookie中 Cookie cookie1 = new Cookie("password",password); cookie.setMaxAge(60*60*24*3); //設置cookie最大失效時間
cookie1.setMaxAge(60*60*24*3); response.addCookie(cookie);//將cookie返回加入 response.addCookie(cookie1); response.sendRedirect("/Booking/Html/main.html"); }else{ //錯誤了彈出錯誤框 System.out.println("登錄失敗,帳號或者密碼錯誤"); PrintWriter out = response.getWriter();//通過servlet的doget方法獲取response對象,通過getWriter方法獲取PrintWriter對象 out.flush();//清空緩存 out.println("<script>");//輸出script標簽 out.println("alert('登錄失敗,帳號或者密碼錯誤');");//js語句:輸出alert語句 out.println("history.back();");//js語句:輸出網頁回退語句 out.println("</script>");//輸出script結尾標簽 } }