servlet session持久化
1、 session持久化是什么?? web服務(wù)器把?session中存儲(chǔ)的屬性存儲(chǔ)到本地磁盤或數(shù)據(jù)庫中;?
2、為什么需要持久化? 因?yàn)?session是服務(wù)器維護(hù)會(huì)話狀態(tài)的對(duì)象,即便客戶端關(guān)閉連接或客戶端長時(shí)間沒有訪問,服務(wù)器還依然存儲(chǔ)了客戶端的訪問數(shù)據(jù),浪費(fèi)了服務(wù)器資源;
為了提高服務(wù)器內(nèi)存利用率,其會(huì)將暫時(shí)不活動(dòng)但未超時(shí)的 session對(duì)象 存儲(chǔ)到本地或數(shù)據(jù)庫(持久化或序列化); 一旦服務(wù)器想要恢復(fù) 之前某客戶的訪問狀態(tài)時(shí),就可以從本地或數(shù)據(jù)庫恢復(fù)他們到內(nèi)存(反序列化);
3、session持久化怎么做 ??
看個(gè)荔枝(代碼轉(zhuǎn)自張孝祥):
// servlet 持久化 public class PersistentServlet extends HttpServlet {public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();HttpSession session = request.getSession();Student1 student1 = (Student1)session.getAttribute("student1");if(student1 == null){student1 = new Student1();student1.setValue(35);session.setAttribute("student1",student1);out.println("將student1保存到了Session中!<br>");}else{out.println("讀取student1:" + student1.getValue() + "<br>");}Student2 student2 = (Student2)session.getAttribute("student2");if(student2 == null){student2 = new Student2();student2.setValue(33);session.setAttribute("student2",student2);out.println("將student2保存到了Session中!<br>");}else{out.println("讀取student2:" + student2.getValue() + "<br>");}} } // 沒有實(shí)現(xiàn)序列化接口 Serializable public class Student1 {private int value = 0;public void setValue(int value){this.value = value;}public int getValue(){return value;} }// 實(shí)現(xiàn)序列化接口 Serializable public class Student2 implements Serializable {private int value = 0;public void setValue(int value){this.value = value;}public int getValue(){return value;} }訪問步驟;
1、第一次訪問 , 因?yàn)閟ession 沒有會(huì)話信息,所以先保存;?
2、點(diǎn)擊刷新; 讀取第1次訪問時(shí),存儲(chǔ)的會(huì)話信息;??
3、這時(shí)關(guān)閉 tomcat 服務(wù)器; tomcat 會(huì)把session中的屬性從內(nèi)容持久化到本地文件, 路徑? ?tomcat\work\Catalina\localhost\myweb2?
4、再次啟動(dòng) tomcat 服務(wù)器, 再次訪問; 這時(shí)由于 student1 沒有實(shí)現(xiàn)Serializable 序列化接口,所以該對(duì)象沒有被持久化到本地;而 student2 實(shí)現(xiàn)了Serializable接口,其信息被持久化到本地,即可以恢復(fù)上一次會(huì)話;
?
?
?
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的servlet session持久化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: discuz怎么套用模版(discuz模
- 下一篇: servlet session 跟踪用户