国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

J2EE項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)二則

2019-11-18 15:59:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、war包中的文件的讀取

在開(kāi)發(fā)J2EE Web應(yīng)用時(shí),在開(kāi)發(fā)階段通常采用目錄的部署方式,而在正式運(yùn)行時(shí)通常把web應(yīng)用打包為單個(gè)的.war文件進(jìn)行方便地部署。也就是在你的應(yīng)用目錄(比如WebLogic的DefaultWebApp)下,執(zhí)行下面的命令:

jar cf0 mywebapp.war **


這樣,要部署到正式系統(tǒng)時(shí)就非常方便,只需要把這個(gè).war文件拷貝到WebLogic的applications目錄或Tomcat的webapps目錄下即可自動(dòng)進(jìn)行部署。Tomcat會(huì)對(duì)部署的.war應(yīng)用包進(jìn)行自動(dòng)監(jiān)控、解包,所以不會(huì)出現(xiàn)下面提到的問(wèn)題。

而WebLogic并不會(huì)自動(dòng)解包.war,所以假如在你的應(yīng)用中,需要讀取原來(lái)應(yīng)用中的配置文件或其它資源文件時(shí),就會(huì)發(fā)現(xiàn),在解包部署時(shí),正常運(yùn)行的程序,在WebLogic中打包部署時(shí),運(yùn)行卻出錯(cuò),會(huì)報(bào)告找不到該文件。例如下面的應(yīng)用:

[PRe]       --DefaultWebApp            --index.jsp            --.....jsp            --WEB-INF                 -- web.xml                 -- log4j.properties                   -- classes                   ......[/pre]


其中使用到了Log4J作為日志輸出工具,Log4J的配置文件log4j.propertes放在DefaultWebApp/WEB-INF目錄下。Log4J通過(guò)一個(gè)自動(dòng)加載的Servlet進(jìn)行初始化,初始化代碼如下:

ServletContext context = getServletContext(); org.apache.log4j.PropertyConfigurator.configure(context.getRealPath("/")+  "/WEB-INF/log4j.properties");


其中,context.getRealPath("/")得到當(dāng)前Web應(yīng)用的真實(shí)根目錄,比如,假如你的WebLogic安裝在D:/bea下,在Windows下context.getRealPath("/")通常會(huì)返回:

D:/bea/wlserver6.1/config/mydomain/applications/DefaultWebApp


在UNIX下類(lèi)似:

/bea/wlserver6.1/config/mydomain /applications/DefaultWebApp


這樣,和
"/ WEB-INF /log4j.properties"



拼接后,就得到了log4j.properties文件的真實(shí)路徑,Log4J通過(guò)文件IO讀取這個(gè)配置文件,完成初始化。

現(xiàn)在一切正常!測(cè)試通過(guò)后,將DefaultWebApp下的所有文件打?yàn)橐粋€(gè).war包,進(jìn)行部署時(shí),發(fā)現(xiàn)系統(tǒng)報(bào)告找不到“D:/bea/wlserver6.1/null/ WEB-INF /log4j.properties”文件!假如你的應(yīng)用中還需要讀取其它已經(jīng)被打包到war包中的文件,都會(huì)報(bào)告找不到文件。并且,系統(tǒng)并不會(huì)到D:/bea/wlserver6.1/config/mydomain/applications/DefaultWebApp目錄下尋找,而會(huì)到D:/bea/wlserver6.1/null下尋找。這是因?yàn)閏ontext.getRealPath("/")返回了null。

查看ServletContext的API文檔,原來(lái),對(duì)一個(gè)打包的應(yīng)用來(lái)說(shuō),是沒(méi)有RealPath的概念的,調(diào)用getRealPath只會(huì)簡(jiǎn)單地返回null。其實(shí),也很好理解,一個(gè)文件被打包入了.war文件,就不存在目錄結(jié)構(gòu)了(雖然包中仍然存在目錄結(jié)構(gòu),但這不等同于文件系統(tǒng)中的目錄結(jié)構(gòu))。

所以,對(duì)war包中的資源是無(wú)法得到RealPath的。這樣也就無(wú)從通過(guò)文件IO進(jìn)行讀取了。那么,如何讀取war包中的資源呢?答案是使用ServletContext.getResourceAsStream(String)方法。對(duì)于org.apache.log4j.PropertyConfigurator,有如下幾種配置方法:

static void configure(Properties properties);  static void configure(String configFilename);  static void configure(URL configURL);


既然,現(xiàn)在不能得到war包中的Log4J的配置文件,那么可以通過(guò)讀入InputStream,構(gòu)造一個(gè)Properties,通過(guò)configure(Properties properties)方法同樣可以完成配置。示例代碼如下:

InputStream is = getServletContext(). getResourceAsStream("/WEB-INF/log4j.properties"); Properties props = new Properties(); try{ props.load(is); }catch (IOException e){  System.err.println("Load log4j  configuration failed");         }         PropertyConfigurator.configure(props);



那么,現(xiàn)在對(duì)于war應(yīng)用可以成功運(yùn)行,但假如現(xiàn)在不通過(guò)war部署,直接通過(guò)目錄結(jié)構(gòu)部署應(yīng)用會(huì)不會(huì)又出現(xiàn)找不到資源的錯(cuò)誤呢?請(qǐng)來(lái)看看ServletContext.getResourceAsStream的API文檔,

Returns a URL to the resource that is mapped to a specified path. The path must begin with a "/" and is interpretedas relative to the current context root. This method allows the servlet container to make a resource available to servletsfrom any source. Resources can be located on a local or remote file system,in a database, or in a .war file.



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 松桃| 青海省| 叶城县| 昌平区| 五华县| 徐汇区| 柳河县| 扎兰屯市| 高阳县| 南汇区| 新源县| 米脂县| 徐州市| 灌云县| 密山市| 金坛市| 马尔康县| 上饶市| 库伦旗| 乌苏市| 乾安县| 舟山市| 湾仔区| 光泽县| 剑河县| 海门市| 青阳县| 巴青县| 洛隆县| 石楼县| 宾阳县| 葫芦岛市| 绥滨县| 定日县| 绥中县| 武威市| 鄂托克旗| 丰镇市| 达尔| 离岛区| 武威市|