我們先來回顧一下各種內建物件的作用範圍:
這兩個屬性的作用範圍最小。
時間上:
只是本身請求和應答完成就失效,當然**是把當前的request物件取出來傳給另乙個資源,其實本身的request物件還是只生存到本次請求結束,response也同樣。
空間上:
只能傳送請求的客戶端有效。
:一次鏈結到客戶端關閉,時間作用範圍比上面兩個大,空間任用範圍相同。
servletconfig
:從乙個servlet被例項化後,對任何客戶端在任何時候訪問有效,但僅對本servlet有效,乙個servlet的servletconfig物件不能被另乙個servlet訪問。
servletcontext:
對任何servlet,任何人在任何時間都有效,這才是真正全域性的物件。
那麼,servletconfig引數和servletcontext引數到底應該如何使用,如何取得?
一般來說,對整個應用的配置,為了不使用「硬編碼」,應該配置為servletcontext引數,比如字符集設定。
.................charsetgb2312.................
注意以上格式只是2.0以後的標準格式,舊容器(引擎)採用服務商自己的格式配置。注意它的父元素應該是也就是說它是對乙個應用作用的。
而如果只有乙個特定的servlet要設定的引數,其它servlet不能共享,應該配置為servletconfig引數,如乙個讀取附件的servlet要用到絕對目錄,而別的servlet不會用到:
getattmail.getattservletabspath/usr/mail/ax/axman/maildir/
不用說,因為在標籤中已經指定了name和class,也就是說只有mail.getattservlet這個servlet中才能取到path,而別的servlet是不能取到的。
那麼如何訪問這兩個物件的引數呢?
訪問servletconfig引數:
首先要取得servletconfig物件,然後呼叫它的getinitparameter();方法。要訪問servletconfig物件,jsp中直接使用config內建物件,但因為你的jsp編譯後的servlet一般不會被加到web.xml中的,所以一般不會通過jsp來取對本jsp編譯後的servlet的配置引數,那麼在servlet中要得到servletconfig物件有兩種方法:
在inii()方法中取到:通過init的過載方法傳遞
然後在下面的方法中就可以訪問config物件。但要注意,為了確保能從構造方法中到到當前servlet的config物件,應該呼叫父類的構造方法:
通過getservletconfig()方法直接到時,這樣做的好處是不必調手工傳遞屬性,想在任何時候都可以得到。
還有第三種方法,要自己實現一些介面,這裡作為一般討論就不介紹了。
要訪問servletcontext物件,只要從現有的servletconfig物件getservletcontext()就可以了,然後呼叫它的getinitparameter()方法就可以獲取它的引數。
按說:servletcontext物件的作用域比servletconfig作用域大,為什麼要從servletconfig中到得servletcontext物件呢?我個人認為:容器儲存了很多個servletcontext物件,請求時容器到底取哪乙個給你呢?那就取其中包含servletconfig資訊的那個給你,就是說取servletconfig物件的父級物件。就好象httpsession要從requset中取得一樣,就是取那個包含當前requese物件的session物件給你。
J2EE中的路徑問題
解決方案 採用絕對路徑,但為了解決不同部署方式的差別,在所有非 struts 標籤的路徑前加 如原路徑為 images title.gif 改為 images title.gif 的作用是取出部署的應用程式名,這樣不管如何部署,所用路徑都是正確的。缺點 操作不便,其他工具無法正確解釋 採用相對路徑,...
j2ee自學心得
學習是一件快樂的事,學習是一件痛苦的事,它讓你能夠把學到的東西帶來財富,它也能讓你仁慈學到的東西帶來無用武之地 看書 當你買了一本新書的時候,不要瀑布式的往下看,這是傳統的學習方法,不適合 現代高科技社會的學習方法,尤其是電腦科學,為什麼以前的瀑布式軟體開發方法到 今天會失敗,因為瀑布式的方法很難看...
j2ee配置指南
j2ee配置指南 1。介紹 本文介紹j2ee環境的配置,所有涉及的檔案都在j2ee安裝目錄下的oncfig目錄,這些檔案都是文字檔案,你可以有任意的文字編輯器來編輯它們。通常情況下,你沒有改變這些檔案的必要。但是如果你使用的資料庫驅動不是cloudscape的時候,你需要 遵循本章的內容進行配置。2...