方式一:采用ServletContext讀取,讀取配置文件的realpath,然后通過文件流讀取出來。因為是用ServletContext讀取文件路徑,所以配置文件可以放入在web-info的classes目錄中,也可以在應用層級及web-info的目錄中。文件存放位置具體在eclipse工程中的表現(xiàn)是:可以放在src下面,也可放在web-info及webroot下面等。因為是讀取出路徑后,用文件流進行讀取的,所以可以讀取任意的配置文件包括xml和properties。缺點:不能在servlet外面應用讀取配置信息。 具體舉例如下: //ServletContext.getRealPath(name)讀取路徑 privatevoid test1(HttpServletRequest request, HttpServletResponseresponse) throws ServletException,IOException { //response.setContentType("text/html;charset=utf-8"); String path = "/WEB-INF/jdbc_connection.properties"; //讀取WEB-INF中的配置文件 String realPath = getServletContext().getRealPath(path);//getServletContext()相當于http://localhost/demo05 //所以后面的path只需要以應用demo/開頭具體的部署目錄路徑即可,如上面的/web-in… System.out.println(realPath); InputStreamReader reader = new InputStreamReader(newFileInputStream(realPath),"utf-8"); Properties props = new Properties(); props.load(reader); //load個人建議還是用Reader來讀,因為reader體系中有個InputStreamReader可以指定編碼 String jdbcConValue = props.getProperty("jdbc_con"); System.out.println(jdbcConValue); System.out.println("加載src包下的資源------------------------"); path = "/WEB-INF/classes/com/test/servlet/jdbc_connection.properties"; //讀取WEB-INF中的配置文件 realPath=getServletContext().getRealPath(path); System.out.println(realPath); reader = new InputStreamReader(new FileInputStream(realPath),"utf-8"); props.load(reader); //load個人建議還是用Reader來讀,因為reader體系中有個InputStreamReader可以指定編碼 jdbcConValue = props.getProperty("jdbc_con"); System.out.println("second::"+jdbcConValue);
} 方式二:采用ResourceBundle類讀取配置信息,此種方式的優(yōu)點是:可以以完全限定類名的方式加載資源后,直接的讀取出來,且可以在非Web應用中讀取資源文件。缺點:只能加載類classes下面的資源文件且只能讀取.properties文件。若資源文件的編碼是utf-8等其它的非is0-8859-1的編碼時,需要將讀取出來的value先進行getBytes(“iso-8859-1”)編碼得到原文,而用newString(bs[],”utf-8”)進行解碼。 具體舉例如下: //ResourceBundler讀取資源 privatevoid test2(HttpServletRequest request, HttpServletResponseresponse)throws ServletException, IOException { //讀取src下面包的配置文件,似乎沒有什么好辦法可以讀取Bundle中是utf-8編碼的資源文件 ResourceBundlerb = ResourceBundle.getBundle("com.test.servlet.jdbc_connection"); String jdbcConValue = rb.getString("jdbc_con"); System.out.println(jdbcConValue);//呵呵,搞定了。資源文件中是utf-8編碼的,但是ResourceBundler默認是按iso-8859-1解碼的 byte[] buf = jdbcConValue.getBytes("iso-8859-1");//所以讀取到了,要用iso-8859-1進行解碼得到原本的byte后,再用utf-8進行編碼
System.out.println(new String(buf,"utf-8")); //這里再用utf-8進行解碼就Ok。.
} 方式三:采用ClassLoader方式進行讀取配置信息,此種方式的優(yōu)點是:可以在非Web應用中讀取配置資源信息,可以讀取任意的資源文件信息。缺點:只能加載類classes下面的資源文件。 具體舉例如下: //ClassLoader讀取資源 privatevoid test3(HttpServletRequest request, HttpServletResponseresponse)throws ServletException, IOException { ClassLoader cl = ServletReadConfig.class.getClassLoader(); InputStream in = cl.getResourceAsStream("com/test/servlet/jdbc_connection.properties"); Properties props = new Properties(); props.load(in); //load個人建議還是用Reader來讀,因為reader體系中有個InputStreamReader可以指定編碼 String jdbcConValue = props.getProperty("jdbc_con"); byte[] resoucreBytes = jdbcConValue.getBytes("iso-8859-1"); System.out.println(new String(resoucreBytes,"utf-8")); System.out.println("----------ClassLoader讀取資源讀取,用Reader來傳遞進Properties---------------"); InputStream in2 = cl.getResourceAsStream("com/test/servlet/jdbc_connection.properties"); Reader reader = new InputStreamReader(in2,"utf-8"); //直接用轉(zhuǎn)換流來搞定 Properties props2 = new Properties(); props2.load(reader); jdbcConValue = props2.getProperty("jdbc_con"); System.out.println(jdbcConValue); } |
|