java httpserver 多个接口_多个Servlet之间数据共享实现方案
1.數據共享:OneServlet工作完畢后,將產生數據交給TwoServlet來使用
Servlet規范中提供四種數據共享方案
1.ServletContext接口
2.Cookie類
3.HttpSession接口
4.HttpServletRequest接口
ServletContext接口:
1.介紹:
1)來自于Servlet規范中一個接口。在Tomcat中存在servlet-api.jar在Tomcat中負責提供這個接口實現類
2)如果兩個Servlet來自于同一個網站。彼此之間通過網站的ServletContext 實例對象實現數據共享
3)開發人員習慣于將ServletContext對象稱為【全局作用域對象】
2.工作原理:
每一個網站都存在一個全局作用域對象。 這個全局作用域對象【相當于】一個Map.在這個網站中OneServlet可以將一個數據存入到全局作用域對象,當前網站中其他Servlet此時都可以從全局作用域對象得到這個數據進行使用
3.全局作用域對象生命周期:
1)在Http服務器啟動過程中,自動為當前網站在內存中創建一個全局作用域對象
2)在Http服務器運行期間時,一個網站只有一個全局作用域對象
3)在Http服務器運行期間,全局作用域對象一直處于存活狀態
4)在Http服務器準備關閉時,負責將當前網站中全局作用域對象進行銷毀處理
全局作用域對象生命周期貫穿網站整個運行期間
4.命令實現: 【同一個網站】OneServlet將數據共享給TwoServlet
OneServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
//1.通過【請求對象】向Tomcat索要當前網站中【全局作用域對象】
ServletContext application = request.getServletContext();
//2.將數據添加到全局作用域對象作為【共享數據】
application.setAttribute("key1",數據) }
}
TwoServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
//1.通過【請求對象】向Tomcat索要當前網站中【全局作用域對象】
ServletContext application = request.getServletContext();
//2.從全局作用域對象得到指定關鍵字對應數據
Object 數據 = application.getAttribute("key1"); }
}
Cookie:
1.介紹:
1)Cookie來自于Servlet規范中一個工具類,存在于Tomcat提供servlet-api.jar中
2)如果兩個Servlet來自于同一個網站,并且為同一個瀏覽器/用戶提供服務,此時借助于Cookie對象進行數據共享
3).Cookie存放當前用戶的私人數據,在共享數據過程中提高服務質量
4).在現實生活場景中,Cookie相當于用戶在服務端得到會員卡
2.原理:
用戶通過瀏覽器第一次向MyWeb網站發送請求申請OneServlet OneServlet在運行期間創建一個Cookie存儲與當前用戶相關數據 OneServlet工作完畢后,將Cookie寫入到響應頭交還給當前瀏覽器
瀏覽器收到響應響應包之后,將cookie存儲在瀏覽器的緩存
一段時間之后,用戶通過同一個瀏覽器再次向myWeb網站發送請求申請TwoServlet時。瀏覽器需要無條件的將myWeb網站之前推送過來的Cookie,寫入到請求頭發送過去此時TwoServlet在運行時,就可以通過讀取請求頭中cookie中信息,得到OneServlet提供的共享數據
3.實現命令: 同一個網站 OneServlet 與 TwoServlet 借助于Cookie實現數據共享
OneServlet{
public void doGet(HttpServletRequest request,HttpServletResponse resp){
//1.創建一個cookie對象,保存共享數據(當前用戶數據)
Cookie card = new Cookie("key1","abc");
Cookie card1= new Cookie("key2","efg");
//cookie相當于一個map
//一個cookie中只能存放一個鍵值對
//這個鍵值對的key與value只能是String
//鍵值對中key不能是中文
//2.【發卡】將cookie寫入到響應頭,交給瀏覽器
resp.addCookie(card);
resp.addCookie(card1);}
}
TwoServlet{
public void doGet(HttpServletRequest request,HttpServletResponse resp){
//1.調用請求對象從請求頭得到瀏覽器返回的Cookie
Cookie cookieArray[] = request.getCookies();
//2.循環遍歷數據得到每一個cookie的key 與 value
for(Cookie card:cookieArray){
String key = card.getName(); //讀取key "key1"
Strign value = card.getValue();//讀取value "abc"
// 提供較好的服務。。 }
}
}
4.Cookie銷毀時機:
1.在默認情況下,Cookie對象存放在瀏覽器的緩存中。因此只要瀏覽器關閉,Cookie對象就被銷毀掉
2.在手動設置情況下,可以要求瀏覽器將接收的Cookie。存放在客戶端計算機上硬盤上,同時需要指定Cookie在硬盤上存活時間。在存活時間范圍內,關閉瀏覽器關閉客戶端計算機,關閉服務器,都不會導致Cookie 被銷毀。在存活時間到達時,Cookie自動從硬盤上被刪除
cookie.setMaxAge(60); //cookie在硬盤上存活1分鐘
HttpSession接口:
1.介紹:
1)HttpSession接口來自于Servlet規范下一個接口。存在于Tomcat中servlet-api.jar,其實現類由Http服務器提供。Tomcat提供實現類存在于servlet-api.jar
2)如果兩個Servlet來自于同一個網站,并且為同一個瀏覽器/用戶提供服務,此時 借助于HttpSession對象進行數據共享
3)開發人員習慣于將HttpSession接口修飾對象稱為【會話作用域對象】
2.HttpSession 與 Cookie 區別:【面試題】
1)存儲位置: 一個在天上,一個在地下
Cookie:存放在客戶端計算機(瀏覽器內存/硬盤)
HttpSession:存放在服務端計算機內存
2)數據類型:
Cookie對象存儲共享數據類型只能是String
HttpSession對象可以存儲任意類型的共享數據Object
數據數量:
一個Cookie對象只能存儲一個共享數據
HttpSession使用map集合存儲共享數據,所以可以存儲任意數量共享數據
4)參照物:
Cookie相當于客戶在服務端【會員卡】
HttpSession相當于客戶在服務端【私人保險柜】
3.命令實現: 同一個網站(myWeb)下OneServlet將數據傳遞給TwoServlet
OneServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
//1.調用請求對象向Tomcat索要當前用戶在服務端的私人儲物柜
HttpSession session = request.getSession();
//2.將數據添加到用戶私人儲物柜
session.setAttribute("key1",共享數據) }
}
//瀏覽器訪問/myWeb中TwoServlet
TwoServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
//1.調用請求對象向Tomcat索要當前用戶在服務端的私人儲物柜
HttpSession session = request.getSession();
//2.從會話作用域對象得到OneServlet提供的共享數據
Object 共享數據 = session.getAttribute("key1");}
}
4.Http服務器如何將用戶與HttpSession關聯起來
Tomcat在創建一個HttpSession對象時自動為這個HttpSession對象生成一個編號
Tomcat將編號保存到cookie對象,推送到當前瀏覽器緩存
cookie.JESSIONID
等到用戶第二次來訪時,Tomcat根據請求頭JESSIONID確認用戶是否有HttpSession以及哪一個HttpSession是當前用戶的
5.getSession() 與 getSession(false)
1)getSession(): 如果當前用戶在服務端已經擁有了自己的私人儲物柜.要求tomcat將這個私人儲物柜進行返回如果當前用戶在服務端尚未擁有自己的私人儲物柜要求tocmat為當前用戶創建一個全新的私人儲物柜
2)getSession(false):如果當前用戶在服務端已經擁有了自己的私人儲物柜. 要求tomcat將這個私人儲物柜進行返回如果當前用戶在服務端尚未擁有自己的私人儲物柜此時Tomcat將返回null
6.HttpSession銷毀時機:
1.用戶與HttpSession關聯時使用的Cookie只能存放在瀏覽器緩存中.
2.在瀏覽器關閉時,意味著用戶與他的HttpSession關系被切斷
3.由于Tomcat無法檢測瀏覽器何時關閉,因此在瀏覽器關閉時并不會導致Tomcat將瀏覽器關聯的HttpSession進行銷毀
4.為了解決這個問題,Tomcat為每一個HttpSession對象設置【空閑時間】這個空閑時間默認30分鐘,如果當前HttpSession對象空閑時間達到30分鐘此時Tomcat認為用戶已經放棄了自己的HttpSession,此時Tomcat就會銷毀掉這個HttpSession
7.HttpSession空閑時間手動設置
在當前網站/web/WEB-INF/web.xml
5
HttpServletRequest接口實現數據共享
1.介紹:
1) 在同一個網站中,如果兩個Servlet之間通過【請求轉發】方式進行調用, 彼此之間共享同一個請求協議包。而一個請求協議包只對應一個請求對象 因此servlet之間共享同一個請求對象,此時可以利用這個請求對象在兩個Servlet之間實現數據共享
2) 在請求對象實現Servlet之間數據共享功能時,開發人員將請求對象稱為【請求作用域對象】
2.命令實現: OneServlet通過請求轉發申請調用TwoServlet時,需要給TwoServlet提供共享數據
OneServlet{
public void doGet(HttpServletRequest req,HttpServletResponse response){
//1.將數據添加到【請求作用域對象】中attribute屬性
req.setAttribute("key1",數據); //數據類型可以任意類型Object
//2.向Tomcat申請調用TwoServlet
req.getRequestDispatcher("/two").forward(req,response)}
}
TwoServlet{
public void doGet(HttpServletRequest req,HttpServletResponse response){
//從當前請求對象得到OneServlet寫入到共享數據
Object 數據 = req.getAttribute("key1"); }
}
總結
以上是生活随笔為你收集整理的java httpserver 多个接口_多个Servlet之间数据共享实现方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: d3 mysql_javascript
- 下一篇: php 文章读取_php实现获取文章内容