欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
徹底解決war包中文件路徑問(wèn)題

在j2EE項目中,我們一般會(huì )把項目打包發(fā)布,一般是war包,作為獨立單元,可以遠程上傳,加載,發(fā)布,還可以實(shí)現版本控制,但這與我們開(kāi)發(fā)過(guò)程中使用MyEclipse自動(dòng)部署有所不同,以下做詳細說(shuō)明.

使用war包部署,在tomcat和WebLogic下部署有很大的區別,tomcat會(huì )把war自動(dòng)加壓到當前目錄下,然后再用解壓的目錄來(lái)發(fā)布,這與一般不會(huì )出現太大的意外,但如果是用WebLogic發(fā)布,就不會(huì )被解壓,如果開(kāi)發(fā)過(guò)程中不注意,war包發(fā)布后就有可能出現找不到文件的現象。例如:使用以下方法獲取路徑:

this.getClass().getClassLoader().getResource("/").getPath();

這與得到的是絕對Uri路徑,例如::/D:/jboss-4.2.2.GA/server/default/deploy/hp.war/WEB-INF/classes/,帶盤(pán)符的路徑,顯然在war中無(wú)法根據盤(pán)符來(lái)找到文件

第二種方式:

this.getClass().getResource("/").getPath();

那么這樣獲取行不行呢?經(jīng)試驗,這與獲取的是當前類(lèi)的Uri目錄,例如:/D:/jboss-4.2.2.GA/server/default/deploy/hp.war/WEB-INF/classes/com/jebel/helper/ 也是絕對路徑,顯然無(wú)法適用于war包。

其實(shí)以上兩種方式都走入了岔路,因為讀取文件未必要讀取路徑,文件操作一般都要轉換為流的方式,既然要讀取文件,不如直接讀成輸入流,也少了一步封裝。請看以下方式:

InputStream is= this.getClass().getResourceAsStream("/config/bctcms/" + templateFileName);

意思是讀取classes目錄中,目錄config/bctcms/下,文件名為templateFileName的文件輸入流。經(jīng)試驗在war中可以正常讀取到。

該方法存在一個(gè)弊端,只能讀取classes目錄下的文件,對于其他目錄下的文件無(wú)能為力,顯然并不適用于所有場(chǎng)景。

如果文件在WEB-INF目錄下,如何進(jìn)行讀取呢?

答案是使用ServletContext.getResourceAsStream(String)方法。也就是先得到上下文信息,然后通過(guò)以工程目錄為root的絕對路徑,找到文件,舉例說(shuō)明:

InputStream is= context.getResourceAsStream(templatePath + "/" + templateFileName);templatePath="/WEB-INF/classes/config/bctcms/"templateFileName="source.xls"
可以看到templatePath是相對于context root 的路徑,而不是相對于classes,這樣即使文件在WEB-INF其他目錄下,也可以順利找到,經(jīng)測試,對war的情況支持良好。請來(lái)看看ServletContext.getResourceAsStreamAPI

文檔,

Returns a URL to the resource that is mapped to a specified path. The path must begin with a "/" and is interpreted as relative to the current context root. 

This method allows the servlet container to make a resource available to servlets from any source. 

Resources can be located on a local or remote file system, in a database, or in a .war file.

相信大家都看得懂,就不用贅述了。只是有個(gè)問(wèn)題,context是個(gè)什么東西?答案:ServletContext,上下文信息,在j2EE類(lèi)中使用request獲得,如:

ServletContext context = request.getSession().getServletContext();

那么在普通類(lèi)中如何獲取呢?暫時(shí)特別好的辦法,使用application是一種方式,另外一種方式就是想辦法先后去request對象,如:

RequestAttributes ra = RequestContextHolder.getRequestAttributes();HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();this.context = request.getSession().getServletContext();

這樣也是可以獲得Context的

但如果是JSP中,可以直接這么獲取輸入流:

application.getResourceAsStream("xxx”);

路徑問(wèn)題不要糾結太久,根據以上辦法解決,最好都用

ServletContext方法來(lái)獲取,只需要知道一種情況就可以了。達到目的才是最重要的,對吧?

有不對之處,歡迎大家進(jìn)行補充糾錯!

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
項目經(jīng)驗二則:讀取war包中的文件及Ant使用中的OutOfMemor...
java加載文件的3種方式
ServletConfig與ServletContext對象詳解
GeoServer2.17與Jetty9在Windows上的最佳安裝實(shí)踐
myeclipse導入war
tomcat 自動(dòng)部署
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久