一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ServletConfig與ServletContext對象詳解

 liang1234_ 2018-08-01

一、ServletConfig對象
   在Servlet的配置文件中,可以使用一個或多個<init-param>標(biāo)簽為servlet配置一些初始化參數(shù)。(配置在某個servlet標(biāo)簽或者整個web-app下)

   當(dāng)servlet配置了初始化參數(shù)后,web容器在創(chuàng)建servlet實例對象時,會自動將這些初始化參數(shù)封裝到ServletConfig對象中,并在調(diào)用servlet的init方法時,將ServletConfig對象傳遞給servlet。進而,程序員通過ServletConfig對象就可以得到當(dāng)前servlet的初始化參數(shù)信息。

首先,需要創(chuàng)建私有變量:private ServletConfig config = null;

其次,要重寫init方法,傳入config,令this.config = config;從而獲得ServletConfig對象

最后,就可以獲得<init-parm>中的配置信息了

//獲取初始化參數(shù)
  String value1 =this.config.getInitParameter("x1");

//獲得配置文檔中<init-param>標(biāo)簽下name對應(yīng)的value
  String vlaue2 =this.config.getInitParameter("x2");
  
  //2.獲取所有的初始化參數(shù)(用Enumeration接收)
  Enumeration e =this.config.getInitParameterNames();
  while(e.hasMoreElements()){
   String name =(String) e.nextElement();
   String value= this.config.getInitParameter(name);
   System.out.println(name+ "=" + value);
  }

   在開發(fā)中ServletConfig的作用有如下三個:

1)獲得字符集編碼

  String charset =this.config.getInitParameter("charset");
2)獲得數(shù)據(jù)庫連接信息

  String url =this.config.getInitParameter("url");
  String username =this.config.getInitParameter("username");
  String password =this.config.getInitParameter("password");
3)獲得配置文件

  String configFile =this.config.getInitParameter("config");


二、ServletContext對象

 WEB容器在啟動時,它會為每個WEB應(yīng)用程序都創(chuàng)建一個對應(yīng)的ServletContext對象,它代表當(dāng)前web應(yīng)用。

 1)ServletContext對象應(yīng)用1:多個web組件之間使用它實現(xiàn)數(shù)據(jù)共享

 ServletConfig對象中維護了ServletContext對象的引用,開發(fā)人員在編寫servlet時,可以通過ServletConfig.getServletContext方法獲得ServletContext對象。由于一個WEB應(yīng)用中的所有Servlet共享同一個ServletContext對象,因此Servlet對象之間可以通過ServletContext對象來實現(xiàn)通訊。ServletContext對象通常也被稱之為context域?qū)ο蟆?/p>

在serlvet中,可以使用如下語句來設(shè)置數(shù)據(jù)共享

  ServletContext context =this.getServletContext(); //servletContext域?qū)ο?br>   context.setAttribute("data","共享數(shù)據(jù)"); //向域中存了一個data屬性

在另一個servlet中,可以使用如下語句來獲取域中的data屬性

  ServletContext context =this.getServletContext();
  String value = (String)context.getAttribute("data");  //獲取域中的data屬性
  System.out.println(value);

 2)通過servletContext對象獲取到整個web應(yīng)用的配置信息

  String url =this.getServletContext().getInitParameter("url");

  String username =this.getServletContext().getInitParameter("username");
  String password =this.getServletContext().getInitParameter("password");

  3)通過servletContext對象實現(xiàn)servlet轉(zhuǎn)發(fā)

由于servlet中的java數(shù)據(jù)不易設(shè)置樣式,所以serlvet可以將java數(shù)據(jù)轉(zhuǎn)發(fā)到JSP頁面中進行處理

 this.getServletContext().setAttribute("data","serlvet數(shù)據(jù)轉(zhuǎn)發(fā)");
  RequestDispatcher rd =this.getServletContext().getRequestDispatcher("/viewdata.jsp");
  rd.forward(request,response);

 4)通過servletContext對象讀取資源文件

 在實際開發(fā)中,用作資源文件的文件類型,通常是:xml、properties,而讀取xml文件必然要進行xml文檔的解析,所以以下例子只對properties文件進行讀取(在一個web工程中,只要涉及到寫地址,建議最好以/開頭)

 在web工程中,我們一般來說,是不能采用傳統(tǒng)方式讀取配置文件的,因為相對的是jvm的啟動目錄(tomcat的bin目錄),所以我們要使用web絕對目錄來獲取配置文件的地址

  讀取資源文件的三種方式:

 第一種:使用ServletContext的getResourceAsStream方法:返回資源文件的讀取字節(jié)流

  InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
  Properties prop = newProperties();  

  prop.load(in);
  String url =prop.getProperty("url");

 第二種:使用ServletContext的getRealPath方法,獲得文件的完整絕對路徑path,再使用字節(jié)流讀取path下的文件

  String path =this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
  String filename =path.substring(path.lastIndexOf("\\")+1); 

  //相比第一種方法的好處是:除了可以獲取數(shù)據(jù),還可以獲取資源文件的名稱
  FileInputStream in = newFileInputStream(path);
  Properties prop = newProperties();
  prop.load(in);
  String url =prop.getProperty("url");

 第三種:使用ServletContext的getResource方法,獲得一個url對象,調(diào)用該類的openStream方法返回一個字節(jié)流,讀取數(shù)據(jù)

  URL url =this.getServletContext().getResource("/WEB-INF/classes/db.properties");
  InputStream in =url.openStream();
  Properties prop = newProperties();
  prop.load(in);
  String url1 =prop.getProperty("url");

  5)web工程中,不同位置的資源文件的讀取方式

  一、當(dāng)資源文件在包下面時
  InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/context/db.properties");
  System.out.println(in);
  
  二、資源文件在web-inf下
  in =this.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
  System.out.println(in);
  
  三、資源文件在web工程中
  in =this.getServletContext().getResourceAsStream("/db.properties");
  System.out.println(in);

 6)在非servlet程序中如何讀取配置文件:用類裝載器

1)用類裝載方式讀取 

 in =StudentDao.class.getClassLoader().getResourceAsStream("cn/itcast/context/db.properties");
2)用類裝載方式讀取,把資源當(dāng)作url對待

 URL url =StudentDao.class.getClassLoader().getResource("db.properties");

 這樣可以獲得資源文件名稱:String path = url.getPath();

3)注意:在線程休眠過程中,即使改動了資源文件,獲取到的還是原始內(nèi)容

解決方案:

  URL url =StudentDao.class.getClassLoader().getResource("db.properties");
  String path =url.getPath();
  
  FileInputStream in = newFileInputStream(path);
  Properties prop = newProperties();
  prop.load(in);
  System.out.println(prop.getProperty("url"));
  
  try {
   Thread.sleep(1000*15);
  } catch (InterruptedExceptione) {
    e.printStackTrace();
  }
  in = newFileInputStream(path);
  prop = new Properties();
  prop.load(in);
  System.out.println(prop.getProperty("url"));

 

4)注意:用類裝載器讀取資源文件時,千萬要注意,資源文件絕對不能太大,否則極易導(dǎo)致內(nèi)存溢出

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩综合国产欧美一区| 国产午夜精品福利免费不| 欧美一区二区三区十区| 亚洲国产四季欧美一区| 久久香蕉综合网精品视频| 91国内视频一区二区三区| 午夜午夜精品一区二区| 久久精品久久久精品久久| 日韩在线中文字幕不卡| 亚洲欧美日韩色图七区| 日本黄色高清视频久久| 欧美午夜视频免费观看| 亚洲一区二区三区中文久久| 欧洲日本亚洲一区二区| 粉嫩国产一区二区三区在线| 成年午夜在线免费视频| 国产精品一区二区三区日韩av| 成人精品一级特黄大片| 免费在线成人午夜视频 | 国产成人精品午夜福利| 日韩蜜桃一区二区三区| 亚洲五月婷婷中文字幕| 日韩中文字幕人妻精品| 国产激情一区二区三区不卡| 国产白丝粉嫩av在线免费观看| 伊人久久五月天综合网| 91爽人人爽人人插人人爽| 午夜精品成年人免费视频| 国产白丝粉嫩av在线免费观看| 欧美人妻免费一区二区三区| 成年女人午夜在线视频| 亚洲中文字幕综合网在线| 欧美日韩精品人妻二区三区| 又黄又硬又爽又色的视频| 色偷偷亚洲女人天堂观看| 国产av天堂一区二区三区粉嫩| 国产精品流白浆无遮挡| 中文字幕不卡欧美在线| 国产综合香蕉五月婷在线| 欧美中文日韩一区久久| 欧美日韩一区二区午夜|