Servlet,cookie,域物件知識點整理

2021-09-24 10:25:48 字數 3518 閱讀 2561

2.新建的html action名稱必須跟url-pattern一致,action名稱與對應的sevrlet類一致,ajax提交的的方式在url裡面填入對應的sevrlet類

四. httpservletrequest 物件

主要作用是用來接收客戶端傳送過來的請求資訊

1.主要方法:

2.獲取請求頭

五.post請求亂碼問題

解決post請求亂碼:

resp.setcontenttype(「text/html;charset=utf-8」);;加入以上**即可,tomcat8開始get請求不會亂碼不需要新增

以上**指定客戶端與服務單編碼格式

六.servlet域物件

request(域物件):通過該物件可以在乙個請求中傳遞資料,作用範圍為在一次請求中有效,即伺服器跳轉有效

request.setattribute():設定域物件內容;request.getattribute(string name):獲取域物件內容;request.removeattribute(string name): 刪除域物件內容

2.session(見下十)

3.servletcontext物件

servletcontext當做域物件來使用,通過向 servletcontext 中訪問資料,可以使得整個應用程式共享某些資料。當然不建議存放過多資料,因為 servletcontext 中的資料一旦儲存進去沒有手動移除將會一直儲存。

servletcontext官方叫servlet上下文。伺服器會為每乙個工程建立乙個物件,這個物件就是servletcontext物件。這個物件全域性唯一,而且工程內部的所有servlet都共享這個物件。所以叫全域性應用程式共享物件。

例:publicvoid doget(httpservletrequest request, httpservletresponse response)

throws servletexception, ioexception 注意: 域物件在選擇的時候,能使用小的就不要使用大的。一般情況下,可以這麼選擇:

如果資料是在多次請求中使用,並且在會話結束了後就無效了,那麼就可以使用httpsession域物件。

只在這次請求中使用,請求結束了就沒有了,可以使用httpservletrequest域物件。

對於使用session域還是request域,還可以這麼選擇:

1.**使用的是getrequestdispatcher()方法;重定向使用的是sendredirect();

2.**:瀏覽器url的位址列不變。重定向:瀏覽器url的位址列改變;

3.**是伺服器行為,重定向是客戶端行為;

4.**是瀏覽器只做了一次訪問請求。重定向是瀏覽器做了至少兩次的訪問請求;

5.**2次跳轉之間傳輸的資訊不會丟失,重定向2次跳轉之間傳輸的資訊會丟失(request範圍)。

九. cookie的建立跟傳送

1)繼承httpservlet,重寫service方法

例: 1.建立cookie物件

cookie cookie = new cookie(「uname」,「admin」);

建立cookie物件

cookie cookie2 = new cookie(「uname2」,「zhangsan」);

2.傳送cookie物件(響應cookie)

resp.addcookie(cookie);

resp.addcookie(cookie2);

2)獲取 cookie物件

1.提供了乙個 getcookies()的方法用來獲取客戶端回傳的所有cookie 組成的乙個陣列,

2.如果需要獲取單個 cookie 則需要通過遍歷,getname()獲取 cookie 的名稱,getvalue()獲取 cookie 的值。

3) cookie到期時間的設定

1)到期時間,到期時間用來指定該 cookie 何時失效。預設為當前瀏覽器關閉即失效。

2)可以手動設定 cookie 的有效時間(通過到期時間計算),通過 setmaxage(int time);方法設定 cookie 的最大有效時間,以秒為單位。

1.大於 0 的整數,表示儲存的秒數;

2.若為負數,則表示不儲存該 cookie;

3.若為 0,則刪 除該 cookie。

4.負整數:cookie 的 maxage 屬性的預設值就是-1,表示只在瀏覽器記憶體中存活,一旦關閉瀏覽器視窗,那麼 cookie 就會消失。

5.正整數:表示 cookie 物件可存活指定的秒數。當生命大於 0 時,瀏覽器會把 cookie 儲存到硬碟上,就算關閉瀏覽器,就算重啟客戶端電腦,cookie 也會存活相應的時間。

6.零:cookie 生命等於 0 是乙個特殊的值,它表示 cookie 被作廢!也就是說,如果原來瀏覽器已經儲存了這個 cookie,那麼可以通過 cookie 的setmaxage(0)來刪除這個 cookie。 無論是在瀏覽器記憶體中,還是在客戶端硬碟上都會刪除這個 cookie

4)cookie的注意

1.cookie存在本機上,換電腦後失效;cookie不跨瀏覽器

2.出現同名cookie,會覆蓋

3.不同的瀏覽器對 cookie 也有限定,cookie 的儲存有是上限的。

4.cookie不能存中文

cookie 中不能出現中文,如果有中文則通過 urlencoder.encode()來進行編碼,獲取時通過 urldecoder.decode()來進行解碼。

6) cookie的路徑:只要訪問的路徑中包含cookie的path才能訪問到該cookie< cookie的路徑預設是當前站點名下

十. session

1)理解:表示一次會話,會話可以保留指定時間長度

且在一次會話(乙個使用者的多次請求)期間共享資料。

2)建立session物件

request.getsession(); // 如果session不存在則新建session物件;如果session物件存在則獲取session

3)獲取域物件

1.請求**

request作用域不會失效,session作用域不會失效

2.重定向

request作用域會失效,session作用域不會失效

4) session的失效

1.關閉瀏覽器 (session的底層是依賴cookie,預設關閉瀏覽器即失效;jsessionid不存在時,後台會新建乙個sesession物件)

2.關閉伺服器(非正常關閉伺服器時才會銷毀,session物件在伺服器正常關閉時會鈍化到本地磁碟中,下次啟動時從本地磁碟中讀取出來,在tomcat解壓包的waork目錄下)

3.手動銷毀(session.invalidate())

4.伺服器預設最大不活動時間

tomcat的解壓縮包下的conf目錄下的web.xml中

預設30分鐘,單位為分鐘

305.手動設定最大不活動時間

通過 session.setmaxinactiveinterval(int);來設定 session 的最大不活動時間,單位為秒。

通過 getmaxinactiveinterval();方法來檢視當前 session 物件的最大不活動時間。

Servlet Cookie取不到值原因

現象 在測試帶cookie的http請求時發現,服務端用request.getheader cookie 可以去到值 但是用request.getcookies 卻不行 cookie mycookies request.getcookies 中永遠獲取不到uid的值 80埠號除外 原因 查了瀏覽器的...

Spring Boot對Ajax跨域訪問的支援實現

作者在se305課程中,需要設計一款新時代網際網路購票系統,團隊使用vue.js前端,spring mvc的後台架構。開發過程中遇到跨域訪問的問題,故寫成此部落格進行 解決方案。主要涉及的話題有 究竟什麼是跨域訪問?作者引用了mdn對cors的定義 當乙個資源從與該資源本身所在的伺服器的域或埠不同的...

對變數作用域分類的理解

按照作用域劃分,可以分為 l local,區域性作用域 e enclosing,閉包作用域 閉包的外部函式中定義的變 g global,全域性作用域 在所有函式外定義的變 b built in,內建作用域 內建作用域 區域性作用域 區域性變 只能在函式內部使用,外部 法引用 區域性變 的作用域從定義...