?
?
十二、JSP表單處理
我們?cè)跒g覽網(wǎng)頁(yè)的時(shí)候,經(jīng)常需要向服務(wù)器提交信息,并讓后臺(tái)程序處理。瀏覽器中使用 GET 和 POST 方法向服務(wù)器提交數(shù)據(jù)。
GET 方法
GET方法將請(qǐng)求的編碼信息添加在網(wǎng)址后面,網(wǎng)址與編碼信息通過(guò)"?"號(hào)分隔。如下所示:
http://www.runoob.com/hello?key1=value1&key2=value2
GET方法是瀏覽器默認(rèn)傳遞參數(shù)的方法,一些敏感信息,如密碼等建議不使用GET方法。
用get時(shí),傳輸數(shù)據(jù)的大小有限制 (注意不是參數(shù)的個(gè)數(shù)有限制),最大為1024字節(jié)。
POST 方法
一些敏感信息,如密碼等我們可以通過(guò)POST方法傳遞,POST提交數(shù)據(jù)是隱式的。
POST提交數(shù)據(jù)是不可見(jiàn)的,GET是通過(guò)在url里面?zhèn)鬟f的(可以看一下你瀏覽器的地址欄)。
JSP使用getParameter()來(lái)獲得傳遞的參數(shù),getInputStream()方法用來(lái)處理客戶端的二進(jìn)制數(shù)據(jù)流的請(qǐng)求。
JSP 讀取表單數(shù)據(jù)
* getParameter():?使用 request.getParameter() 方法來(lái)獲取表單參數(shù)的值。
* getParameterValues():?獲得如checkbox類(lèi)(名字相同,但值有多個(gè))的數(shù)據(jù)。 接收數(shù)組變量 ,如checkbox類(lèi)型
* getParameterNames():該方法可以取得所有變量的名稱,該方法返回一個(gè) Enumeration。
* getInputStream():調(diào)用此方法來(lái)讀取來(lái)自客戶端的二進(jìn)制數(shù)據(jù)流。
?
<%@ page contentType="text/html;charset=UTF-8" language="java"
pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <title>表單信息</title>
</head> <body> <form action="Demo1.jsp" method="post"> <input type="text"
name="name"/><br> <input type="text" name="url"/><br> <input type="checkbox"
name="mao" checked="checked"/>貓<br> <input type="checkbox" name="gou"/>狗<br>
<input type="checkbox" name="ji" checked="checked"/>雞<br> <input
type="checkbox" name="ya"/>鴨<br> <input type="submit" value="提交"> </form>
</body> </html>
<%@ page import="java.util.Enumeration" %> <%@ page
contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP</title> </head>
<body> <h1>讀取參數(shù)信息</h1> <table align="center" border="1" width="100%"> <tr
bgcolor="#f0f8ff"> <th>參數(shù)名</th> <th>對(duì)應(yīng)值</th> </tr> <% Enumeration<String>
parameterNames = request.getParameterNames();
request.setCharacterEncoding("utf-8"); while
(parameterNames.hasMoreElements()){ String name = parameterNames.nextElement();
out.println("<tr><td>"+name+"</td>\n"); String url =
request.getParameter(name); out.println("<td>"+url+"</td></tr>\n"); } %>
</table> <% %> </body> </html>
?
十三、四大域?qū)ο螅簩?shí)際開(kāi)發(fā)如何用?
PageContext:pageConext ? ? ?存放的數(shù)據(jù)僅在當(dāng)前頁(yè)面有效。開(kāi)發(fā)時(shí)使用較少。當(dāng)前頁(yè)面存放數(shù)據(jù)用表單標(biāo)簽中的?<input
type="hidden" />,且該存值方式用戶看不到。
ServletRequest:?request ? ? ?存放的數(shù)據(jù)在一次請(qǐng)求(轉(zhuǎn)發(fā):可以傳數(shù)據(jù))內(nèi)有效。使用非常多。
HttpSession:?session ? ? ? ??存放的數(shù)據(jù)在一次會(huì)話(多次請(qǐng)求)中有效。使用的比較多。例如:存放用戶的登錄信息、購(gòu)物車(chē)功能。
ServletContext:?application ?存放的數(shù)據(jù)在整個(gè)應(yīng)用范圍內(nèi)都有效。因?yàn)榉秶?,?yīng)盡量少用。用于統(tǒng)計(jì)在線人數(shù)。
?
十四、會(huì)話跟蹤
*
? 會(huì)話概述
1、什么是會(huì)話?如同打電話。
會(huì)話可簡(jiǎn)單理解為:用戶開(kāi)一個(gè)瀏覽器,點(diǎn)擊多個(gè)超鏈接,訪問(wèn)服務(wù)器多個(gè)web資源,然后關(guān)閉瀏覽器,整個(gè)過(guò)程稱之為一個(gè)會(huì)話。
?
2、會(huì)話過(guò)程要解決的問(wèn)題是什么?保持各個(gè)客戶端自己的數(shù)據(jù)。
? 每個(gè)用戶在使用瀏覽器與服務(wù)器進(jìn)行會(huì)話的過(guò)程中,不可避免各自會(huì)產(chǎn)生一些數(shù)據(jù),程序要想辦法為每個(gè)用戶保存這些數(shù)據(jù)。
?
例如:用戶點(diǎn)擊超鏈接通過(guò)一個(gè)servlet購(gòu)買(mǎi)了一個(gè)商品,程序應(yīng)該想辦法保存用戶購(gòu)買(mǎi)的商品,以便于用戶點(diǎn)結(jié)帳servlet時(shí),結(jié)帳servlet可以得到用戶購(gòu)買(mǎi)的商品為用戶結(jié)帳。
? 思考:用戶購(gòu)買(mǎi)的商品保存在request或servletContext中行不行?答:不行。
保存會(huì)話數(shù)據(jù)的兩種技術(shù):
Cookie:是客戶端技術(shù),程序把每個(gè)用戶的數(shù)據(jù)以cookie的形式寫(xiě)給用戶各自的瀏覽器。
? ?當(dāng)用戶使用瀏覽器再去訪問(wèn)服務(wù)器中的web資源時(shí),就會(huì)帶著各自的數(shù)據(jù)去。
? ? 這樣,web資源處理的就是用戶各自的數(shù)據(jù)了。
HttpSession:Session是服務(wù)器端技術(shù),利用這個(gè)技術(shù),服務(wù)器在運(yùn)行時(shí)可以為每一個(gè)用戶的瀏覽器創(chuàng)建一個(gè)其獨(dú)享的HttpSession對(duì)象,
? ? 由于session為用戶瀏覽器獨(dú)享,所以用戶在訪問(wèn)服務(wù)器的web資源時(shí),可以把各自的數(shù)據(jù)放在各自的session中,
? ? 當(dāng)用戶再去訪問(wèn)服務(wù)器中的其它web資源時(shí),其它web資源再?gòu)挠脩舾髯缘膕ession中取出數(shù)據(jù)為用戶服務(wù)。
?
*
http協(xié)議的無(wú)狀態(tài)性
無(wú)狀態(tài)是指,當(dāng)瀏覽器發(fā)送請(qǐng)求給服務(wù)器時(shí),服務(wù)器響應(yīng)客戶端請(qǐng)求。但是當(dāng)同一個(gè)瀏覽器再次發(fā)送請(qǐng)求給服務(wù)器時(shí),服務(wù)器并不知道它就是剛才那個(gè)瀏覽器。簡(jiǎn)單來(lái)說(shuō),就是服務(wù)器不會(huì)去記得你,所以就是無(wú)狀態(tài)協(xié)議。
*
? JSP?Cookie 處理
Cookie是存儲(chǔ)在客戶機(jī)的文本文件,它們保存了大量軌跡信息。在servlet技術(shù)基礎(chǔ)上,JSP顯然能夠提供對(duì)HTTP cookie的支持。
通常有三個(gè)步驟來(lái)識(shí)別回頭客:
* 服務(wù)器腳本發(fā)送一系列cookie至瀏覽器。比如名字,年齡,ID號(hào)碼等等。
* 瀏覽器在本地機(jī)中存儲(chǔ)這些信息,以備不時(shí)之需。
* 當(dāng)下一次瀏覽器發(fā)送任何請(qǐng)求至服務(wù)器時(shí),它會(huì)同時(shí)將這些cookie信息發(fā)送給服務(wù)器,然后服務(wù)器使用這些信息來(lái)識(shí)別用戶或者干些其它事情。
JSP Cookie 處理需要對(duì)中文進(jìn)行編碼與解碼,方法如下:
String str = java.net.URLEncoder.encode("中文","UTF-8"); //編碼 String str =
java.net.URLDecoder.decode("編碼后的字符串","UTF-8"); // 解碼
*
Servlet Cookie 方法
?
*
使用JSP設(shè)置Cookie
使用JSP設(shè)置cookie包含三個(gè)步驟:
(1)創(chuàng)建一個(gè)Cookie對(duì)象:?調(diào)用Cookie的構(gòu)造函數(shù),使用一個(gè)cookie名稱和值做參數(shù),它們都是字符串。
Cookie cookie = new Cookie("key","value");
請(qǐng)務(wù)必牢記,名稱和值中都不能包含空格或者如下的字符:
[ ] ( ) = , " / ? @ : ;
(2) 設(shè)置有效期:調(diào)用setMaxAge()函數(shù)表明cookie在多長(zhǎng)時(shí)間(以秒為單位)內(nèi)有效。下面的操作將有效期設(shè)為了24小時(shí)。
cookie.setMaxAge(60*60*24);
(3) 將cookie發(fā)送至HTTP響應(yīng)頭中:調(diào)用response.addCookie()函數(shù)來(lái)向HTTP響應(yīng)頭中添加cookie。
response.addCookie(cookie);
*
實(shí)例說(shuō)明
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE
html> <html> <head> <meta charset="utf-8"> <title>表單提交</title> </head> <body>
<form action="CookieDemo.jsp" method=GET> 站點(diǎn)名: <input type="text" name="name">
<br /> 網(wǎng)址: <input type="text" name="url" /> <input type="submit" value="提交" />
</form> </body> </html>
<%@ page import="java.net.URLEncoder" %> <%@ page
contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<% // 編碼,解決中文亂碼 String str =
URLEncoder.encode(request.getParameter("name"),"utf-8"); // 設(shè)置 name 和 url
cookie Cookie name = new Cookie("name", str); Cookie url = new Cookie("url",
request.getParameter("url")); // 設(shè)置cookie過(guò)期時(shí)間為24小時(shí)。 name.setMaxAge(60*60*24);
url.setMaxAge(60*60*24); // 在響應(yīng)頭部添加cookie response.addCookie( name );
response.addCookie( url ); %> <html> <head> <title>設(shè)置 Cookie</title> </head>
<body> <h1>設(shè)置 Cookie</h1> <ul> <li><p><b>網(wǎng)站名:</b> <%=
request.getParameter("name")%> </p></li> <li><p><b>網(wǎng)址:</b> <%=
request.getParameter("url")%> </p></li> </ul> </body> </html>
?
*
使用 JSP 讀取 Cookie
想要讀取cookie,您就需要調(diào)用request.getCookies()方法來(lái)獲得一個(gè)javax.servlet.http.Cookie對(duì)象的數(shù)組,然后遍歷這個(gè)數(shù)組,使用getName()方法和getValue()方法來(lái)獲取每一個(gè)cookie的名稱和值。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page
import="java.net.*" %> <!DOCTYPE html> <html> <head> <meta
http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>獲取
Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null;
// 獲取cookies的數(shù)據(jù),是一個(gè)數(shù)組 cookies = request.getCookies(); if( cookies != null ){
out.println("<h2> 查找 Cookie 名與值</h2>"); for (int i = 0; i < cookies.length;
i++){ cookie = cookies[i]; out.print("參數(shù)名 : " + cookie.getName());
out.print("<br>"); out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(),
"utf-8") +" <br>"); out.print("------------------------------------<br>"); }
}else{ out.println("<h2>沒(méi)有發(fā)現(xiàn) Cookie</h2>"); } %> </body> </html>
*
使用JSP刪除Cookie
刪除cookie非常簡(jiǎn)單。如果您想要?jiǎng)h除一個(gè)cookie,按照下面給的步驟來(lái)做就行了:
* 獲取一個(gè)已經(jīng)存在的cookie然后存儲(chǔ)在Cookie對(duì)象中。
* 將cookie的有效期設(shè)置為0。
* 將這個(gè)cookie重新添加進(jìn)響應(yīng)頭中。
*
實(shí)例演示
下面的程序刪除一個(gè)名為"name"的cookie,當(dāng)您第二次運(yùn)行CookieDemo2.jsp時(shí),name 將會(huì)為 null。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page
import="java.net.*" %> <!DOCTYPE html> <html> <head> <meta
http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>獲取
Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null;
// 獲取當(dāng)前域名下的cookies,是一個(gè)數(shù)組 cookies = request.getCookies(); if( cookies != null ){
out.println("<h2> 查找 Cookie 名與值</h2>"); for (int i = 0; i < cookies.length;
i++){ cookie = cookies[i]; if((cookie.getName( )).compareTo("name") == 0 ){
cookie.setMaxAge(0); response.addCookie(cookie); out.print("刪除 Cookie: " +
cookie.getName( ) + "<br/>"); } out.print("參數(shù)名 : " + cookie.getName());
out.print("<br>"); out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(),
"utf-8") +" <br>"); out.print("------------------------------------<br>"); }
}else{ out.println("<h2>沒(méi)有發(fā)現(xiàn) Cookie</h2>"); } %> </body> </html>
?
?
*
圖解分析
?
*
Session
*
HttpSession概述
HttpSession是有JavaWeb提供的,用來(lái)會(huì)話跟蹤的類(lèi),session是服務(wù)器對(duì)象,保存在服務(wù)器端;
HttpSession是Servlet三大域?qū)ο笾唬╮equest、session、application),所以它也有setAttribute()、getAttribute()、removeAttribute()方法;
HttpSession底層依賴Cookie,或是URL重寫(xiě)。
*
HttpSession的作用
* 會(huì)話范圍:會(huì)話范圍是某個(gè)用戶從首次訪問(wèn)服務(wù)器開(kāi)始,到該用戶關(guān)閉瀏覽器結(jié)束;
會(huì)話:一個(gè)用戶對(duì)服務(wù)器的多次連貫性請(qǐng)求,所謂連貫性請(qǐng)求,就是該用戶多次請(qǐng)求中間沒(méi)有關(guān)閉瀏覽器。
*
服務(wù)器會(huì)為每個(gè)客戶端創(chuàng)建一個(gè)session對(duì)象,session就好比客戶在服務(wù)器端的賬戶,它們被服務(wù)器保存到一個(gè)Map中,這個(gè)Map被稱為session緩存。
Servlet中得到session對(duì)象:HttpSession session = request.getSession();
JSP中得到session對(duì)象:session是jsp內(nèi)置對(duì)象之下,不用創(chuàng)建就可以直接使用。
*
session域相關(guān)方法
void setAttribute(String name,Object val); Object getAttribute(String name);
void removeAttribute(String name);
*
session保存用戶登錄信息
* 案例相關(guān)頁(yè)面和Servlet:
login.jsp 登錄頁(yè)面
LoginSuccess.jsp 只有登錄成功才能訪問(wèn)的頁(yè)面
LoginServlet:校驗(yàn)用戶是否登錄成功
* 各頁(yè)面和Servlet內(nèi)容:
login.jsp 提供登錄表單,提交表單請(qǐng)求LoginServlet
LoginServlet 獲取請(qǐng)求參數(shù),校驗(yàn)用戶是否登錄成功
失敗:保存錯(cuò)誤信息到request域,轉(zhuǎn)發(fā)到login.jsp,在login.jsp中顯示request域中的錯(cuò)誤信息;
成功:保存用戶信息到session域中,重定向到LoginSuccess.jsp頁(yè)面,顯示session域中的用戶信息。
LoginSuccess.jsp 從session域獲取用戶信息,如果不存在,顯示“您還沒(méi)有登錄”,存在則顯示用戶信息;
只要用戶沒(méi)有關(guān)閉瀏覽器,session就一直存在,那么保存在session中的用戶信息也就一起存在,那么用戶訪問(wèn)LoginSuccess.jsp就會(huì)通過(guò)
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE
html> <html> <head> <title>登錄頁(yè)面</title> </head> <body> <% //獲取cookie的值 String
name = ""; String pwd = ""; Cookie[] cs = request.getCookies(); if(cs!=null){
for(Cookie c : cs){ if("username".equals(c.getName())){ name = c.getValue(); }
if("pwd".equals(c.getName())){ pwd = c.getValue(); } } } %> <% //獲取request信息
String message=""; String mess = (String)request.getAttribute("message");
if(mess!=null){ message = mess; } %> <h1>用戶登錄</h1> <span color="red"><%=message
%></span> <form action="/LoginServlet" method="post"> <p> 賬號(hào):<input type="text"
name="username" value="<%=name %>" /> </p> <p> 密碼:<input type="password"
name="pwd" value="<%=pwd %>" /> </p> <p> <input type="submit" value="登錄"> </p>
</form> </body> </html>
LoginServlet.java
?
package com.demo.servlet; import javax.servlet.ServletException; import
javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import
java.io.IOException; @WebServlet("/LoginServlet") public class LoginServlet
extends HttpServlet { @Override protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp); } public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//設(shè)置請(qǐng)求的字符編碼 request.setCharacterEncoding("utf-8"); //接收客戶端請(qǐng)求 String username =
request.getParameter("username"); String pwd = request.getParameter("pwd");
//判斷是否登錄成功 if("admin".equals(username) && "1234".equals(pwd)){
//登錄成功,把信息保存到cookie中 Cookie c1 = new Cookie("username",username); Cookie c2 =
new Cookie("pwd",pwd); c1.setMaxAge(60*60*24); c2.setMaxAge(60*60*24);
response.addCookie(c1); response.addCookie(c2);
//登錄成功,保存用戶名到session中,并重定向到LoginSuccess.jsp HttpSession session =
request.getSession(); session.setAttribute("username", username);
response.sendRedirect("/LoginSuccess.jsp"); }else{ //轉(zhuǎn)發(fā)給客戶端“登錄失敗”
request.setAttribute("message", "用戶信息錯(cuò)誤,請(qǐng)重新登錄");
request.getRequestDispatcher("/login.jsp").forward(request, response); } } }
LoginSuccess.jsp
?
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE
html> <html> <head> <title>登錄成功</title> </head> <body> <% //獲取session信息 String
name = (String)session.getAttribute("username"); if(name==null){
//session不存在,轉(zhuǎn)發(fā)到登錄頁(yè)面,并提示信息 request.setAttribute("message", "您還沒(méi)有登錄,不能訪問(wèn)頁(yè)面");
request.getRequestDispatcher("/login.jsp").forward(request, response);
//重定向到login.jsp,不會(huì)顯示request提示的信息 //response.sendRedirect("/login/login.jsp");
return; } %> <h1>登錄成功</h1> 你好<%=name %>,歡迎登錄! </body> </html>
?
*
隱藏表單域
一個(gè)網(wǎng)絡(luò)服務(wù)器可以發(fā)送一個(gè)隱藏的HTML表單域和一個(gè)唯一的session ID,就像下面這樣:
<input type="hidden" name="sessionid" value="12345">
這個(gè)條目意味著,當(dāng)表單被提交時(shí),指定的名稱和值將會(huì)自動(dòng)包含在GET或POST數(shù)據(jù)中。每當(dāng)瀏覽器發(fā)送一個(gè)請(qǐng)求,session_id的值就可以用來(lái)保存不同瀏覽器的軌跡。
這種方式可能是一種有效的方式,但點(diǎn)擊<A HREF>標(biāo)簽中的超鏈接時(shí)不會(huì)產(chǎn)生表單提交事件,因此隱藏表單域也不支持通用會(huì)話跟蹤。
*
重寫(xiě)URL
您可以在每個(gè)URL后面添加一些額外的數(shù)據(jù)來(lái)區(qū)分會(huì)話,服務(wù)器能夠根據(jù)這些數(shù)據(jù)來(lái)關(guān)聯(lián)session標(biāo)識(shí)符。
舉例來(lái)說(shuō),http://w3cschool.cc/file.htm;sessionid=12345,
session標(biāo)識(shí)符為sessionid=12345,服務(wù)器可以用這個(gè)數(shù)據(jù)來(lái)識(shí)別客戶端。
相比而言,重寫(xiě)URL是更好的方式來(lái),就算瀏覽器不支持cookies也能工作,但缺點(diǎn)是您必須為每個(gè)URL動(dòng)態(tài)指定session
ID,就算這是個(gè)簡(jiǎn)單的HTML頁(yè)面。
* session依賴Cookie,目的是讓客戶端發(fā)出請(qǐng)求時(shí)歸還sessionID,這樣才能找到對(duì)應(yīng)的session;
* 如果客戶端禁用了Cookie,那么就無(wú)法得到sessionID,那么session也就無(wú)用了;
* 也可以使用URL重寫(xiě)來(lái)替代Cookie
* 讓網(wǎng)站的所有超鏈接、表單中都添加一個(gè)特殊的請(qǐng)求參數(shù),即sessionID;
* 這樣服務(wù)器可以通過(guò)獲取請(qǐng)求參數(shù)得到sessionID,從而找到session對(duì)象;
* response.encodeURL(String
url)該方法會(huì)對(duì)url進(jìn)行智能的重寫(xiě),當(dāng)請(qǐng)求中沒(méi)有歸還session這個(gè)Cookie,那么該方法會(huì)重寫(xiě)URL,否則不重寫(xiě),當(dāng)然url必須是指向本站的url。
*
session對(duì)象
除了以上幾種方法外,JSP利用servlet提供的HttpSession接口來(lái)識(shí)別一個(gè)用戶,存儲(chǔ)這個(gè)用戶的所有訪問(wèn)信息。
默認(rèn)情況下,JSP允許會(huì)話跟蹤,一個(gè)新的HttpSession對(duì)象將會(huì)自動(dòng)地為新的客戶端實(shí)例化。禁止會(huì)話跟蹤需要顯式地關(guān)掉它,通過(guò)將page指令中session屬性值設(shè)為false來(lái)實(shí)現(xiàn),就像下面這樣:
<%@ page session="false" %>
JSP引擎將隱含的session對(duì)象暴露給開(kāi)發(fā)者。由于提供了session對(duì)象,開(kāi)發(fā)者就可以方便地存儲(chǔ)或檢索數(shù)據(jù)。
下表列出了session對(duì)象的一些重要方法:
?
?
?
?
*
Session與Cookie的對(duì)比
?
?
*
HttpSession原理
服務(wù)器不會(huì)馬上給你創(chuàng)建session,在第一次獲取session時(shí),即reques.getSession()方法執(zhí)行時(shí),才會(huì)創(chuàng)建session。
獲取Cookie中的JSESSIONID:
* ? 如果sessionID不存在,創(chuàng)建session,把session保存起來(lái),把新創(chuàng)建的sessionID保存到Cookie中;
* ?
如果sessionID存在,創(chuàng)建sessionID查找session對(duì)象,如果沒(méi)有查找到,創(chuàng)建session,把session保存起來(lái),把新創(chuàng)建的sessionID保存到Cookie中;
* ? 如果sessionID存在,通過(guò)sessionID查找到了session對(duì)象,那么就不會(huì)再創(chuàng)建session對(duì)象了;
* ?
如果創(chuàng)建新的session,瀏覽器會(huì)得到一個(gè)包含了sessionID的Cookie,這個(gè)Cookie的生命為-1,即只在瀏覽器內(nèi)存中存在,如果不關(guān)閉瀏覽器,那么Cookie就會(huì)一直存在;
* ?
下次請(qǐng)求時(shí),再執(zhí)行request.getSession()方法時(shí),因?yàn)榭梢酝ㄟ^(guò)Cookie中的sessionID找到session對(duì)象,所以與上一次請(qǐng)求使用的是同一個(gè)session對(duì)象。
* ? request.getSession(false):如果Cookie不存在,session也不存在,那么返回NULL,而不會(huì)創(chuàng)建session對(duì)象;
* ?
request.getSession(true)/request.getSession():兩個(gè)方法一樣,當(dāng)session對(duì)象不存在時(shí),創(chuàng)建session對(duì)象
* ? String getId() 獲取sessionID;
* ? int getMaxInactiveInterval()
獲取session最大的不活動(dòng)時(shí)間(秒),默認(rèn)為30分鐘,當(dāng)session在30分鐘內(nèi)沒(méi)有使用,那么Tomcat就會(huì)在session池中移除;
* ? void invalidate()
讓session失效,調(diào)用這個(gè)方法會(huì)讓session失效,當(dāng)session失效后,客戶端再次請(qǐng)求,服務(wù)器會(huì)給客戶端一個(gè)新的session;
* ? boolean isNew() 查看session是否為新的,判斷是新創(chuàng)建的,還是從Cookie獲取的;
?
(未完待續(xù))
此篇是我在學(xué)習(xí)過(guò)程中參考菜鳥(niǎo)教程以及筆記和別人博客(黑澤君)完成
Java匹馬行天下依舊在更新中,歡迎大家關(guān)注,感覺(jué)可以的可以點(diǎn)擊一下推薦,若如有誤,感謝指正,謝謝!
熱門(mén)工具 換一換
