<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    飛艷小屋

    程序--人生--哲學(xué)___________________歡迎艷兒的加入

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
    關(guān)于Config參數(shù)和Context參數(shù)的訪問

    雖然在論壇中已經(jīng)回答過不止一次,但現(xiàn)在看來,真正掌握這兩個(gè)參數(shù)的區(qū)別的人5%都不到.
    所以有必要專門寫出來,供大家學(xué)習(xí).

    我們先來回顧一下各種內(nèi)置對象的作用范圍

    HttpServletRequest,HttpServletResponse:這兩個(gè)屬性的作用范圍最小。
    時(shí)間上:只是本身請求和應(yīng)答完成就失效,當(dāng)然轉(zhuǎn)發(fā)是把當(dāng)前的request對象取出來傳給另一
    ??????個(gè)資源,其實(shí)本身的request對象還是只生存到本次請求結(jié)束,response也同樣。
    空間上:只能發(fā)送請求的客戶端有效。

    HttpSession:一次連結(jié)到客戶端關(guān)閉,時(shí)間作用范圍比上面兩個(gè)大,空間任用范圍相同。

    ServletConfig:從一個(gè)servlet被實(shí)例化后,對任何客戶端在任何時(shí)候訪問有效,但僅對本servlet
    有效,一個(gè)servlet的ServletConfig對象不能被另一個(gè)servlet訪問。

    ServletContext:對任何servlet,任何人在任何時(shí)間都有效,這才是真正全局的對象。

    那么,ServletConfig參數(shù)和ServletContext參數(shù)到底應(yīng)該如何使用,如何取得?

    一般來說,對整個(gè)應(yīng)用的配置,為了不使用“硬編碼”,應(yīng)該配置為ServletContext參數(shù),比如字
    符集設(shè)定。
    <web-app>
    .................
    <init-param>
    <param-name>charset</param-name>?
    <param-value>GB2312</param-value>?
    </init-param>
    .................
    </web-app>
    注意以上格式只是2。0以后的標(biāo)準(zhǔn)格式,舊容器(引擎)采用服務(wù)商自己的格式配置。注意它的
    父元素應(yīng)該是<web-app>也就是說它是對一個(gè)應(yīng)用作用的。

    而如果只有一個(gè)特定的servlet要設(shè)定的參數(shù),其它servlet不能共享,應(yīng)該配置為ServletConfig
    參數(shù),如一個(gè)讀取附件的servlet要用到絕對目錄,而別的servlet不會用到:
    <servlet>
    ????????<servlet-name>GetAtt</servlet-name>
    <servlet-class>mail.GetAttServlet</servlet-class>
    <init-param>
    <param-name>absPath</param-name>?
    <param-value>/usr/mail/ax/axman/Maildir/</param-value>?
    </init-param>
    </servlet>
    不用說,因?yàn)樵?lt;servlet>標(biāo)簽中已經(jīng)指定了name和class,也就是說只有mail.GetAttServlet這個(gè)
    servlet中才能取到path,而別的Servlet是不能取到的。

    那么如何訪問這兩個(gè)對象的參數(shù)呢?
    訪問ServletConfig參數(shù):
    首先要取得ServletConfig對象,然后調(diào)用它的getInitParameter();方法。要訪問
    ServletConfig對象,jsp中直接使用config內(nèi)置對象,但因?yàn)槟愕腏SP編譯后的servlet一般不會被
    加到web.xml中的,所以一般不會通過jsp來取對本JSP編譯后的servlet的配置參數(shù),那么在servlet
    中要得到ServletConfig對象有兩種方法:

    在inii()方法中取到:通過init的重載方法傳遞

    .....
    public?class?Test?extends?HttpServlet?
    {
    ServletConfig?config;
    public?void?init(ServletConfig?config)?throws?ServletException?{
    this.config?=?config;
    }
    ..................
    }
    然后在下面的方法中就可以訪問config對象。但要注意,為了確保能從構(gòu)造方法中到到當(dāng)前servlet的
    config對象,應(yīng)該調(diào)用父類的構(gòu)造方法:
    .....
    public?class?Test?extends?HttpServlet?
    {
    ServletConfig?config;
    public?void?init(ServletConfig?config)?throws?ServletException?{
    super.init(config);
    this.config?=?config;
    }
    ..................
    }

    通過getServletConfig()方法直接到時(shí),這樣做的好處是不必調(diào)手工傳遞屬性,想在任何時(shí)候都可
    以得到。

    還有第三種方法,要自己實(shí)現(xiàn)一些接口,這里作為一般討論就不介紹了。

    要訪問ServletContext對象,只要從現(xiàn)有的ServletConfig對象getServletContext()就可以了,然后
    調(diào)用它的getInitParameter()方法就可以獲取它的參數(shù)。

    按說:ServletContext對象的作用域比ServletConfig作用域大,為什么要從ServletConfig中到得
    ServletContext對象呢?我個(gè)人認(rèn)為:容器保存了很多個(gè)ServletContext對象,請求時(shí)容器到底取哪一個(gè)
    給你呢?那就取其中包含ServletConfig信息的那個(gè)給你,就是說取ServletConfig對象的父級對象。就好
    象HttpSession要從requset中取得一樣,就是取那個(gè)包含當(dāng)前requese對象的session對象給你,這只是我
    的個(gè)人想法,還沒有來得及看具體實(shí)現(xiàn)。反正就這么用吧。
    posted on 2006-03-20 13:05 天外飛仙 閱讀(277) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: AA免费观看的1000部电影| 大片免费观看92在线视频线视频| 日韩精品免费在线视频| 亚洲女久久久噜噜噜熟女| 72pao国产成视频永久免费| 亚洲日韩中文字幕日韩在线| 日韩毛片免费一二三| 亚洲人成无码www久久久| 国产免费一级高清淫曰本片| 亚洲线精品一区二区三区| 久久国产精品免费| 亚洲国产婷婷六月丁香| 免费无码VA一区二区三区| 亚洲精品一区二区三区四区乱码 | 亚洲日本乱码一区二区在线二产线| 5555在线播放免费播放| 亚洲成a人片在线观看精品| 我想看一级毛片免费的| 粉色视频在线观看www免费| 久久精品国产亚洲7777| 无码日韩精品一区二区三区免费 | 精品国产呦系列在线观看免费| 在线播放亚洲第一字幕| 一级毛片在线观看免费| 学生妹亚洲一区二区| 免费中文字幕一级毛片| 免费看无码特级毛片| 亚洲免费黄色网址| 日本视频免费在线| 本免费AV无码专区一区| 亚洲欧洲日产国码二区首页| 国产精品二区三区免费播放心| 精品久久久久久国产免费了 | 嫩草影院免费观看| 青青草国产免费国产是公开| 亚洲精品综合一二三区在线| 女人18毛片水真多免费播放| 花蝴蝶免费视频在线观看高清版| 亚洲人成免费网站| 亚洲一级片免费看| 免费黄色一级毛片|