日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

servlet加载资源两种方式-内外(初始化参数).properties文件

發(fā)布時(shí)間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 servlet加载资源两种方式-内外(初始化参数).properties文件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在servlet中加載資源很方便,通過(guò)servletContext,這個(gè)是web服務(wù)器加載完web項(xiàng)目返回的參數(shù)之一,還有servletConfig,得到web項(xiàng)目一些配置信息,request和response,等等,我們現(xiàn)在用的這個(gè)servletContext也叫做Context域,一個(gè)web一共有四個(gè)域,分別是Context域,Session域,request域和response域,context域指的是整個(gè)應(yīng)用程序,域指的就是范圍。

  1.那么servletContext加載資源通過(guò)getResourceAsOutputStream(),來(lái)返回一個(gè)流,通過(guò)這個(gè)流我們讀取資源文件。我們這里讀取(.properties)文件。

  請(qǐng)注意,這里是在Servlet中讀取,而我的properties文件存在與這里

  看代碼

1 ServletContext context = this.getServletContext(); 2 InputStream in = context.getResourceAsStream("/WEB-INF/classes/jdbc.properties");

  這樣我們就能獲得這文件的一個(gè)字節(jié)輸入流。然后我們通過(guò)javaAPI中的Properties這個(gè)類來(lái)解析

1 ServletContext context = this.getServletContext(); 2 InputStream in = context.getResourceAsStream("/WEB-INF/classes/jdbc.properties"); 3 4 /* 5 * 下面是模版代碼 6 * */ 7 Properties prop = new Properties(); 8 prop.load(in); 9 String url = (String) prop.getProperty("url"); 10 System.out.println("打印:"+ url);

  用Properties這個(gè)類,要注意,這里的文件不能太大,為什么呢?因?yàn)檫@個(gè)類把這個(gè)文件加載到內(nèi)存里,為了防止內(nèi)存的溢出,所以它是有大小限制的,這里要注意。

  2.用getRealPath()方法來(lái)獲取這個(gè)文件的絕對(duì)路徑,然后通過(guò)FileInputStream來(lái)獲得這個(gè)字節(jié)輸入流。用這個(gè)方法有一個(gè)好處,就是我們能通過(guò)這個(gè)path來(lái)獲得

  這個(gè)文件的文件名稱。

1 ServletContext context = this.getServletContext(); 2 String path = context.getRealPath("/WEB-INF/classes/jdbc.properties"); 3 4 FileInputStream in = new FileInputStream(path); 5 6 /* 7 * 下面是模版代碼 8 * */ 9 Properties prop = new Properties(); 10 prop.load(in); 11 String url = (String) prop.getProperty("url"); 12 System.out.println("打印:"+ url); 13

?

  下面是不在servlet里面,也就是說(shuō)沒(méi)有servletContext這個(gè)對(duì)象,我們來(lái)讀取文件

  這里我們同過(guò)類的裝載器來(lái)實(shí)現(xiàn)。

1 //PersonDao.class.getClassLoader()這個(gè)就是類的裝載器,我得到了這個(gè)類的裝載器 2 //就是得到了所有src里面的東西 3 InputStream in = PersonDao.class.getClassLoader().getResourceAsStream("jdbc.properties"); 4 /* 5 * 下面是模版代碼 6 * */ 7 Properties prop = new Properties(); 8 prop.load(in); 9 String url = (String) prop.getProperty("url"); 10 System.out.println("打印:"+ url);

 這里的路徑為什么直接就寫文件名稱,因?yàn)檫@個(gè)PersonDao.class.getClassLoader()就是類的加載器,就代表著classes,所以我們直接加載就行。

  說(shuō)一下,這里用Properties這個(gè)類,如果說(shuō)你修改了jdbc.properties資源文件,比如里面的url的值被你修改了,而你的服務(wù)器沒(méi)有重新啟動(dòng),那么你在次執(zhí)行的時(shí)候,還是原來(lái)的值

 這個(gè)是因?yàn)閟rc,也就是這個(gè)類只加載一次,當(dāng)你要訪問(wèn)這個(gè)文件的時(shí)候,虛擬機(jī)一看,我內(nèi)存里有,我就直接給你拿,他不會(huì)重新給你加載。

  如果你非要得到這個(gè)修改后的值的話,那你就要通過(guò)PersonDao.class.getResource(“”)方法,就不要去用類裝載器了,這個(gè)方法會(huì)通過(guò)你給的資源,返回給你一個(gè)URL路徑,我們通過(guò)這個(gè)路徑用FilInputStream得到一個(gè)字節(jié)輸入流,這樣確保我們每次拿到的都是一個(gè)新的流,得到的才是一個(gè)新的數(shù)據(jù)。

?

1 String path = PersonDao.class.getResource("jdbc.properties").getPath(); 2 FileInputStream in = new FileInputStream(path); 3 4 /* 5 * 下面是模版代碼 6 * */ 7 Properties prop = new Properties(); 8 prop.load(in); 9 String urls = (String) prop.getProperty("url"); 10 System.out.println("打印:"+ urls);

?

  

轉(zhuǎn)載于:https://www.cnblogs.com/duwenlei/p/3489416.html

總結(jié)

以上是生活随笔為你收集整理的servlet加载资源两种方式-内外(初始化参数).properties文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。