Cookie和Session:html
會話技術:web
一、會話:一次會話中包含屢次請求和響應。瀏覽器
* 一次會話:瀏覽器第一次給服務器發送請求,會話創建,直到一方斷開爲止。tomcat
二、功能:在一次會話的範圍內的屢次請求間,可共享數據。服務器
三、方式:cookie
一、客戶端會話技術:Cookiesession
二、服務器端會話技術:Session學習
Cookie:this
一、概念:客戶端會話技術,將數據保存到客戶端。編碼
二、快速入門:
使用步驟:
一、建立Cookie對象,綁定數據。new Cookie(String name, String value)
二、發送Cookie對象。 response.addCookie(Cookie cookie)
三、獲取Cookie,拿到數據。Cookie[ ] request.getCookie()
三、實現原理:基於響應頭的set-Cookie 和請求頭的 Cookie 實現。
四、Cookie的細節:
一、一次能夠發送多個cookie。
二、cookie在瀏覽器保存的時間。
* 默認狀況下,當瀏覽器關閉後,cookie數據被銷燬。
* 持久化存儲:setMaxAge(int second)
second取值:
一、正數:將cookie數據寫入硬盤的文件中。second表明存活秒數。
二、負數:默認值。
三、零:刪除cookie信息。
三、cookie能不能存中文。tomcat8以後,cookie支持中文數據。
四、cookie共享問題:
一、一個tomcat中,部署了多個web項目,Cookie可否在項目中共享?
* 默認狀況下cookie不能共享。
* setPath(「/」)後,可共享。
二、不一樣tomcat服務器之間cookie共享問題。
*setDomain(String path)若是設置一級域名相同,那麼多個服務器之間可共享。
setDomain(「.baidu.com"),那麼tieba.baidu.com 和 news.baidu.com 可共享coolie
四、Cookie的特色和做用。
一、cookie存在瀏覽器中。
二、瀏覽器對單個cookie有大小限制,對同一域名的總cookie數有個數限制。
三、做用:存儲少了不太敏感的數據。通常用於不登陸的狀況下,完成服務器對客戶端的身份識別。
Cookie案例:
需求:一、訪問一個Servlet,若是第一次訪問,提示:您好,歡迎首次訪問。
二、若是不是第一次訪問,提示:歡迎回來,上次訪問的時間是.....
遇到的問題:雖然tomcat8以後cookie支持中文,但不支持特殊字符(空格等)須要
用URL編碼:URLEncoder.encode( )
@WebServlet("/Test") public class Test extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); Cookie[] cookies = request.getCookies(); boolean flag=false; if (cookies!=null&&cookies.length>0){ for (Cookie cookie : cookies) { String cookieName = cookie.getName(); if ("lasttime".equals(cookieName)){ flag=true; String cookieValue = cookie.getValue(); cookieValue= URLDecoder.decode(cookieValue,"utf-8"); response.getWriter().write("歡迎回來,上次訪問的時間是"+cookieValue); Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String str_date=sdf.format(date); str_date= URLEncoder.encode(str_date,"utf-8"); cookie.setValue(str_date); cookie.setMaxAge(60*60); response.addCookie(cookie); } break; } } if (cookies==null||cookies.length==0||flag==false){ response.getWriter().write("歡迎首次訪問"); Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String str_date=sdf.format(date); str_date= URLEncoder.encode(str_date,"utf-8"); Cookie cookie=new Cookie("lasttime",str_date); cookie.setMaxAge(60*60); response.addCookie(cookie); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
JSP入門學習:
一、概念:JSP,Java server pages :Java服務器端頁面。
* 能夠理解爲:一個特殊的頁面,其中能夠定義html標籤和Java代碼。
* 用於簡化書寫。
二、原理:JSP本質上就是一個Servlet。
三、JSP的腳本:JSP定義Java代碼的方式。
一、<% 代碼 %>:定義的Java代碼,在service方法中。
二、<%! 代碼 %> :定義的Java代碼,在類的成員位置。
三、<%= 代碼 %> :定義的Java代碼,做爲輸出內容,會輸出到頁面。
四、JSP的內置對象。
* out:字符輸出流對象,能夠將數據輸出到頁面上。
* out.Writer() 和 response.getWriter() 區別:tomcat在給客戶端響應前,會先在getWriter()緩衝區中找數據,因此後者輸出的位置永遠在前者的前面。
Session:
一、概念:服務器端會話技術,在一次會話的屢次請求之間共享數據,將數據保存在服務器端的HttpSeiion對象中。
二、快速入門:
一、獲取HttpSession對象:HttpSesion session=request.getSession();
二、使用HttpSession對象:getAttribute() setAttribute(String name ,String value)
三、原理:Session的實現是依賴於Cookie的。
四、Session的細節。
一、客戶端關閉後,服務器不關閉,兩次獲取的Session是否爲同一個?
* 默認狀況下不是(客戶端關閉意味着本此會話結束)
* 若是須要相同,能夠手動建立關於Session的Cookie,並持久存儲。
Cookie c=new Cookie("JSESSIONID",session.getId());
二、客戶端不關閉,服務器關閉後,兩次獲取的session是同一個嗎?
* 不是同一個。
* 但爲了保證數據不丟失須要:
一、Session的鈍化:在服務器正常關閉以前,將session對象序列化到硬盤。
二、Session的活化:服務器啓動後,將session文件反序列化爲session對象。
* tomcat8中,自動完成鈍化和活化。
三、session何時被銷燬。
*服務器被關閉。
* invalidate()方法。
* session默認失效時間爲30分鐘,能夠在tomcat的配置文件中自定義設置。
四、Session的特色。
*session用於存儲一次會話的屢次請求的數據,存在服務器端。
* session能夠存任意類型,任意大小的數據。