商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

J2EE项目开发经验二则

作者:来自ITPUB社区  2007-05-16
  所以,对war包中的资源是无法得到RealPath的。这样也就无从通过文件IO进行读取了。那么,如何读取war包中的资源呢?答案是使用ServletContext.getResourceAsStream(String)方法。对于org.apache.log4j.PropertyConfigurator,有如下几种配置方法:

static void configure(Properties properties); static void configure(String configFilename); static void configure(URL configURL);
    既然,现在不能得到war包中的Log4J的配置文件,那么可以通过读入InputStream,构造一个Properties,通过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);
    那么,现在对于war应用可以成功运行,但如果现在不通过war部署,直接通过目录结构部署应用会不会又出现找不到资源的错误呢?请来看看ServletContext.getResourceAsStream的API文档,

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.
    可见,通过getResourceAsStream可以获取包括本地文件系统、远程文件系统、war包等资源。不会出现上面担心的问题。

    结论:在开发J2EE Web应用时,如果需要读取本应用中的文件,尽量使用ServletContext.getResourceAsStream进行,而不要使用文件IO。

    二、Ant使用中的OutOfMemoryError解决

    在开发大型项目时,类文件通常有数千个之多,这时都需要采用一些make工具来辅助开发。有时需要编译的类太多,使用Ant编译时,会出现OutOfMemoryError的错误,使编译进程中断。这时,通常通过先移出部分文件,分批编译。但Java编译过程的自动依赖编译,通常很难确定究竟应该先移出哪些文件、后移出哪些文件伤透脑筋。下面为你提供一个简便的方法:转到你的Ant的安装目录,在bin子目录中找到ant.bat,使用文字编辑器打开,修改:runAnt处的允许命令,添加如下参数:

    :runAnt
    "%_JAVACMD%" -Xms128m
    -Xmx512m -classpath ……

    如果你安装了Jike,使用Jike编译器,则需要修改:runAntWithJikes处的运行命令,同上。

    结论:Java虚拟机默认分配64M内存,如果你的应用比较大,超出64M内存,Java虚拟机就会抛出OutOfMemoryError,并停止运行。不管是什么应用(Web应用、Application等),只需要修改你的机器上的运行Java命令,在java xxx命令中添加-Xms(最小使用内存)、-Xmx(最大使用内存)即可解决。当然,这儿的内存容量都是指物理内存,不能超出你的机器的物理内存的总容量。
1 2
【内容导航】
第1页: 第1页 第2页: 第2页
©版权所有。未经许可,不得转载。
[责任编辑:赵恒]