【javaweb】基礎之cookie

前言

關於這些知識,在2018年上半年都已經學完了,但是一直沒有整理,今天我就把這些東西都整理下來,供大家學習交流。


cookie

1. 什麼是cookie
Cookie是由服務器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器(前提是瀏覽器設置爲啓用cookie)。Cookie名稱和值可以由服務器端開發自己定義,對於JSP而言也可以直接寫入JSESSIONID用於標記一個會話(session),這樣服務器可以知道該用戶是否合法用戶以及是否需要重新登錄等,服務器可以設置或讀取Cookies中包含信息,藉此維護用戶跟服務器會話中的狀態。


2. cookie的屬性
name:必須

value:必須的

comment:可選的。註釋

path: 可選的,如果不設置路徑,那麼只有設置該cookie的URI及其子路徑可以訪問(一般設置爲"/")

寫Cookie的程序的訪問路徑是:http://localhost:8080/JavaWeb/servlet/CookieDemo

其中:localhost就是域名;/JavaWeb/servlet就是當前Cookie的path

若訪問的地址的URI包含着cookie的路徑,即URI.startWith(cookie的路徑),爲true,則客戶端將該cookie帶給服務器。

比如瀏覽器存的cookie的路徑是/JavaWeb
      現在訪問的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo 則帶該cookie
      現在訪問的地址是:http://localhost:8080/JavaWeb/CookieDemo 則帶該cookie

若瀏覽器存的cookie的路徑是/JavaWeb/servlet/
      訪問的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo 則帶該cookie
      訪問的地址是:http://localhost:8080/JavaWeb/CookieDemo 則不帶該cookie

如果一個cookie的路徑設置成了/JavaWeb,意味着瀏覽器訪問當前應用下的所有資源時都會帶着該cookie給服務器。

domain:可選的。該Cookie所屬的網站域名。(apache.org)默認值。

maximum age:可選的。不設置就是會話過程(存在瀏覽器的內存中)。單位是秒
          如果是0,說明要刪除。

version:可選的。


代碼1:
設置cookie

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Cookie cookie=new Cookie("name","Tom");
        //設置Maximum Age
        cookie.setMaxAge(1000);
        //設置cookie路徑爲當前項目路徑
        cookie.setPath(request.getContextPath());
        //添加cookie
        response.addCookie(cookie);
    }

獲取cookie

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        Cookie[] cookies=request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String name=cookie.getName();
                String value=cookie.getValue();
                out.write(name+"="+value);
            }
        }
    }

代碼2:

//        cookie,裏面設置的是用戶名
        Cookie cookie = new Cookie("username", username);
        /**
         * 這個設置是幹什麼的呢
         */
        cookie.setPath("/");//這個方法代表可以在本應用下共享cookie
2,獲取cookie的時候要在jsp界面上獲取。
在jsp登錄界面:
<%
    String name = "";
    Cookie[] cookies = request.getCookies();
    for (int i = 0; cookies != null && i < cookies.length; i++) {
        if ("username".equals(cookies[i].getName()))
            name = cookies[i].getValue();
    }
%>

jsp

在界面獲取的時候要這樣獲取:
用戶名: <input type="text" name="username" value="<%=name%>"><br>

注意:

在剛開始寫的時候,發現頁面沒有顯示,以爲是沒有跳轉成功,最後發現是setattribute的那個參數搞反了。
在使用cookie的時候,想直接在服務器上寫,最後發現要跳轉到另一個界面,在login界面就不能夠獲取到值了。
在使用cookie獲取值得時候,也發現了cookie的值不對應的問題,最後發現需要判斷,詳情見代碼。
在idea中創建web工程的時候,剛開始沒有發現新建servlet的文件,最後在下面找到了。裏面有類名,要放在哪個目錄下,最後要配置一下web.xml中的map。
在servlet自動生成的doget和dopost方法中,需要在dopost方法中添加,this.doget(request,reponse);


不能擊敗你的,會使你更強大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章