`

Web app root system property already set to different value

    博客分类:
  • java
阅读更多
最近在搭建项目环境的时候出现了下面的错误

java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [D:/tomcat-5.0.19/webapps/tzbms/] instead of [D:/tomcat-5.0.19/webapps/its/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!



后来查了资料才知道

webAppRootKey是在java web项目的web.xml配置文件中表示项目的唯一标示,在Eclipse调试Web项目时,项目的路径是一个临时路径,不在真正的路径下,可以通过log4j日志的方式打印出属性值,来看看临时项目路径在哪里,可以用System.getProperty("web.sample.root");如果web.xm 内没有设置webAppRootKey项,是为默认设置,那么webAppRootKey就是缺省的"webapp.root"。

下面是相关源码

1.     ·  public  static  void  setWebAppRootSystemProperty(ServletContext servletContext) throws  IllegalStateException  {

2.             String  param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);

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

4.             String  oldValue = System .getProperty(key);

5.             if  (oldValue != null ) {

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

7.                                                                     

8.     

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

10.           }

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

12.           if  (root == null ) {

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

14.   

15.   expanded");

16.           }

17.           System .setProperty(key, root);

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

19.       }

20.   

21.  


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



但最好设置,以免项目之间的名称冲突。

 



Spring通过 org.springframework.web.util.WebAppRootListener 这个监听器来压入项目路径。但是如果在web.xml中已经配置了 org.springframework.web.util.Log4jConfigListener
这个监听器,则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能

部署在同一容器中的Web项目,要配置不同的<param-value>,不能重复

如果配置了
log4j.appender.file.File=${web.sample.root}/WEB-INF/logs/sample.log 

log4j会自己自动建立logs目录, 不需要手工显式建立空的logs目录





解决方案:

在启动出现错误的工程web.xml增加如下语句便可

<context-param>

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

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

</context-param>

分享到:
评论

相关推荐

    tomcat部署多个项目.pdf

    `java.lang.IllegalStateException: Web app root system property already set to dif` 这个异常是因为多个项目中的 `web.xml` 文件中没有配置 `webAppRootKey` 项,导致 Tomcat 无法正确地分配项目的根目录。 ...

    Office Web App Server 2013

    Add-WindowsFeature Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-App-Dev,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Includes,Web-Security,Web-Windows-Auth,Web-...

    读取webroot文件下的属性文件

    首先,确保属性文件已经放置在webroot目录下,例如:`/webroot/config/app.properties`。这个文件应包含键值对,如`key=value`的格式。 步骤1:导入所需库 在Java代码中,我们需要使用`java.util.Properties`类来...

    嵌入式web服务器:appweb

    AppWeb是一个这样的服务器,它被设计为嵌入到各种设备和应用中,以提供网络接口和服务。在本文中,我们将深入探讨AppWeb的特性、优势以及如何在项目中集成和使用它。 AppWeb是一个功能丰富的嵌入式Web服务器,它比 ...

    Beginning Django Web App Dev with Python

    Beginning Django Web App Dev with Python Beginning Django Web App Dev with Python

    SystemProperty-Setting-APP:APK,用于设置系统属性

    SystemProperty-Setting-APP Environment: Android Studio / Android 5.0 Description: This app is the system app, which need to be build in android framework or be signed. And this app is the example ...

    appweb4.3.4-0添加arm配置及源代码

    2. **主循环**:在`src/appweb.c`中,你可以找到服务器的主要事件循环,这是AppWeb运行的核心部分。 3. **配置解析**:AppWeb使用`conf.c`和`conf.h`中的函数来解析配置文件。了解这些函数的工作原理,可以方便地...

    Embedded Appweb移植 安装 应用

    Embedded Appweb 移植 安装 应用是指将 Appweb 服务器移植到嵌入式系统中,安装并配置 Appweb 服务器,以实现 Web 服务。Appweb 服务器是一个小巧、灵活、可扩展的 Web 服务器,支持多种功能特性,包括 Full ...

    J2EE web app 3.1 xsd

    J2EE web app 3.1 xsd

    利用app_process实现免root调用shell_Java_下载.zip

    然而,通过巧妙地利用`app_process`,可以实现在不获取root权限的情况下调用shell命令,这对于一些需要进行系统级交互的应用场景非常有用。下面我们将详细探讨如何利用`app_process`来实现这一目标,以及在Java中...

    appweb嵌入式WebServer服务器学习笔记

    ### appweb嵌入式WebServer服务器学习笔记 #### 一、概述 本文档主要介绍了如何构建一个基于HTML和JavaScript的简单嵌入式WebServer服务器,特别聚焦于使用Appweb框架来实现这一目标。通过本篇笔记,我们将了解...

    开放时代从Web_Page到Web_App

    开放时代从Web_Page到Web_App

    一键冰箱免ROOT指令.zip_ROOT_冰箱app免root_冰箱一件免root_冰箱一键_安装冰箱免root

    标签进一步强调了这个压缩包与“冰箱app免root”、“冰箱一件免root”和“冰箱一键”的关联,这意味着它提供了一种简便的方法来安装和运行冰箱App,而无需涉及复杂的ROOT过程。同时,“安装冰箱免root”表明这个...

    Android9.0 开放root权限

    主要是针对P版开发adb root和app root权限,资源基于MTK方案。

    android 把软件安装成系统软件(安装到system/app目录下)

    首先,确保你的设备已经root,因为system/app目录通常只可由root用户访问和修改。同时,你可能需要使用如BusyBox这样的工具,因为它提供了许多Linux命令行工具,对于执行本操作至关重要。 #### 步骤二:备份与确认 ...

    Android修改源码让APP获取root权限可以执行su命令的git diff记录

    修改源码让APP获取root权限可以执行su命令的git diff记录

    Beginning Progressive Web App Development(2017)

    When was the last time you visited an app’s mobile web site rather than its native app counterpart? Was it an enjoyable experience? What did you like about it? What could have been better? Possibly ...

    solaredge-web-set-app:适用于SolarEdge Web-set-app的Protobuf定义

    solaredge-web-set-app背景支持SolarEdge SetApp的逆变器具有用于调试的集成Web服务器,该服务器还提供状态信息。 该前端主要包含在JavaScript程序中。 如果运行以下命令,将会看到您拥有哪个版本JavaScript程序: ...

    Web-to-App技术解决方案,驱动变现增效-1017北京站.zip

    Web-to-App技术是当前移动互联网领域中一种重要的策略,旨在将网页应用(Web App)与原生应用程序(Native App)的优势相结合,为用户提供无缝的跨平台体验,同时提高商业变现效率。在这个主题中,我们将深入探讨Web...

    web和App测试的区别

    web和App测试的区别!web和App测试的区别!web和App测试的区别!web和App测试的区别

Global site tag (gtag.js) - Google Analytics