天天看點

【Servlet】ServletConfig和ServletContext

ServletConfig代表servlet配置的對象,可以在web.xml中配置

在servlet中利用this.getServletConfig()擷取ServletConfig對象,該對象提供了getInitParameter()和getInitParameterNames()方法,可以周遊出配置中的配置項。

ServletCotext代表目前web對象

作為域對象使用,在不同servlet之間傳遞資料,作用範圍是整個web應用

生命周期:當web應用被加載進容器時建立代表整個web應用的ServletContext對象。當伺服器關閉或web應用被移除出容器時,ServletContext對象跟着銷毀。

~域:一個域就了解為一個框,這裡面可以放置資料,一個域既然稱作域,他就有一個可以被看見的範圍,這個範圍内都可以對這個域中的資料進行操作,那這樣的對 象就叫做域對象。

在不同servlet之間進行轉發

this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request, response);

     . 讀取資源檔案

由于相對路徑預設相對的是java虛拟機啟動的目錄,是以我們直接寫相對路徑将會是相對于tomcat/bin目錄,是以是拿不到資源的。如果寫成絕對路徑,當項 目釋出到其他環境時,絕對路徑就錯了。

為了解決這個問題ServletContext提供了this.getServletContext().getRealPath("/1.properties"),給進一個資源的虛拟路徑,将會傳回該資源在目前環境下的真 實路徑。this.getServletContext().getResourceAsStream("/1.properties"),給一個資源的虛拟路徑傳回到該資源真實路徑的流。

當在非servlet下擷取資源檔案時,就沒有ServletContext對象用了,此時隻能用類加載器classLoader.getResourceAsStream("../../1.properties"),此方法利 用類加載器直接将資源加載到記憶體中,有更新延遲的問題,以及如果檔案太大,占用記憶體過大。

classLoader.getResource("../1.properties").getPath(),直接傳回資源的真實路徑,沒有更新延遲的問題。

類加載器的使用:

private static Properties prop=null;
	private JDBCUtils() {
	}
	static{
		try {
			prop=new Properties();
			prop.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("config.properties").getPath()));
			//使用類加載器    隻要把配置檔案放在src目錄下  就可以讀到這個配置檔案
		} catch (Exception e) {
			e.printStackTrace();
		}
	}