- 浏览: 117321 次
- 来自: ...
文章分类
最新评论
-
x影千绝:
...
JDBC addbatch批量处理数据时有最大值限制 -
hunnuxiaobo:
为什么呢?
JDBC addbatch批量处理数据时有最大值限制 -
天涯海角tour:
是啊? 我在7.1下就装不上jbpm4.4,按你这着方法
MyEclipse7.1插件安装 -
t8500071:
原来exec后是子进程,怪不得我怎么看都不像是一个完全独立的进 ...
Java的多进程运行模式分析 -
海阔天空love:
很实用 。。。能给个例子吗?
现有的Web打印控制技术分成几种方案
一、war包中的文件的读取
在开发J2EE Web应用时,在开发阶段通常采用目录的部署方式,而在正式运行时通常把web应用打包为单个的.war文件进行方便地部署。也就是在你的应用目录(比如WebLogic的DefaultWebApp)下,执行下面的命令:
jar cf0 mywebapp.war **
|
这样,要部署到正式系统时就非常方便,只需要把这个.war文件拷贝到WebLogic的applications目录或Tomcat的webapps目录下即可自动进行部署。Tomcat会对部署的.war应用包进行自动监控、解包,所以不会出现下面提到的问题。
而WebLogic并不会自动解包.war,所以如果在你的应用中,需要读取原来应用中的配置文件或其它资源文件时,就会发现,在解包部署时,正常运行的程序,在WebLogic中打包部署时,运行却出错,会报告找不到该文件。例如下面的应用:
[pre] |--DefaultWebApp
|--index.jsp
|--.....jsp
|--WEB-INF
|-- web.xml
|-- log4j.properties
|-- classes
......[/pre]
|
其中使用到了Log4J作为日志输出工具,Log4J的配置文件log4j.propertes放在DefaultWebApp\WEB-INF目录下。Log4J通过一个自动加载的Servlet进行初始化,初始化代码如下:
ServletContext context = getServletContext();
org.apache.log4j.PropertyConfigurator.
configure(context.getRealPath("/")
+ "/WEB-INF/log4j.properties");
|
其中,context.getRealPath("/")得到当前Web应用的真实根目录,比如,如果你的WebLogic安装在D:\bea下,在Windows下context.getRealPath("/")通常会返回:
D:\bea\wlserver6.1\config\mydomain
\applications\DefaultWebApp
|
在UNIX下类似:
/bea/wlserver6.1/config/mydomain
/applications/DefaultWebApp
|
这样,和
"/ WEB-INF /log4j.properties"
|
拼接后,就得到了log4j.properties文件的真实路径,Log4J通过文件IO读取这个配置文件,完成初始化。
现
在一切正常!测试通过后,将DefaultWebApp下的所有文件打为一个.war包,进行部署时,发现系统报告找不到“D:\bea\
wlserver6.1\null\ WEB-INF
\log4j.properties”文件!如果你的应用中还需要读取其它已经被打包到war包中的文件,都会报告找不到文件。并且,系统并不会到D:\
bea\wlserver6.1\config\mydomain\applications\DefaultWebApp目录下寻找,而会到D:\
bea\wlserver6.1\null下寻找。这是因为context.getRealPath("/")返回了null。
查看
ServletContext的API文档,原来,对一个打包的应用来说,是没有RealPath的概念的,调用getRealPath只会简单地返回
null。其实,也很好理解,一个文件被打包入了.war文件,就不存在目录结构了(虽然包中仍然存在目录结构,但这不等同于文件系统中的目录结构)。
所以,对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(最大使用内存)即可解决。当然,这儿的内存容量都是指物理内存,不能超出你的机器的物理内存的总容
量。
发表评论
-
thinkpad T440P 无线网卡睡眠恢复后无法上网故障的解决
2014-08-06 23:54 2567现象:thinkpad T440P 无线网卡睡眠恢复后无法上网 ... -
myeclipse10.7.1注册及导出war异常的破解
2013-03-02 12:55 7一、原作者的破解程序在myeclipse10.7.1环境下测试 ... -
tcnative-1_dll下载地址
2012-04-09 22:31 1081tcnative-1.dll下载地址: http://arch ... -
转:权限的分类
2011-09-30 16:59 1077权限主要分两大类:一是功能权限,二是数据权限。 功能权 ... -
转:表单同时提交多条记录
2011-09-07 09:38 2507http://zhidao.baidu.com/questio ... -
立即行动 拯救JAVA
2011-04-02 09:12 827通过Oracle目前的各种行动,我可以肯定它会比微软更 ... -
转:java获取根路径有两种方式
2010-09-04 22:49 2476http://java.chinaitlab.com/net/ ... -
转:java等比例压缩图片
2010-08-24 15:03 2111http://hi.baidu.com/bdusnb/blog ... -
转:多路归并排序(远远大于内存的数据进行外排序)
2010-08-20 16:38 1895http://hi.baidu.com/qq350884961 ... -
转:两个字母搞定J2EE通用分页标签
2010-06-16 15:59 1421两个字母搞定J2EE通用分 ... -
系统中那些部分可以提取为公共部分?
2010-06-12 18:39 822我目前能想到的就是: 分页、上传、通用DAO层、控制层、数据字 ... -
转:Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)
2010-06-09 09:22 1116http://hi.baidu.com/vip099/blog ... -
c3p0 no bug but the windows xp have
2010-05-31 08:33 17225月30日,用了一天的时间在找一个c3p0的bug,但没有找到 ... -
转:如何利用eclipse实现批量修改文件的编码方式
2010-05-29 14:02 3500原文地址:http://dev.firnow.com/cour ... -
转载:教你彻底解决 Tomcat 5下文字乱码问题
2010-03-04 20:30 895http://tech.ccidnet.com/art/353 ... -
JDBC addbatch批量处理数据时有最大值限制
2009-12-27 13:29 7919在用jdbc向数据灌入数据时,发现120000的数据每次只能灌 ... -
网站如何赚钱
2009-05-28 13:30 609很多朋友,特别是对网 ... -
走进Java 7中的模块系统
2009-05-15 09:44 993http://developer.51cto.com/art/ ... -
MyEclipse7.1插件安装
2009-04-28 11:06 3571最近刚使用MyEclise 7.1 ,发现期插件安装与以前有所 ... -
Java的多进程运行模式分析
2009-04-25 21:05 1175一般我们在Java中运行其它类中的方法时,无论是静态调用,还是 ...
相关推荐
j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发...
介绍.ppt** - 这部分内容通常会涵盖J2EE(Java 2 Platform, Enterprise Edition)的基本概念,解释它在企业级应用开发中的角色,以及它相对于其他开发平台的优势,如跨平台能力、组件模型和分布式计算支持。...
《Java Web应用开发:J2EE和Tomcat》教程第二版是蔡剑和景楠编著的一本专业书籍,专注于讲解如何使用Java Enterprise Edition (J2EE) 和Apache Tomcat服务器进行Web应用的开发。这本书深入浅出地阐述了这两个技术在...
本文介绍了在J2EE项目开发中遇到的war包中的文件的读取问题,Ant使用中的OutOfMemoryError解决方法。
《Java 网络程序设计: J2EE》是一本深入探讨Java企业级应用开发的著作,光盘中包含了本书的配套资源,特别是三个重要的程序源码,这为读者提供了实际动手操作和学习J2EE技术的机会。在这个压缩包中,有两个主要文件...
《J2EE项目开发与设计随书源码》是一份宝贵的学习资源,旨在帮助开发者深入理解和实践J2EE(Java 2 Platform, Enterprise Edition)技术。J2EE是Oracle公司推出的用于构建企业级分布式应用程序的平台,它为开发、...
通过阅读这个"Java开发:J2EE OA 项目开发日记",开发者不仅可以学习到具体的编程技巧,还能了解到项目管理、团队协作、问题解决等方面的经验,这对于个人技能提升和实际项目开发有着极大的帮助。
本项目开发案例将带你深入理解J2EE的核心概念和实践应用。 1. **Servlet与JSP**:在J2EE中,Servlet是用于处理HTTP请求的核心组件,它接收客户端请求,处理数据,并返回响应。JSP(JavaServer Pages)则是一种视图...
本书汇集了大量企业级应用项目开发的经验,归纳了不同项目中使用的框架、模式、设计方法、开发方法,形成一个完整的技术体系和指导方法,以供用J2EE进行项目开发的初级人员和有一定经验的高级开发人员阅读。...
J2EE项目开发模板则是开发者在创建大型、复杂的企业系统时遵循的一套规范和最佳实践,它能帮助团队高效地组织代码,提升开发效率,并确保项目的可扩展性和可维护性。 **一、J2EE架构概述** J2EE架构包含多个层次,...
《J2EE项目开发与设计》是彭灿华编著的一本深入讲解J2EE技术在实际项目中的应用和设计的书籍,由中国铁道出版社出版。这本书提供了丰富的源码实例,帮助读者理解并掌握J2EE的核心概念和技术,进一步提升在实际开发中...
代码编写规范使用范围:J2EE项目开发。 命名规范目的:包的命名规范应当体现出项目资源良好的划分 servlet类所在包命名规范:公司名称.开发组名称.项目名称.web.servlet 例 如:net.linkcn.web.servlet 自定义标签...
Java Web开发领域中,J2EE(Java Platform, Enterprise Edition)是核心标准,它定义了企业级应用的架构和组件模型。在这个体系中,Struts、Hibernate和Spring是三个非常重要的开源框架,它们分别在MVC(Model-View-...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域,J2EE(Java 2 Platform, Enterprise Edition)扮演了核心角色。J2EE是一种开放的、标准的平台,用于构建分布式、多层的企业级应用程序。它提供了一...
在IT行业中,Java Web应用开发是一项至关重要的技能,特别是对于那些使用J2EE(Java 2 Platform, Enterprise Edition)和Tomcat服务器的开发者而言。J2EE是Oracle公司推出的一套用于构建企业级应用程序的标准和框架...
在J2EE项目开发中,理解并掌握J2EE架构及其相关技术是非常关键的。J2EE应用程序通常由四层结构组成,分别是客户层、应用层、表示逻辑层和企业信息系统层。客户层主要负责与用户的交互,应用层处理业务逻辑,表示逻辑...
**J2EE专业项目实例开发**是针对Java企业级应用开发的一个重要学习资源,它涵盖了在实际工作中可能遇到的各种技术和应用场景。在这个31.5 MB的压缩包中,你将找到一个名为“J2EE专业项目实例开发.pdf”的文档,这...
10. **IDE支持**:开发者可能使用IntelliJ IDEA、Eclipse等集成开发环境来编写、构建和调试J2EE项目。了解如何利用这些工具提高开发效率是必要的。 通过这个简单的J2EE项目,你可以学习到基本的J2EE概念和实践,为...
**J2EE项目案例源代码详解** J2EE(Java 2 Platform, Enterprise Edition)是Java平台上用于构建企业级分布式应用程序的框架。它提供了一系列的服务和API,支持多层架构,包括Web层、业务逻辑层和数据访问层,旨在...
在J2EE项目开发中,Excel导出是一项常见的需求,特别是在数据管理和报告生成场景中,如资产管理、财务报表等。这个描述提及的示例提供了一个完整的解决方案,包括所需的Java类和依赖库(Jar包),帮助开发者实现从...