1.采用Ant進(jìn)行診斷測(cè)試
ant越來(lái)越方便了,可以幫我們做很多重復(fù)性的工作,對(duì)于我來(lái)說(shuō)目前有幾點(diǎn)是比較方便的,
首先脫離了IDE的限制,不同的IDE同時(shí)工作沒(méi)問(wèn)題,其次,自動(dòng)打包發(fā)布,不用再鼠標(biāo)點(diǎn)來(lái)點(diǎn)去的.
最后,ant的一些其他功能也很好,比如上面所說(shuō)的診斷測(cè)試,另外還有每日構(gòu)建,checkstyle等等.是不是很有用?
2.
Macromedia Flex跟Java的集成
key word: RIA,富客戶端
富客戶端定將是一個(gè)趨勢(shì),技術(shù)總是這樣發(fā)展,發(fā)展了A技術(shù)后發(fā)展了一個(gè)B技術(shù),最終會(huì)在A和B之間有一個(gè)權(quán)衡,CS/BS也是如此,以后也許應(yīng)該叫DS了吧? :)
3.
session詳解key word : session與cookie,無(wú)狀態(tài),有狀態(tài),會(huì)話
摘要:


1、session在何時(shí)被創(chuàng)建
一個(gè)常見(jiàn)的誤解是以為session在有客戶端訪問(wèn)時(shí)就被創(chuàng)建,然而事實(shí)是直到某server端程序調(diào)用 HttpServletRequest.getSession(true)這樣的語(yǔ)句時(shí)才被創(chuàng)建,注意如果JSP沒(méi)有顯示的使用 <% @page session="false"%> 關(guān)閉session,則JSP文件在編譯成Servlet時(shí)將會(huì)自動(dòng)加上這樣一條語(yǔ)句 HttpSession session = HttpServletRequest.getSession(true);這也是JSP中隱含的 session對(duì)象的來(lái)歷。
由于session會(huì)消耗內(nèi)存資源,因此,如果不打算使用session,應(yīng)該在所有的JSP中關(guān)閉它。
2、session何時(shí)被刪除
綜合前面的討論,session在下列情況下被刪除a.程序調(diào)用HttpSession.invalidate();或b.距離上一次收到客戶端發(fā)送的session id時(shí)間間隔超過(guò)了session的超時(shí)設(shè)置;或c.服務(wù)器進(jìn)程被停止(非持久session)
3、如何做到在瀏覽器關(guān)閉時(shí)刪除session
嚴(yán)格的講,做不到這一點(diǎn)。可以做一點(diǎn)努力的辦法是在所有的客戶端頁(yè)面里使用javascript代碼window.oncolose來(lái)監(jiān)視瀏覽器的關(guān)閉動(dòng)作,然后向服務(wù)器發(fā)送一個(gè)請(qǐng)求來(lái)刪除session。但是對(duì)于瀏覽器崩潰或者強(qiáng)行殺死進(jìn)程這些非常規(guī)手段仍然無(wú)能為力。
4、有個(gè)HttpSessionListener是怎么回事
你可以創(chuàng)建這樣的listener去監(jiān)控session的創(chuàng)建和銷毀事件,使得在發(fā)生這樣的事件時(shí)你可以做一些相應(yīng)的工作。注意是session的創(chuàng)建和銷毀動(dòng)作觸發(fā)listener,而不是相反。類似的與HttpSession有關(guān)的listener還有 HttpSessionBindingListener,HttpSessionActivationListener和 HttpSessionAttributeListener。
5、存放在session中的對(duì)象必須是可序列化的嗎
不是必需的。要求對(duì)象可序列化只是為了session能夠在集群中被復(fù)制或者能夠持久保存或者在必要時(shí)server能夠暫時(shí)把session交換出內(nèi)存。在 Weblogic Server的session中放置一個(gè)不可序列化的對(duì)象在控制臺(tái)上會(huì)收到一個(gè)警告。我所用過(guò)的某個(gè)iPlanet版本如果 session中有不可序列化的對(duì)象,在session銷毀時(shí)會(huì)有一個(gè)Exception,很奇怪。
6、如何才能正確的應(yīng)付客戶端禁止cookie的可能性
對(duì)所有的URL使用URL重寫,包括超鏈接,form的action,和重定向的URL,具體做法參見(jiàn)[6]
http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770
7、開(kāi)兩個(gè)瀏覽器窗口訪問(wèn)應(yīng)用程序會(huì)使用同一個(gè)session還是不同的session
參見(jiàn)第三小節(jié)對(duì)cookie的討論,對(duì)session來(lái)說(shuō)是只認(rèn)id不認(rèn)人,因此不同的瀏覽器,不同的窗口打開(kāi)方式以及不同的cookie存儲(chǔ)方式都會(huì)對(duì)這個(gè)問(wèn)題的答案有影響。
8、如何防止用戶打開(kāi)兩個(gè)瀏覽器窗口操作導(dǎo)致的session混亂
這個(gè)問(wèn)題與防止表單多次提交是類似的,可以通過(guò)設(shè)置客戶端的令牌來(lái)解決。就是在服務(wù)器每次生成一個(gè)不同的id返回給客戶端,同時(shí)保存在session里,客戶端提交表單時(shí)必須把這個(gè)id也返回服務(wù)器,程序首先比較返回的id與保存在session里的值是否一致,如果不一致則說(shuō)明本次操作已經(jīng)被提交過(guò)了。可以參看《J2EE核心模式》關(guān)于表示層模式的部分。需要注意的是對(duì)于使用javascript window.open打開(kāi)的窗口,一般不設(shè)置這個(gè)id,或者使用單獨(dú)的id,以防主窗口無(wú)法操作,建議不要再window.open打開(kāi)的窗口里做修改操作,這樣就可以不用設(shè)置。
9、為什么在Weblogic Server中改變session的值后要重新調(diào)用一次session.setValue
做這個(gè)動(dòng)作主要是為了在集群環(huán)境中提示W(wǎng)eblogic Server session中的值發(fā)生了改變,需要向其他服務(wù)器進(jìn)程復(fù)制新的session值。
10、為什么session不見(jiàn)了
排除session正常失效的因素之外,服務(wù)器本身的可能性應(yīng)該是微乎其微的,雖然筆者在iPlanet6SP1加若干補(bǔ)丁的Solaris版本上倒也遇到過(guò);瀏覽器插件的可能性次之,筆者也遇到過(guò)3721插件造成的問(wèn)題;理論上防火墻或者代理服務(wù)器在cookie處理上也有可能會(huì)出現(xiàn)問(wèn)題。
出現(xiàn)這一問(wèn)題的大部分原因都是程序的錯(cuò)誤,最常見(jiàn)的就是在一個(gè)應(yīng)用程序中去訪問(wèn)另外一個(gè)應(yīng)用程序。我們?cè)谙乱还?jié)討論這個(gè)問(wèn)題。