Servlet學習總結(3)

2021-09-26 08:12:49 字數 4110 閱讀 3192

將瀏覽器與web伺服器之間多次互動當做乙個整體來處理,並且將

多次互動所涉及的資料(即狀態)儲存下來。

方式一: 將狀態儲存在瀏覽器端(使用cookie)。

方式二: 將狀態儲存在伺服器端(使用session)。

伺服器臨時存放在瀏覽器端的少量資料,用於存放使用者的狀態。

注:

當瀏覽器第一次訪問伺服器時,伺服器會將少量資料以

set-cookie訊息頭的形式傳送給瀏覽器,瀏覽器會將這些

資料儲存下來。

當瀏覽器再次訪問伺服器,會將這些資料以cookie訊息頭的

形式傳送給伺服器。

cookie c = new cookie(string name,string value);

response.addcookie(c);

注: cookie只能存放字串。

cookie都有乙個名字,值是乙個字串。

cookie request.getcookies();

注: 該方法有可能返回值為null。

string cookie.getname();

string cookie.getvalue();

預設情況下,瀏覽器會將cookie存放到記憶體裡面,瀏覽器關閉,則

cookie會被刪除。

cookie.setmaxage(int seconds);

注: 單位是秒。

比如儲存乙個月 30 * 24 * 60 * 60

seconds > 0時:

瀏覽器會將cookie儲存在硬碟上(一般是乙個小的檔案),

超過指定時間,瀏覽器會將cookie刪除。

seconds < 0時:

預設值(瀏覽器會將cookie存放到記憶體裡面)。

seconds = 0時:

瀏覽器會刪除該cookie。

比如,要刪除乙個名稱為username的cookie:

cookie c = new cookie("username","");

c.setmaxage(0);

response.addcookie(c);

cookie只能存放合法的ascii字元,如果要存放中文,需要將中文轉換成

對應的ascii字元的形式(即編碼)。

string urlencoder.encode(string str,string charset);

string urldecoder.decode(string str,string charset);

建議,在新增cookie時,統一編碼處理。

a.什麼是cookie的路徑問題?

瀏覽器在向伺服器發請求時,會比較請求位址是否符合cookie的

路徑,只有符合條件的cookie才會傳送給伺服器。

b.cookie的預設路徑

等於新增該cookie的web元件的路徑。比如,/day06/biz01/addcookie.jsp,則該jsp新增的cookie,則該cookie的路徑就是

"/day06/biz01"。

c.匹配規則

請求位址要麼等於cookie的路徑,要麼是其子路徑,符合該要求的

cookie會被傳送。

比如,cookie的路徑是"/day06/biz01",則

"/day06/findcookie1.jsp" no

"/day06/biz01/findcookie2.jsp" yes

"/day06/biz01/sub/findcookie3.jsp" yes

d.修改cookie的路徑

cookie.setpath(string path);
a.cookie可以被使用者禁止。

b.cookie不安全。

cookie是一種客戶端的狀態管理技術,資料都儲存在瀏覽器端,

所以,對於敏感資料,一定要加密處理。

c.cookie只能儲存少量資料。

大約是4k左右。
d.cookie的數量也有限制。

大約是幾百個。
e.cookie只能存放字串。

伺服器端為了儲存使用者的狀態而建立的乙個特殊的物件。

注:

當瀏覽器第一次訪問伺服器時,伺服器建立乙個特殊的物件

(該物件一般稱之為session物件,session物件有乙個唯一的

id,一般稱之為sessionid)。伺服器會將sessionid以cookie

的方式傳送給瀏覽器。

當瀏覽器再次訪問伺服器時,會將sessionid會送過來,伺服器

可以依據sessionid找到對應的session物件。

httpsession session = request.getsession(boolean flag)

注:

httpsession是乙個介面。

當flag為true時:

先檢視請求當中是否有sessionid,如果沒有,則建立乙個

session物件。如果有,則依據sessionid查詢對應的session

物件,找到了則返回該物件,找不到,則建立乙個新的session物件。

當flag為false時:

先檢視請求當中是否有sessionid,如果沒有,返回null。

如果有,則依據sessionid查詢對應的session

物件,找到了則返回該物件,找不到,返回null。

httpsession session = request.getsession();

注:

等價於request.getsession(true);

//綁訂資料

session.setattribute(string name,object obj);

//依據綁訂名,獲得綁訂值,如果綁訂值不存在,返回null

object session.getattribute(string name);

//解除綁訂

session.removeattribute(string name);

什麼是session超時?

伺服器會將空閒時間過長的session物件刪除掉。

目的是為了節省記憶體空間。

注: 大部分伺服器預設的超時時間限制是30分鐘。

如何修改超時時間?

方式一 修改伺服器的配置檔案(web.xml)

30方式二 session.setmaxinactiveinterval(int seconds);

注: 該方法用於設定兩次請求之間的最大間隔時間,如果超過這個時間,session物件會被銷毀。

session.invalidate()

step1. 登入成功以後,在session物件上綁訂一些資料。比如:

session.setattribute("user",user);
step2. 當使用者訪問需要保護的資源時(即只有登入之後的使用者才能訪問的

資源),進行session驗證:

object obj = session.getattribute("user");

if(obj == null)

session支援更豐富的資料型別(cookie只能存放字串)、更安全、

可以存放更多的資料(cookie只能存放少量的資料)。

但是,session是將狀態儲存在伺服器端,有可能會占用過多的記憶體。

不以"/"開頭的路徑。

以"/"開頭的路徑。

鏈結、表單提交、重定向從應用名開始寫;

**從應用名之後開始寫。

注:

不要將應用名直接寫在路徑裡面,而應該

使用request.getcontextpath()來獲得實際

部署時的應用名。

servlet學習總結五

forward和redirect區別 forward直接請求 是伺服器端行為,web容器接受請求後,之後的跳轉處理都是在服務端內部,客戶端並不知道,redirect間接請求 重定向,是客戶端行為,客戶端每次發出請求,服務端都會給返回給客戶端乙個狀態碼和新的location位址,客戶端拿到狀態碼之後在...

servlet學習總結六

cookie和session http協議是無狀態的,為了實現會話跟蹤,使用cookie和session。cookie是server向client寫入的一段資訊,使用鍵值對,name value 存放。session是儲存在服務端的,客戶端訪問服務的時候,服務端將客戶端的資訊以某種形式儲存起來。se...

Servlet元件學習總結

一 servlet的配置 aservlet com.neuedu.servlet.aservlet aservlet bservlet 瀏覽器位址列中請求的url和我們這裡標籤中的對映一致的時候,我們自定義的servlet類才會處理這個請求 二 servletconfig servletconfig...