日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java httpserver 多个接口_多个Servlet之间数据共享实现方案

發(fā)布時(shí)間:2023/12/2 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java httpserver 多个接口_多个Servlet之间数据共享实现方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.數(shù)據(jù)共享:OneServlet工作完畢后,將產(chǎn)生數(shù)據(jù)交給TwoServlet來(lái)使用

Servlet規(guī)范中提供四種數(shù)據(jù)共享方案

1.ServletContext接口

2.Cookie類

3.HttpSession接口

4.HttpServletRequest接口

ServletContext接口:

1.介紹:

1)來(lái)自于Servlet規(guī)范中一個(gè)接口。在Tomcat中存在servlet-api.jar在Tomcat中負(fù)責(zé)提供這個(gè)接口實(shí)現(xiàn)類

2)如果兩個(gè)Servlet來(lái)自于同一個(gè)網(wǎng)站。彼此之間通過(guò)網(wǎng)站的ServletContext 實(shí)例對(duì)象實(shí)現(xiàn)數(shù)據(jù)共享

3)開(kāi)發(fā)人員習(xí)慣于將ServletContext對(duì)象稱為【全局作用域?qū)ο蟆?/p>

2.工作原理:

每一個(gè)網(wǎng)站都存在一個(gè)全局作用域?qū)ο蟆?這個(gè)全局作用域?qū)ο蟆鞠喈?dāng)于】一個(gè)Map.在這個(gè)網(wǎng)站中OneServlet可以將一個(gè)數(shù)據(jù)存入到全局作用域?qū)ο?#xff0c;當(dāng)前網(wǎng)站中其他Servlet此時(shí)都可以從全局作用域?qū)ο蟮玫竭@個(gè)數(shù)據(jù)進(jìn)行使用

3.全局作用域?qū)ο笊芷?#xff1a;

1)在Http服務(wù)器啟動(dòng)過(guò)程中,自動(dòng)為當(dāng)前網(wǎng)站在內(nèi)存中創(chuàng)建一個(gè)全局作用域?qū)ο?/p>

2)在Http服務(wù)器運(yùn)行期間時(shí),一個(gè)網(wǎng)站只有一個(gè)全局作用域?qū)ο?/p>

3)在Http服務(wù)器運(yùn)行期間,全局作用域?qū)ο笠恢碧幱诖婊顮顟B(tài)

4)在Http服務(wù)器準(zhǔn)備關(guān)閉時(shí),負(fù)責(zé)將當(dāng)前網(wǎng)站中全局作用域?qū)ο筮M(jìn)行銷毀處理

全局作用域?qū)ο笊芷谪灤┚W(wǎng)站整個(gè)運(yùn)行期間

4.命令實(shí)現(xiàn): 【同一個(gè)網(wǎng)站】OneServlet將數(shù)據(jù)共享給TwoServlet

OneServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.通過(guò)【請(qǐng)求對(duì)象】向Tomcat索要當(dāng)前網(wǎng)站中【全局作用域?qū)ο蟆?/p>

ServletContext application = request.getServletContext();

//2.將數(shù)據(jù)添加到全局作用域?qū)ο笞鳛椤竟蚕頂?shù)據(jù)】

application.setAttribute("key1",數(shù)據(jù)) }

}

TwoServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.通過(guò)【請(qǐng)求對(duì)象】向Tomcat索要當(dāng)前網(wǎng)站中【全局作用域?qū)ο蟆?/p>

ServletContext application = request.getServletContext();

//2.從全局作用域?qū)ο蟮玫街付P(guān)鍵字對(duì)應(yīng)數(shù)據(jù)

Object 數(shù)據(jù) = application.getAttribute("key1"); }

}

Cookie:

1.介紹:

1)Cookie來(lái)自于Servlet規(guī)范中一個(gè)工具類,存在于Tomcat提供servlet-api.jar中

2)如果兩個(gè)Servlet來(lái)自于同一個(gè)網(wǎng)站,并且為同一個(gè)瀏覽器/用戶提供服務(wù),此時(shí)借助于Cookie對(duì)象進(jìn)行數(shù)據(jù)共享

3).Cookie存放當(dāng)前用戶的私人數(shù)據(jù),在共享數(shù)據(jù)過(guò)程中提高服務(wù)質(zhì)量

4).在現(xiàn)實(shí)生活場(chǎng)景中,Cookie相當(dāng)于用戶在服務(wù)端得到會(huì)員卡

2.原理:

用戶通過(guò)瀏覽器第一次向MyWeb網(wǎng)站發(fā)送請(qǐng)求申請(qǐng)OneServlet OneServlet在運(yùn)行期間創(chuàng)建一個(gè)Cookie存儲(chǔ)與當(dāng)前用戶相關(guān)數(shù)據(jù) OneServlet工作完畢后,將Cookie寫(xiě)入到響應(yīng)頭交還給當(dāng)前瀏覽器

瀏覽器收到響應(yīng)響應(yīng)包之后,將cookie存儲(chǔ)在瀏覽器的緩存

一段時(shí)間之后,用戶通過(guò)同一個(gè)瀏覽器再次向myWeb網(wǎng)站發(fā)送請(qǐng)求申請(qǐng)TwoServlet時(shí)。瀏覽器需要無(wú)條件的將myWeb網(wǎng)站之前推送過(guò)來(lái)的Cookie,寫(xiě)入到請(qǐng)求頭發(fā)送過(guò)去此時(shí)TwoServlet在運(yùn)行時(shí),就可以通過(guò)讀取請(qǐng)求頭中cookie中信息,得到OneServlet提供的共享數(shù)據(jù)

3.實(shí)現(xiàn)命令: 同一個(gè)網(wǎng)站 OneServlet 與 TwoServlet 借助于Cookie實(shí)現(xiàn)數(shù)據(jù)共享

OneServlet{

public void doGet(HttpServletRequest request,HttpServletResponse resp){

//1.創(chuàng)建一個(gè)cookie對(duì)象,保存共享數(shù)據(jù)(當(dāng)前用戶數(shù)據(jù))

Cookie card = new Cookie("key1","abc");

Cookie card1= new Cookie("key2","efg");

//cookie相當(dāng)于一個(gè)map

//一個(gè)cookie中只能存放一個(gè)鍵值對(duì)

//這個(gè)鍵值對(duì)的key與value只能是String

//鍵值對(duì)中key不能是中文

//2.【發(fā)卡】將cookie寫(xiě)入到響應(yīng)頭,交給瀏覽器

resp.addCookie(card);

resp.addCookie(card1);}

}

TwoServlet{

public void doGet(HttpServletRequest request,HttpServletResponse resp){

//1.調(diào)用請(qǐng)求對(duì)象從請(qǐng)求頭得到瀏覽器返回的Cookie

Cookie cookieArray[] = request.getCookies();

//2.循環(huán)遍歷數(shù)據(jù)得到每一個(gè)cookie的key 與 value

for(Cookie card:cookieArray){

String key = card.getName(); //讀取key "key1"

Strign value = card.getValue();//讀取value "abc"

// 提供較好的服務(wù)。。 }

}

}

4.Cookie銷毀時(shí)機(jī):

1.在默認(rèn)情況下,Cookie對(duì)象存放在瀏覽器的緩存中。因此只要瀏覽器關(guān)閉,Cookie對(duì)象就被銷毀掉

2.在手動(dòng)設(shè)置情況下,可以要求瀏覽器將接收的Cookie。存放在客戶端計(jì)算機(jī)上硬盤(pán)上,同時(shí)需要指定Cookie在硬盤(pán)上存活時(shí)間。在存活時(shí)間范圍內(nèi),關(guān)閉瀏覽器關(guān)閉客戶端計(jì)算機(jī),關(guān)閉服務(wù)器,都不會(huì)導(dǎo)致Cookie 被銷毀。在存活時(shí)間到達(dá)時(shí),Cookie自動(dòng)從硬盤(pán)上被刪除

cookie.setMaxAge(60); //cookie在硬盤(pán)上存活1分鐘

HttpSession接口:

1.介紹:

1)HttpSession接口來(lái)自于Servlet規(guī)范下一個(gè)接口。存在于Tomcat中servlet-api.jar,其實(shí)現(xiàn)類由Http服務(wù)器提供。Tomcat提供實(shí)現(xiàn)類存在于servlet-api.jar

2)如果兩個(gè)Servlet來(lái)自于同一個(gè)網(wǎng)站,并且為同一個(gè)瀏覽器/用戶提供服務(wù),此時(shí) 借助于HttpSession對(duì)象進(jìn)行數(shù)據(jù)共享

3)開(kāi)發(fā)人員習(xí)慣于將HttpSession接口修飾對(duì)象稱為【會(huì)話作用域?qū)ο蟆?/p>

2.HttpSession 與 Cookie 區(qū)別:【面試題】

1)存儲(chǔ)位置: 一個(gè)在天上,一個(gè)在地下

Cookie:存放在客戶端計(jì)算機(jī)(瀏覽器內(nèi)存/硬盤(pán))

HttpSession:存放在服務(wù)端計(jì)算機(jī)內(nèi)存

2)數(shù)據(jù)類型:

Cookie對(duì)象存儲(chǔ)共享數(shù)據(jù)類型只能是String

HttpSession對(duì)象可以存儲(chǔ)任意類型的共享數(shù)據(jù)Object

數(shù)據(jù)數(shù)量:

一個(gè)Cookie對(duì)象只能存儲(chǔ)一個(gè)共享數(shù)據(jù)

HttpSession使用map集合存儲(chǔ)共享數(shù)據(jù),所以可以存儲(chǔ)任意數(shù)量共享數(shù)據(jù)

4)參照物:

Cookie相當(dāng)于客戶在服務(wù)端【會(huì)員卡】

HttpSession相當(dāng)于客戶在服務(wù)端【私人保險(xiǎn)柜】

3.命令實(shí)現(xiàn): 同一個(gè)網(wǎng)站(myWeb)下OneServlet將數(shù)據(jù)傳遞給TwoServlet

OneServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.調(diào)用請(qǐng)求對(duì)象向Tomcat索要當(dāng)前用戶在服務(wù)端的私人儲(chǔ)物柜

HttpSession session = request.getSession();

//2.將數(shù)據(jù)添加到用戶私人儲(chǔ)物柜

session.setAttribute("key1",共享數(shù)據(jù)) }

}

//瀏覽器訪問(wèn)/myWeb中TwoServlet

TwoServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.調(diào)用請(qǐng)求對(duì)象向Tomcat索要當(dāng)前用戶在服務(wù)端的私人儲(chǔ)物柜

HttpSession session = request.getSession();

//2.從會(huì)話作用域?qū)ο蟮玫絆neServlet提供的共享數(shù)據(jù)

Object 共享數(shù)據(jù) = session.getAttribute("key1");}

}

4.Http服務(wù)器如何將用戶與HttpSession關(guān)聯(lián)起來(lái)

Tomcat在創(chuàng)建一個(gè)HttpSession對(duì)象時(shí)自動(dòng)為這個(gè)HttpSession對(duì)象生成一個(gè)編號(hào)

Tomcat將編號(hào)保存到cookie對(duì)象,推送到當(dāng)前瀏覽器緩存

cookie.JESSIONID

等到用戶第二次來(lái)訪時(shí),Tomcat根據(jù)請(qǐng)求頭JESSIONID確認(rèn)用戶是否有HttpSession以及哪一個(gè)HttpSession是當(dāng)前用戶的

5.getSession() 與 getSession(false)

1)getSession(): 如果當(dāng)前用戶在服務(wù)端已經(jīng)擁有了自己的私人儲(chǔ)物柜.要求tomcat將這個(gè)私人儲(chǔ)物柜進(jìn)行返回如果當(dāng)前用戶在服務(wù)端尚未擁有自己的私人儲(chǔ)物柜要求tocmat為當(dāng)前用戶創(chuàng)建一個(gè)全新的私人儲(chǔ)物柜

2)getSession(false):如果當(dāng)前用戶在服務(wù)端已經(jīng)擁有了自己的私人儲(chǔ)物柜. 要求tomcat將這個(gè)私人儲(chǔ)物柜進(jìn)行返回如果當(dāng)前用戶在服務(wù)端尚未擁有自己的私人儲(chǔ)物柜此時(shí)Tomcat將返回null

6.HttpSession銷毀時(shí)機(jī):

1.用戶與HttpSession關(guān)聯(lián)時(shí)使用的Cookie只能存放在瀏覽器緩存中.

2.在瀏覽器關(guān)閉時(shí),意味著用戶與他的HttpSession關(guān)系被切斷

3.由于Tomcat無(wú)法檢測(cè)瀏覽器何時(shí)關(guān)閉,因此在瀏覽器關(guān)閉時(shí)并不會(huì)導(dǎo)致Tomcat將瀏覽器關(guān)聯(lián)的HttpSession進(jìn)行銷毀

4.為了解決這個(gè)問(wèn)題,Tomcat為每一個(gè)HttpSession對(duì)象設(shè)置【空閑時(shí)間】這個(gè)空閑時(shí)間默認(rèn)30分鐘,如果當(dāng)前HttpSession對(duì)象空閑時(shí)間達(dá)到30分鐘此時(shí)Tomcat認(rèn)為用戶已經(jīng)放棄了自己的HttpSession,此時(shí)Tomcat就會(huì)銷毀掉這個(gè)HttpSession

7.HttpSession空閑時(shí)間手動(dòng)設(shè)置

在當(dāng)前網(wǎng)站/web/WEB-INF/web.xml

5

HttpServletRequest接口實(shí)現(xiàn)數(shù)據(jù)共享

1.介紹:

1) 在同一個(gè)網(wǎng)站中,如果兩個(gè)Servlet之間通過(guò)【請(qǐng)求轉(zhuǎn)發(fā)】方式進(jìn)行調(diào)用, 彼此之間共享同一個(gè)請(qǐng)求協(xié)議包。而一個(gè)請(qǐng)求協(xié)議包只對(duì)應(yīng)一個(gè)請(qǐng)求對(duì)象 因此servlet之間共享同一個(gè)請(qǐng)求對(duì)象,此時(shí)可以利用這個(gè)請(qǐng)求對(duì)象在兩個(gè)Servlet之間實(shí)現(xiàn)數(shù)據(jù)共享

2) 在請(qǐng)求對(duì)象實(shí)現(xiàn)Servlet之間數(shù)據(jù)共享功能時(shí),開(kāi)發(fā)人員將請(qǐng)求對(duì)象稱為【請(qǐng)求作用域?qū)ο蟆?/p>

2.命令實(shí)現(xiàn): OneServlet通過(guò)請(qǐng)求轉(zhuǎn)發(fā)申請(qǐng)調(diào)用TwoServlet時(shí),需要給TwoServlet提供共享數(shù)據(jù)

OneServlet{

public void doGet(HttpServletRequest req,HttpServletResponse response){

//1.將數(shù)據(jù)添加到【請(qǐng)求作用域?qū)ο蟆恐衋ttribute屬性

req.setAttribute("key1",數(shù)據(jù)); //數(shù)據(jù)類型可以任意類型Object

//2.向Tomcat申請(qǐng)調(diào)用TwoServlet

req.getRequestDispatcher("/two").forward(req,response)}

}

TwoServlet{

public void doGet(HttpServletRequest req,HttpServletResponse response){

//從當(dāng)前請(qǐng)求對(duì)象得到OneServlet寫(xiě)入到共享數(shù)據(jù)

Object 數(shù)據(jù) = req.getAttribute("key1"); }

}

總結(jié)

以上是生活随笔為你收集整理的java httpserver 多个接口_多个Servlet之间数据共享实现方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。