`
eoasis
  • 浏览: 78646 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Web app root system property already set to different value: 'webapp.root'

阅读更多

在web.xml有几个条目和log4j有关,它们是:

1.

<context-param> 

        <param-name>webAppRootKey</param-name> 

        <param-value>petclinic.root</param-value> 

</context-param> 

 
2.

<context-param> 

        <param-name>log4jConfigLocation</param-name> 

        <param-value>/WEB-INFclasseslog4j.properties</param-value> 

</context-param> 

 

3.(该条目在petclinic中被注释掉了)

<listener> 

   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 

</listener>

 

我们知道,在web-application中使用log4j,有很多配置方式:
a.
用servlet或者ServletContextListener对log4j做配置。通常,你不需要亲自编写servlet或者 listener,比如直接利用log4j的com.apache.jakarta.log4j.Log4jInit类,Spring的 org.springframework.web.util.Log4jConfigServlet和 org.springframework.web.util.Se
rvletContextListener,这种方式配置灵活,可以通过参数条目自行指定log4j.properties的位置。

b.
把log4j 的默认配置文件(log4j.properties)放在classpath中,通常是/web-inf/classes目录下.这种方式是log4j的 默认配置方式,无须其他配置。缺点就是无法灵活的通过配置文件来指定log4j.properties的文件位置。在我们的petclinic项目中,因 为listener条目被注释,所以采用的也是这种缺省方式。


现在我们考虑listener条目没有被注释的情况,这种情况和注册Log4jConfigServlet的目的是一样的,只是必须在支持listener的servlet container中使用。

 

  找到.Log4jConfigServlet和ServletContextListener的源码,他们都在适当的地方 (callback method)调用了Log4jWebConfigurer.initLogging(getServletContext()); 定位到这个方法,第一句就是:WebUtils.setWebAppRootSystemProperty(servletContext);再定位到该方法,方法很短:

 

public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException { 

        String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM); 

        String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY); 

        String oldValue = System.getProperty(key); 

        if (oldValue != null) { 

            throw new IllegalStateException("WARNING: Web app root system property already set: " + key + " = " + 

            oldValue + " - Choose unique webAppRootKey values in your web.xml files!"); 

        } 

        String root = servletContext.getRealPath("/"); 

        if (root == null) { 

            throw new IllegalStateException("Cannot set web app root system property when WAR file is not  

expanded"); 

        } 

        System.setProperty(key, root); 

        servletContext.log("Set web app root system property: " + key + " = " + root); 

    } 

 
      从代码看出,该方法其实就是把该web application的根目录的绝对文件路径作为属性保存在 System的属性列表中。该属性的名字,由web.xml文件中的名为"webAppRootKey"的参数值指出。如果不在web.xml中定义 webAppRootKey参数,那么属性名就是缺省的"webapp.root".在我们的petclinic项目中已经定义了 webAppRootKey参数,其值为"petclinic.root",因此,属性的名字就是"petclinic.root".

 

      再回到Log4jWebConfigurer.initLogging(getServletContext()),接下来的行为是从web.xml中获取 log4jConfigLocation和log4jRefreshInterval.前者指出log4j配置文件(有可能是xml格式)的位置和名字, 后者则指出重新都取配置文件的时间间隔.然后调用Log4jConfigurer.initLogging()方法对log4j做配置。

      从Log4jConfigurer.initLogging()方法我们可以看到,针对不同格式的配置文件(properties或者xml), Log4jConfigurer采用不同的lo4j configurator类做配置,例如DOMConfigurator或者 PropertyConfigurator。

至此,关于petclinic中关于log4j的配置,我们已经基本上弄清楚了。

      可是System对象中的petclinic.root属性在什么时候使用呢?在web-inf/classes下面的log4j.properties文件中,有这么一句:log4j.appender.logfile.File=${petclinic.root}/WEB-INF/petclinic.log
      这样,我们就用上了petclinic.root属性了。从上面的分析可知,如果你不在web.xml中定义webAppRootKey参数,那么你就得把 log4j.appender.logfile.File=${petclinic.root}/WEB-INF/petclinic.log中的petclinic.root变量改为webapp.root变量或者干脆换成别的绝对路径了。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hwctl/archive/2007/07/31/1719597.aspx

分享到:
评论
1 楼 wayJava 2010-11-08  
学习了。
我也出了这个问题,出现的原因是tomcat的webapp里面已经有了同名的项目。

相关推荐

    jetty-webapp-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-webapp-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-webapp-...

    webapp.js:Node.js中编写的示例Web应用程序

    在本项目中,我们关注的是一个名为"webapp.js"的Node.js编写的Web应用程序,它主要用于构建PikaBot of Discord的官方测试网站——皮卡网。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用...

    jetty-webapp-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-webapp-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-webapp-...

    webapp.rar-easyUI

    【标题】"webapp.rar-easyUI"是一个与前端开发相关的压缩包,它包含了使用EasyUI框架构建Web应用程序的基础环境。EasyUI是一个基于jQuery的轻量级用户界面库,提供了丰富的组件和样式,用于快速开发出美观且功能完备...

    comet 很好的一个实例

    comet 很好的一个实例 var ajax = new Ajax.Request(WebApp._url_, { method: 'get', parameters: { 'timestamp' : WebApp._timestamp_ }, onSuccess: function(transport) { var response = ...

    AJAX和Web开发新技术:DynamicFaces.pdf

    &lt;servlet-class&gt;javax.faces.webapp.FacesServlet &lt;param-name&gt;javax.faces.LIFECYCLE_ID &lt;param-value&gt;com.sun.faces.lifecycle.PARTIAL&lt;/param-value&gt; &lt;load-on-startup&gt;1 ``` 同时,还需要对应用进行...

    webapp.zip_ python webapp_python webapp_python webapp.zip_python

    首先,标题"webapp.zip_ python webapp_python webapp_python webapp.zip_python"表明这是一个关于Python Web应用的压缩文件,可能包含了一个或多个Python Web项目的源代码。"webapp.zip"是这个压缩文件的名称,暗示...

    demo-Maven-Webapp.rar_DEMO

    **标题解析:** "demo-Maven-Webapp.rar_DEMO" 这个标题表明这是一个关于Maven和Web应用的演示项目。"DEMO"标签暗示它是一个教学或实验性质的项目,适合初学者用来了解和学习相关技术。 **描述解析:** 描述提到...

    jk1107 Maven Webapp.zip

    【标题】"jk1107 Maven Webapp.zip" 是一个包含蒋老师个人整理的聊天室和杰信商贸项目的Maven Web应用程序的压缩文件。这个压缩包的核心是使用Maven,一个强大的Java项目管理和集成工具,来构建Web应用程序。Maven...

    WebApp.cspro

    WebApp.cspro

    QtWebApp.zip

    这个压缩包“QtWebApp.zip”很可能包含了源代码、示例项目以及必要的库文件,使得用户可以研究、学习和部署自己的QtWebApp项目。 Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式系统。它提供了...

    asm5.0.jar

    12 14:33:37.672:WARN::Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/E:/cloudwave-core/src/main/webapp/WEB- ...

    myeclipse的WebRoot下的jsp访问不了

    ### MyEclipse中WebRoot下的JSP访问问题详解 #### 一、问题概述 在使用MyEclipse开发Java Web应用程序时,可能会遇到一种情况:放置在项目目录下的JSP文件可以正常访问,但如果将这些JSP文件放置在项目的WebRoot...

    001_WebApp.pdf

    001_WebApp.pdf 章节概述 • 网站部署规划 部署网站 配置网站 监视网站 流量管理器 创建和配置网站 演示 1 :中国版 Windows Azure 创建新网站 使用 FTP 部署网站 使用 Web 部署来部署网站 演示 2 :...

    maven-archetype-webapp-1.0.jar

    eclipse创建maven工程时无法创建,缺少的jar

    hadoop 2.9.0 yarn-default.xml 属性集

    5. yarn.resourcemanager.webapp.address:此属性定义了资源管理器Web应用的主机地址和端口,默认值为${yarn.resourcemanager.hostname}:8088。 6. yarn.resourcemanager.webapp.https.address:如果启用了安全模式...

    考试系统WebApp.zip

    【标题】"考试系统WebApp.zip"所代表的是一个基于Web的应用程序,它是一个用于创建、管理和进行在线考试的系统。这个压缩包包含了构建Web应用程序的关键文件和目录,以下是其中包含的一些关键知识点: 1. **Global....

    habits-scorecard:WebApp跟踪受https:jamesclear.comhabits-scorecard启发的习惯

    这个WebApp的主要目的是帮助用户追踪和改进他们的日常生活习惯。 【描述】:“习惯记分卡”是一个在线工具,它借鉴了James Clear关于个人行为改变和习惯养成的理论。James Clear是一位知名的作家和行为科学家,他的...

    maven-archetype-webapp-1.0.jar下载

    《Maven Archetype Webapp 1.0:构建Java Web项目的基石》 Maven Archetype Webapp 1.0.jar 是一个重要的工具,它属于Java开发领域中的Maven生态系统,主要用于快速搭建Java Web应用程序的基础框架。这个压缩包文件...

Global site tag (gtag.js) - Google Analytics