Java軟件報(bào)表軟件技術(shù)博客

          java報(bào)表軟件技術(shù)匯總 java報(bào)表軟件制作 報(bào)表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          1. 報(bào)表session與應(yīng)用session

          報(bào)表集成到項(xiàng)目中可能會有一個(gè)疑問就是系統(tǒng)應(yīng)用和報(bào)表應(yīng)用在一個(gè)web服務(wù)器下,那系統(tǒng)session和報(bào)表session是不是一個(gè)session呢?如果不是那會不會有沖突呢?

          答案是:不是同一個(gè)session也不會起沖突,因?yàn)閼?yīng)用的session存放的是request請求等一些共享信息,而報(bào)表session存放的是訪問報(bào)表的相關(guān)信息,如訪問的是不是同一個(gè)模板等,兩者是完全獨(dú)立,所以不會沖突。

          2. 報(bào)表開發(fā)工具FineReport中創(chuàng)建與關(guān)閉session機(jī)制

          正常情況下,當(dāng)客戶端瀏覽器訪問報(bào)表服務(wù)器端的某張報(bào)表時(shí),便會產(chǎn)生一個(gè)session會話,當(dāng)用戶關(guān)閉瀏覽器的時(shí)候就會通知報(bào)表服務(wù)器關(guān)閉這個(gè)session,但不會使保存在服務(wù)器端的session對象消失,同樣也不會使已經(jīng)保存到硬盤上的持久化cookie消失。

          若用戶的機(jī)器由于某種原因如非正常關(guān)機(jī)等等導(dǎo)致瀏覽器非正常關(guān)閉時(shí),服務(wù)器沒有收到關(guān)閉這個(gè)session的信息,會一直保存這個(gè)不必要的session。為了解決這個(gè)問題,我們軟件中提供了這樣一種機(jī)制,瀏覽器每隔40秒向服務(wù)器發(fā)送一個(gè)“i am alive”信息,若報(bào)表服務(wù)器一分鐘沒有收到這個(gè)信息便會自動(dòng)關(guān)閉這個(gè)session。當(dāng)瀏覽器遇到非正常停止時(shí),便不會發(fā)送“i am alive”信息,相應(yīng)的session不會在一分鐘以內(nèi)被關(guān)閉。

          3. session基本概念

          session機(jī)制本身并不復(fù)雜,然而其實(shí)現(xiàn)和配置上的靈活性卻使得具體情況復(fù)雜多變。這也要求我們不能把僅僅某一次的經(jīng)驗(yàn)或者某一個(gè)瀏覽器,服務(wù)器的經(jīng)驗(yàn)當(dāng)作普遍適用的經(jīng)驗(yàn),而是始終需要具體情況具體分析。

          通俗的說:客戶端瀏覽器訪問某個(gè)地址,發(fā)送了一個(gè)請求,就產(chǎn)生一個(gè)session會話,現(xiàn)在的瀏覽器都可以打開多個(gè)tab窗口,打開的都屬于一個(gè)session,當(dāng)該瀏覽器關(guān)閉的時(shí)候session就關(guān)閉了。若不關(guān)閉該瀏覽器,再次打開一個(gè)瀏覽器,會重新創(chuàng)建一個(gè)session。

          3.1 session在何時(shí)被創(chuàng)建

          一個(gè)常見的誤解是以為session在有客戶端訪問時(shí)就被創(chuàng)建,然而事實(shí)是直到某server端程序調(diào)用HttpServletRequest.getSession(true)這樣的語句時(shí)才被創(chuàng)建,注意如果JSP沒有顯示的使用<%@page session="false"%>關(guān)閉session,則JSP文件在編譯成Servlet時(shí)將會自動(dòng)加上這樣一條語句HttpSession session = HttpServletRequest.getSession(true),這也是JSP中隱含的session對象的來歷。

          由于session會消耗內(nèi)存資源,因此,如果不打算使用session,應(yīng)該在所有的JSP中關(guān)閉它。

          3.2 session何時(shí)被刪除

          綜合前面的討論,session在下列情況下被刪除:

          a、程序調(diào)用HttpSession.invalidate() b、距離上一次收到客戶端發(fā)送的session id時(shí)間間隔超過了session的最大有效時(shí)間 c、服務(wù)器進(jìn)程被停止

          3.3 如何做到在瀏覽器關(guān)閉時(shí)刪除session

          嚴(yán)格的講,做不到這一點(diǎn)。可以做一點(diǎn)努力的辦法是在所有的客戶端頁面里使用javascript代碼window.oncolose來監(jiān)視瀏覽器的關(guān)閉動(dòng)作,然后向服務(wù)器發(fā)送一個(gè)請求來刪除session。但是對于瀏覽器崩潰或者強(qiáng)行殺死進(jìn)程這些非常規(guī)手段仍然無能為力。




          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 清苑县| 绥中县| 清水河县| 东明县| 庆安县| 武威市| 阿拉善左旗| 页游| 慈溪市| 洪湖市| 九龙坡区| 桂平市| 兴海县| 景德镇市| 湖口县| 深圳市| 湖州市| 临朐县| 浑源县| 灵武市| 蓬安县| 灯塔市| 安顺市| 禹城市| 奎屯市| 厦门市| 通榆县| 陆丰市| 正镶白旗| 犍为县| 特克斯县| 东乌珠穆沁旗| 临潭县| 吉林省| 龙岩市| 开封市| 三明市| 仙游县| 阿城市| 集贤县| 迁安市|