隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
          數據加載中……

          ServletConfig和ServletConfig參數訪問.

          關于Config參數和Context參數的訪問

              雖然在論壇中已經回答過不止一次,但現在看來,真正掌握這兩個參數的區別的人5%都不到.
              所以有必要專門寫出來,供大家學習.

              我們先來回顧一下各種內置對象的作用范圍

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

              HttpSession:一次連結到客戶端關閉,時間作用范圍比上面兩個大,空間任用范圍相同。

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

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

              那么,ServletConfig參數和ServletContext參數到底應該如何使用,如何取得?

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

              而如果只有一個特定的servlet要設定的參數,其它servlet不能共享,應該配置為ServletConfig
              參數,如一個讀取附件的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>
              不用說,因為在<servlet>標簽中已經指定了name和class,也就是說只有mail.GetAttServlet這個
              servlet中才能取到path,而別的Servlet是不能取到的。

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

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

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

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

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

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

              按說:ServletContext對象的作用域比ServletConfig作用域大,為什么要從ServletConfig中到得
              ServletContext對象呢?我個人認為:容器保存了很多個ServletContext對象,請求時容器到底取哪一個
              給你呢?那就取其中包含ServletConfig信息的那個給你,就是說取ServletConfig對象的父級對象。就好
              象HttpSession要從requset中取得一樣,就是取那個包含當前requese對象的session對象給你,這只是我
              的個人想法,還沒有來得及看具體實現。反正就這么用吧。

          posted on 2005-02-12 23:18 閱讀(370) 評論(1)  編輯  收藏 所屬分類: J2ee

          評論

          # re: ServletConfig和ServletConfig參數訪問.   回復  更多評論   

          好象說反了吧?
          servletConfig 要比servletContext 范圍大:
          下面是j2ee api的原話:
          ServletConfig:
          A servlet configuration object used by a servlet container to pass information to a servlet during initialization.
          他是serverlet 容器的環境
          servletContext:
          Defines a set of methods that a servlet uses to communicate with its servlet container.
          ...
          The ServletContext object is contained within the ServletConfig object, which the Web server provides the servlet when the servlet is initialized.
          不是說ServletContext被ServletConfig包含.他是每個Servlet的環境.



          2005-07-22 11:48 | 東風破
          主站蜘蛛池模板: 凤台县| 兴安县| 泸州市| 临夏县| 昌乐县| 阿拉善左旗| 奉化市| 田东县| 油尖旺区| 麻城市| 永新县| 象山县| 九台市| 东海县| 和平区| 恭城| 自贡市| 谷城县| 台东市| 临泽县| 东明县| 蛟河市| 广宁县| 河津市| 饶阳县| 蓝山县| 宁波市| 徐闻县| 根河市| 遂平县| 黄平县| 前郭尔| 襄樊市| 沙坪坝区| 虎林市| 伊川县| 阳新县| 吉隆县| 安西县| 渭源县| 从江县|