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,內建作用域 內建作用域 區域性作用域 區域性變 只能在函式內部使用,外部 法引用 區域性變 的作用域從定義...