色欲av一区久久精品_久久综合色综合色88_无码在线观看不卡_色黄视频网站_亚洲国产精品久久久久秋霞66

Java Web

時(shí)間:2023-05-16

1、Servlet總結(jié)
在JavaWeb程序中,Servlet首要負(fù)責(zé)接收用戶(hù)懇求HttpServletRequest,在doGet(),doPost()中做相應(yīng)的處理,并將回應(yīng)HttpServletResponse反饋給用戶(hù)。Servlet能夠設(shè)置初始化參數(shù),供Servlet內(nèi)部運(yùn)用。一個(gè)Servlet類(lèi)只會(huì)有一個(gè)實(shí)例,在它初始化時(shí)調(diào)用init()辦法,毀掉時(shí)調(diào)用destroy()辦法。Servlet需求在web.xml中裝備,一個(gè)Servlet能夠設(shè)置多個(gè)URL拜訪。Servlet不是線程安全的,因而要慎重運(yùn)用成員變量。
2、Servlet的生命周期辦法
Servlet接口界說(shuō)了5個(gè)辦法,其間前三個(gè)辦法與Servlet生命周期相關(guān):
voidinit(ServletConfigconfig)throwsServletException
voidservice(ServletRequestreq,ServletResponseresp)throwsServletException,java.io.IOException
voiddestroy()
生命周期:Web容器加載Servlet并將其實(shí)例化后,Servlet生命周期開(kāi)端,容器運(yùn)轉(zhuǎn)其init()辦法進(jìn)行Servlet的初始化;懇求抵達(dá)時(shí)調(diào)用Servlet的service()辦法,service()辦法會(huì)依據(jù)需求調(diào)用與懇求對(duì)應(yīng)的doGet或doPost等辦法;當(dāng)服務(wù)器封閉或項(xiàng)目被卸載時(shí)服務(wù)器會(huì)將Servlet實(shí)例毀掉,此時(shí)會(huì)調(diào)用Servlet的destroy()辦法。init辦法和destroy辦法只會(huì)履行一次,service辦法客戶(hù)端每次懇求Servlet都會(huì)履行。Servlet中有時(shí)會(huì)用到一些需求初始化與毀掉的資源,因而能夠把初始化資源的代碼放入init辦法中,毀掉資源的代碼放入destroy辦法中,這樣就不需求每次處理客戶(hù)端的懇求都要初始化與毀掉資源。
3、get、post懇求的差異
get和post底層都是http,運(yùn)用的都是tcp協(xié)議。
GET在瀏覽器回退時(shí)是無(wú)害的,而POST會(huì)再次提交懇求。
GET產(chǎn)生的URL地址能夠被Bookmark,而POST不能夠。
GET懇求會(huì)被瀏覽器主動(dòng)cache,而POST不會(huì),除非手動(dòng)設(shè)置。
GET懇求只能進(jìn)行url編碼,而POST支撐多種編碼辦法。
GET懇求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里,而POST中的參數(shù)不會(huì)被保留。
GET懇求在URL中傳送的參數(shù)是有長(zhǎng)度約束的,而POST沒(méi)有。
對(duì)參數(shù)的數(shù)據(jù)類(lèi)型,GET只接受ASCII字符,而POST沒(méi)有約束。
GET比POST更不安全,因?yàn)閰?shù)直接暴露在URL上,所以不能用來(lái)傳遞靈敏信息。
GET參數(shù)經(jīng)過(guò)URL傳遞,POST放在Requestbody中。
GET和POST還有一個(gè)重大差異:GET產(chǎn)生一個(gè)TCP數(shù)據(jù)包;POST產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。
關(guān)于GET辦法的懇求,瀏覽器會(huì)把httpheader和data一起發(fā)送出去,服務(wù)器呼應(yīng)200(回來(lái)數(shù)據(jù));
關(guān)于POST,瀏覽器先發(fā)送header,服務(wù)器呼應(yīng)100continue,瀏覽器再發(fā)送data,服務(wù)器呼應(yīng)200ok(回來(lái)數(shù)據(jù))。
在網(wǎng)絡(luò)環(huán)境好的情況下,發(fā)一次包的時(shí)刻和發(fā)兩次包的時(shí)刻差別根本能夠無(wú)視。而在網(wǎng)絡(luò)環(huán)境差的情況下,兩次包的TCP在驗(yàn)證數(shù)據(jù)包完整性上,有非常大的優(yōu)點(diǎn)。
并不是一切瀏覽器都會(huì)在POST中發(fā)送兩次包,F(xiàn)irefox就只發(fā)送一次。
4、什么情況下調(diào)用doGet()和doPost()
Form標(biāo)簽里的method的特色為get時(shí)調(diào)用doGet(),為post時(shí)調(diào)用doPost()。
處理get懇求時(shí)調(diào)用doGet,處理post懇求時(shí)調(diào)用doPost()
5、轉(zhuǎn)發(fā)(Forward)和重定向(Redirect)的差異
轉(zhuǎn)發(fā)是服務(wù)器內(nèi)部轉(zhuǎn)發(fā),重定向是服務(wù)器告訴客戶(hù)端懇求一個(gè)新的地址
轉(zhuǎn)發(fā)(Forward)經(jīng)過(guò)RequestDispatcher目標(biāo)的forward(HttpServletRequestrequest,HttpServletResponseresponse)辦法完成的。RequestDispatcher目標(biāo)能夠經(jīng)過(guò)HttpServletRequest的getRequestDispatcher()辦法取得。
eg.登錄成功,轉(zhuǎn)發(fā)到login_success.jsp頁(yè)面:
request.getRequestDispatcher(“login_success.jsp”).forward(request,response);
重定向(Redirect)是運(yùn)用服務(wù)器回來(lái)的狀況碼來(lái)完成的??蛻?hù)端瀏覽器懇求服務(wù)器的時(shí)分,服務(wù)器會(huì)回來(lái)一個(gè)狀況碼。服務(wù)器經(jīng)過(guò)HttpServletResponse的setStatus(intstatus)辦法設(shè)置狀況碼。假如服務(wù)器回來(lái)301或許302,則瀏覽器會(huì)到新的網(wǎng)址從頭懇求該資源。
從地址欄顯示來(lái)看
forward:地址欄的url仍是本來(lái)的那個(gè),不變;redirect:地址欄的url會(huì)變?yōu)橹囟ㄏ虻膗rl
從數(shù)據(jù)同享來(lái)看
forward:轉(zhuǎn)發(fā)到的頁(yè)面能夠同享request里面的數(shù)據(jù).redirect:不能同享數(shù)據(jù).
從運(yùn)用場(chǎng)景來(lái)看
forward:一般用于用戶(hù)登陸的時(shí)分,登錄成功時(shí)依據(jù)人物轉(zhuǎn)發(fā)到相應(yīng)的模塊.redirect:一般用于用戶(hù)注銷(xiāo)登陸時(shí)回來(lái)主頁(yè)面和跳轉(zhuǎn)到其它的網(wǎng)站等
從功率來(lái)說(shuō)
forward:高,因?yàn)槭?次http懇求,服務(wù)器本地轉(zhuǎn)發(fā)到本地,速度快;redirect:低,因?yàn)槭?次http懇求,在客戶(hù)端、服務(wù)器之間來(lái)回跑花時(shí)刻。
6、主動(dòng)改寫(xiě)(Refresh)
主動(dòng)改寫(xiě)不僅能夠完成一段時(shí)刻后主動(dòng)跳轉(zhuǎn)到另一個(gè)頁(yè)面,還能夠完成一段時(shí)刻后主動(dòng)改寫(xiě)本頁(yè)面。Servlet中經(jīng)過(guò)HttpServletResponse目標(biāo)設(shè)置Header特色完成主動(dòng)改寫(xiě)例如:
Response.setHeader(“Refresh”,”5;URL=http://localhost:8080/servlet/example.html”);
其間5為時(shí)刻,單位為秒。URL指定就是要跳轉(zhuǎn)的頁(yè)面,假如設(shè)置為本頁(yè)面,每隔5s就會(huì)主動(dòng)改寫(xiě)本頁(yè)面。因?yàn)?秒之后再次懇求本頁(yè)面,本頁(yè)面的呼應(yīng)頭依然是5秒后改寫(xiě),一向循環(huán)往復(fù)。
7、Servlet與線程安全
Servlet不是線程安全的,因?yàn)檫\(yùn)轉(zhuǎn)時(shí)一個(gè)servlet只有一個(gè)實(shí)例,多個(gè)客戶(hù)端一起拜訪這個(gè)servelt的映射地址,tomcat會(huì)為每一個(gè)懇求都創(chuàng)立一個(gè)線程來(lái)處理,這些線程一起調(diào)用同一個(gè)servlet實(shí)例來(lái)處理懇求(拜訪同一個(gè)servlet的成員變量),多線程并發(fā)的讀寫(xiě)會(huì)導(dǎo)致數(shù)據(jù)不同步的問(wèn)題,假如并發(fā)拜訪都是只讀servlet中的變量、不寫(xiě)入(修改),那倒是沒(méi)有問(wèn)題。盡量把只讀的變量設(shè)置為final。
能夠給成員變量加同步鎖,但履行功率很低,會(huì)有大批懇求等待。
解決的辦法是servlet中盡量不要界說(shuō)成員變量,運(yùn)用的變量盡量放到成員辦法doGet、doPost中作為局部變量。
8、JSP和Servlet是什么關(guān)系
Servlet是一個(gè)特別的Java程序,它運(yùn)轉(zhuǎn)于服務(wù)器的JVM中,能夠依靠服務(wù)器的支撐向?yàn)g覽器供給顯示內(nèi)容。
JSP實(shí)質(zhì)上是Servlet,運(yùn)轉(zhuǎn)時(shí)JSP會(huì)先被服務(wù)器轉(zhuǎn)換為Servlet。
Servlet和JSP最首要的不同點(diǎn)在于,Servlet的運(yùn)用邏輯是在.java文件中,完全同表現(xiàn)層的html分隔;而JSP是Java和HTML雜糅在一起組合.jsp文件。
JSP側(cè)重于視圖,Servlet更側(cè)重于邏輯控制,在MVC架構(gòu)形式中,JSP合適充當(dāng)視圖(view)而Servlet合適充當(dāng)控制器(controller)。
9、JSP作業(yè)原理
JSP是一種Servlet,可是與Servlet的作業(yè)辦法不太一樣。Servlet是先由源代碼編譯為class文件后布置到服務(wù)器下,先編譯后布置。而JSP則是先布置后編譯。tomcat會(huì)在客戶(hù)端第一次懇求JSP文件時(shí)把.jsp轉(zhuǎn)換為.java文件(servlet),運(yùn)用的是HttpJspPage類(lèi)(Servlet接口的一個(gè)子類(lèi)),再編譯為.class文件。.java、.class這2個(gè)文件會(huì)被臨時(shí)存放在服務(wù)器作業(yè)目錄里。編譯結(jié)束后再運(yùn)轉(zhuǎn)class文件來(lái)呼應(yīng)客戶(hù)端懇求。今后客戶(hù)端拜訪login.jsp的時(shí)分,Tomcat將不再?gòu)念^編譯JSP文件,而是直接調(diào)用class文件來(lái)呼應(yīng)客戶(hù)端懇求。第一次拜訪jsp要轉(zhuǎn)換、編譯,速度慢,后續(xù)拜訪此jsp就快了。
10、JSP有哪些內(nèi)置目標(biāo)、效果別離是什么
JSP有9個(gè)內(nèi)置目標(biāo):
request:封裝客戶(hù)端的懇求,其間包括來(lái)自GET或POST懇求的參數(shù);
response:封裝服務(wù)器對(duì)客戶(hù)端的呼應(yīng);
pageContext:經(jīng)過(guò)該目標(biāo)能夠獲取其他目標(biāo);
session:封裝用戶(hù)會(huì)話;
application:封裝服務(wù)器運(yùn)轉(zhuǎn)環(huán)境;
out:服務(wù)器呼應(yīng)的輸出流目標(biāo);
config:Web運(yùn)用的裝備目標(biāo);
page:JSP頁(yè)面本身(相當(dāng)于Java程序中的this);
exception:封裝頁(yè)面拋出異常。
11、JSP的三大指令
1、page指令設(shè)置jsp頁(yè)面的相關(guān)信息
實(shí)例:<%@pagelanguage=”java”import=”java.util.*”pageEncoding=”UTF-8”%>
import:同等與import句子,導(dǎo)入多個(gè)類(lèi)
在一個(gè)JSP頁(yè)面中能夠給出多個(gè)page指令,并且import是能夠重復(fù)呈現(xiàn)的
pageEncoding:指定當(dāng)時(shí)頁(yè)面的編碼
假如pageEncoding沒(méi)有指定,那么默以為contentType的值;
假如pageEncoding和contentType都沒(méi)有指定,那么默認(rèn)值為iso-8859-1
contentType:同等與調(diào)用response.setContentType(“text/html;charset=xxx”);
假如沒(méi)有指定contentType特色,那么默以為pageEncoding的值;
假如contentType和pageEncoding都沒(méi)有指定,那么默認(rèn)值為iso-8859-1
errorPage:假如當(dāng)時(shí)頁(yè)面呈現(xiàn)異常,那么跳轉(zhuǎn)到errorPage指定的過(guò)錯(cuò)頁(yè)面。
例如:<%@pageerrorPage=”b.jsp”%>
isErrorPage:上面示例中指定b.jsp為過(guò)錯(cuò)頁(yè)面,需求在b.jsp中運(yùn)用<%@pageisErrorPage=”true”%>指定本頁(yè)面為過(guò)錯(cuò)頁(yè)面,指定后才能在b.jsp中運(yùn)用內(nèi)置目標(biāo)exception。
其它特色
buffer:指定out流的緩沖區(qū)巨細(xì),默以為8KB
autoFlush:當(dāng)autoFlush為true時(shí),表明out流緩沖區(qū)滿(mǎn)時(shí)會(huì)主動(dòng)改寫(xiě)。默以為true
language:當(dāng)時(shí)JSP運(yùn)用的語(yǔ)言,默以為java,也只能選擇java
info:當(dāng)時(shí)JSP的闡明信息
isThreadSafe:當(dāng)時(shí)JSP是否是線程安全的(是否只支撐單線程拜訪),默以為false,表明支撐并發(fā)拜訪
2、include指令包括其他文件
被包括的文件能夠是JSP文件、HTML文件或文本文件。包括的文件就好像是該JSP文件的一部分,會(huì)被一起編譯履行。
實(shí)例:<%@includefile=”文件相對(duì)url地址”%>
3、taglib指令在當(dāng)時(shí)jsp頁(yè)面中導(dǎo)入第三方的標(biāo)簽庫(kù)
實(shí)例:<%@tagliburi=”http://java.sun.com/jsp/jstl/core”%prefix=”c”>
需求先增加第三方標(biāo)簽庫(kù)所需的jar包。
12、JSP的七大動(dòng)作元素
jsp:include:引入一個(gè)文件。
jsp:useBean:尋找或許實(shí)例化一個(gè)JavaBean。
jsp:setProperty:設(shè)置JavaBean的特色。
jsp:getProperty:輸出某個(gè)JavaBean的特色。
jsp:forward:把懇求轉(zhuǎn)到一個(gè)新的頁(yè)面。
jsp:plugin:依據(jù)瀏覽器類(lèi)型為Java插件生成OBJECT或EMBED符號(hào)
13、JSP中的四種效果域
page當(dāng)時(shí)頁(yè)面
request一個(gè)http懇求,一個(gè)懇求可能跨越多個(gè)頁(yè)面(轉(zhuǎn)發(fā))
session某個(gè)用戶(hù)與服務(wù)器建立的一次會(huì)話
application包括整個(gè)Web運(yùn)用程序相關(guān)的目標(biāo)和特色,整個(gè)webapp中都可用
14、Request目標(biāo)的首要辦法有哪些
setAttribute(Stringname,Object):設(shè)置姓名為name的request的參數(shù)值
getAttribute(Stringname):回來(lái)由name指定的特色值
getAttributeNames():回來(lái)request目標(biāo)一切特色的姓名調(diào)集,結(jié)果是一個(gè)枚舉的實(shí)例
removeAttribute(Stringname):刪去懇求中的一個(gè)特色
getCookies():回來(lái)客戶(hù)端的一切Cookie目標(biāo),結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():回來(lái)懇求中的字符編碼辦法=getContentLength():回來(lái)懇求的Body的長(zhǎng)度
getHeader(Stringname):取得HTTP協(xié)議界說(shuō)的文件頭信息
getHeaders(Stringname):回來(lái)指定姓名的requestHeader的一切值,結(jié)果是一個(gè)枚舉的實(shí)例
getHeaderNames():回來(lái)所以requestHeader的姓名,結(jié)果是一個(gè)枚舉的實(shí)例
getInputStream():回來(lái)懇求的輸入流,用于取得懇求中的數(shù)據(jù)
getMethod():取得客戶(hù)端向服務(wù)器端傳送數(shù)據(jù)的辦法
getParameter(Stringname):取得客戶(hù)端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():取得客戶(hù)端傳送給服務(wù)器端的一切參數(shù)的姓名,結(jié)果是一個(gè)枚舉的實(shí)例
getParameterValues(Stringname):取得有name指定的參數(shù)的一切值
getProtocol():獲取客戶(hù)端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱(chēng)
getQueryString():取得查詢(xún)字符串
getRequestURI():獲取發(fā)出懇求字符串的客戶(hù)端地址
getRemoteAddr():獲取客戶(hù)端的IP地址
getRemoteHost():獲取客戶(hù)端的主機(jī)名
getSession([Booleancreate]):回來(lái)和懇求相關(guān)Session
getServerName():獲取服務(wù)器的姓名
getServletPath():獲取客戶(hù)端所懇求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號(hào)
15、request.getAttribute()和request.getParameter()有何差異
1、獲取的數(shù)據(jù):getParameter()是獲取POST/GET傳遞的參數(shù)值(比方表單提交的數(shù)據(jù));getAttribute()是獲取setAttribute()放到域中的數(shù)據(jù)。
2、回來(lái)值:getParameter()回來(lái)的是String,需求轉(zhuǎn)換為自己需求的相應(yīng)類(lèi)型;getAttribute()回來(lái)的是Object,也需求轉(zhuǎn)換為自己需求的相應(yīng)類(lèi)型
3、運(yùn)用場(chǎng)景:request.getParameter()常用于直接獲取http懇求中帶著的懇求參數(shù),比方獲取表單表單提交的數(shù)據(jù),request.getAttribute()常用于轉(zhuǎn)發(fā)時(shí)獲取前一個(gè)頁(yè)面setAttribute傳遞的數(shù)據(jù)。
16、include指令、include動(dòng)作元素的差異
include指令:JSP能夠經(jīng)過(guò)include指令來(lái)包括其他文件。被包括的文件能夠是JSP文件、HTML文件或文本文件。包括的文件就好像是該JSP文件的一部分,會(huì)被一起編譯履行。語(yǔ)法格局如下:<%@includefile=”文件相對(duì)url地址”%>
include動(dòng)作元素:動(dòng)作元素用來(lái)包括靜態(tài)和動(dòng)態(tài)的文件。該動(dòng)作把指定文件插入正在生成的頁(yè)面。語(yǔ)法格局如下:
17、怎么完成JSP、Servlet的單線程形式
servlet默認(rèn)是單實(shí)例、支撐多線程拜訪的(并發(fā)拜訪),jsp實(shí)質(zhì)是servlet,也一樣。
設(shè)置為單線程拜訪:JSP能夠經(jīng)過(guò)page指令進(jìn)行設(shè)置,<%@pageisThreadSafe=”false”%>;Servlet能夠讓Servlet完成SingleThreadModel標(biāo)識(shí)接口。
闡明:假如將JSP或Servlet設(shè)置成單線程作業(yè)形式,會(huì)導(dǎo)致每個(gè)懇求創(chuàng)立一個(gè)Servlet實(shí)例,這種實(shí)踐將導(dǎo)致嚴(yán)峻的性能問(wèn)題(服務(wù)器的內(nèi)存壓力很大,還會(huì)導(dǎo)致頻繁的廢物回收),所以通常情況下并不會(huì)這么做。
18、完成會(huì)話盯梢的技能有哪些
1、運(yùn)用Cookie
優(yōu)點(diǎn):數(shù)據(jù)能夠耐久保存,不占用服務(wù)器存儲(chǔ),根據(jù)文本的Key-Value,運(yùn)用簡(jiǎn)單
缺點(diǎn):巨細(xì)受到約束(每次懇求該網(wǎng)站時(shí)都會(huì)將該網(wǎng)站的cookie放在懇求頭中),用戶(hù)能夠禁用Cookie功用,因?yàn)楸4嬖诳蛻?hù)端,有必定的安全風(fēng)險(xiǎn)。
2、session
在一切會(huì)話盯梢技能中,session目標(biāo)是最強(qiáng)大也是功用最多的。當(dāng)一個(gè)用戶(hù)第一次拜訪某個(gè)網(wǎng)站時(shí)會(huì)主動(dòng)創(chuàng)立HttpSession,每個(gè)用戶(hù)能夠拜訪他自己的HttpSession。能夠經(jīng)過(guò)HttpServletRequest目標(biāo)的getSession方法取得HttpSession,經(jīng)過(guò)HttpSession的setAttribute辦法能夠?qū)⒁粋€(gè)值放在HttpSession中,經(jīng)過(guò)調(diào)用HttpSession目標(biāo)的getAttribute辦法,一起傳入特色名就能夠獲取保存在HttpSession中的目標(biāo)。與上面三種辦法不同的是,HttpSession放在服務(wù)器的內(nèi)存中,因而不要將過(guò)大的目標(biāo)放在里面,即便目前的Servlet容器能夠在內(nèi)存將滿(mǎn)時(shí)將HttpSession中的目標(biāo)移到其他存儲(chǔ)設(shè)備中,可是這樣勢(shì)必影響性能。增加到HttpSession中的值能夠是任意Java目標(biāo),這個(gè)目標(biāo)最好完成了Serializable接口,這樣Servlet容器在必要的時(shí)分能夠?qū)⑵湫蛄谢轿募?,否則在序列化時(shí)就會(huì)呈現(xiàn)異常。
3、URL重寫(xiě)
在URL中增加用戶(hù)會(huì)話的信息作為懇求的參數(shù),或許將僅有的會(huì)話ID增加到URL結(jié)尾以標(biāo)識(shí)一個(gè)會(huì)話。
優(yōu)點(diǎn):在Cookie被禁用的時(shí)分依然能夠運(yùn)用
缺點(diǎn):必須對(duì)網(wǎng)站的URL進(jìn)行編碼,一切頁(yè)面必須動(dòng)態(tài)生成,不能用預(yù)置的URL進(jìn)行拜訪。
4、躲藏的表單域
type=”hidden”name=”session”value=”…”/>
優(yōu)點(diǎn):Cookie被禁時(shí)能夠運(yùn)用
缺點(diǎn):需求提交表單才能向服務(wù)器傳遞數(shù)據(jù),且只能是單向傳遞(客戶(hù)端=>服務(wù)器)
19、Cookie和Session的差異
Cookie和Session都是用來(lái)盯梢用戶(hù)會(huì)話的,差異:
1、存儲(chǔ)方位:Cookie數(shù)據(jù)保存在客戶(hù)端(瀏覽器端),Session數(shù)據(jù)保存在服務(wù)器端。
2、安全性:session存儲(chǔ)在服務(wù)器上,相對(duì)來(lái)說(shuō)安全性更高。盡量不要把靈敏信息存儲(chǔ)在Cookie中,就算要在cookie中存儲(chǔ)靈敏信息,也應(yīng)該存儲(chǔ)加密后的信息。服務(wù)器拿到加密后的信息后先解密再運(yùn)用。
3、盯梢用戶(hù)會(huì)話的完成辦法
cookie:服務(wù)器把cookie(會(huì)話信息)存儲(chǔ)在客戶(hù)端(瀏覽器),每次向該網(wǎng)站發(fā)送http懇求時(shí),都會(huì)在懇求頭中順便該網(wǎng)站的cookie,懇求頭的巨細(xì)有限,所以cookie能存儲(chǔ)信息巨細(xì)是有限的。
session:session(會(huì)話信息)存儲(chǔ)在服務(wù)器上,運(yùn)用一個(gè)僅有的sessionid來(lái)僅有標(biāo)識(shí)此session目標(biāo),sessionid以cookie的辦法保存在客戶(hù)端,客戶(hù)端發(fā)起http懇求時(shí),服務(wù)器會(huì)主動(dòng)從cookie中獲取sessionid,找到對(duì)應(yīng)的session目標(biāo)。
4、用戶(hù)信息的保存時(shí)刻
cookie:在cookie有用期內(nèi),cookie中的用戶(hù)信息都有用,能夠長(zhǎng)期保存用戶(hù)信息。
session:只是在本次會(huì)話期間保存會(huì)話信息,session超時(shí)時(shí)會(huì)主動(dòng)刪去服務(wù)器上的對(duì)應(yīng)的session目標(biāo),默認(rèn)超時(shí)時(shí)刻是30min,即用戶(hù)30min內(nèi)沒(méi)有再次拜訪服務(wù)器,session目標(biāo)就會(huì)被刪去。
有時(shí)分需求在刪去session目標(biāo)時(shí)做一些處理,比方把session中的一些數(shù)據(jù)今后還要用,需求保存至數(shù)據(jù)庫(kù)。那就需求我們寫(xiě)一個(gè)監(jiān)聽(tīng)器來(lái)監(jiān)聽(tīng)session,session毀掉時(shí)做一些處理:
@WebListener()publicclassMyListenerimplementsHttpSessionListener{publicvoidsessionCreated(HttpSessionEventse){
}publicvoidsessionDestroyed(HttpSessionEventse){
HttpSessionsession=se.getSession();//從session中獲取數(shù)據(jù),存儲(chǔ)到數(shù)據(jù)庫(kù)中//……}
}
5、運(yùn)用場(chǎng)景
Cookie一般用來(lái)保存用戶(hù)信息,比方:
(1)在Cookie中保存已經(jīng)登錄過(guò)的用戶(hù)信息,下次拜訪網(wǎng)站的時(shí)分主動(dòng)登錄或主動(dòng)填寫(xiě)一些字段;
(2)一般的網(wǎng)站都會(huì)保持登錄,就是說(shuō)下次你再拜訪網(wǎng)站的時(shí)分不需求從頭登錄,這是因?yàn)橛脩?hù)登錄時(shí)存放了一個(gè)Token在Cookie中,下次登錄的時(shí)分只需求依據(jù)Token值來(lái)查找用戶(hù)即可(為了安全考慮,從頭登錄一般要將Token重寫(xiě));
session存儲(chǔ)的信息巨細(xì)沒(méi)有約束,可存儲(chǔ)本次會(huì)話期間的信息,根據(jù)這2個(gè)特色,常見(jiàn)的運(yùn)用有
(1)session常用來(lái)存儲(chǔ)一次性驗(yàn)證碼,將用戶(hù)提交的驗(yàn)證碼與session中正確的驗(yàn)證碼比較,驗(yàn)證碼30分鐘內(nèi)有用是設(shè)置sessionid這個(gè)cookie的有用期是30min。
(2)購(gòu)物車(chē)

文章標(biāo)簽:

Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)

與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
ciya68