国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于Config參數和Context參數的訪

2019-11-18 12:27:50
字體:
來源:轉載
供稿:網友

  雖然在論壇中已經回答過不止一次,但現在看來,真正把握這兩個參數的區別的人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對象給你,這只是我的個人想法,還沒有來得及看具體實現。反正就這么用吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河东区| 灵台县| 德惠市| 米泉市| 崇信县| 民勤县| 大邑县| 长葛市| 盐津县| 仁怀市| 南陵县| 小金县| 抚顺市| 廉江市| 赫章县| 屯留县| 大邑县| 安图县| 黄冈市| 石阡县| 铁岭市| 海林市| 白沙| 鄂温| 黄梅县| 开封县| 遂昌县| 凌云县| 久治县| 巫溪县| 信阳市| 会泽县| 福安市| 娱乐| 金寨县| 锦州市| 潞西市| 濮阳县| 中超| 卢湾区| 德安县|