Cannot set web app root system property when WAR file is not expanded

昨天项目 以2种方式进行跑,一种是 war包,一种是 文件夹的形式!

tomcat 下面2种方式都没问题。

weblogic下面 war包的形式进行部署的话 报如下错误:

Caused By: java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded
at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:139)
at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:118)
at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:47)
at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
Truncated. see log file for complete stacktrace

网上很多解决办法,说是 log4j 的配置问题,但是怎么搞都不行!


最后查看源码,发现其实主要问题是 : servletContext.getRealPath函数为空

然后就根据这个去查 ,发现果然是weblogic的问题;


解决办法:

在web-inf 下面 加  weblogic.xml 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
 
<weblogic-web-app>
  <container-descriptor>
    <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
  </container-descriptor>
</weblogic-web-app>

然后问题就解决了。

最近又遇到这个问题,发现另外一个新解决办法:

在web.xml 中配置 如下参数:

  <context-param>
    <param-name>log4jExposeWebAppRoot</param-name>
    <param-value>false</param-value>
  </context-param>
不过如果这样做的话 ,那么 log4j的配置文件 只能放在 class 下面 不能放在 web-inf 下面; 
即 不能如此配置:

<!--启动LOG4J-->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>
    <listener>
应该:

<!--启动LOG4J-->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>
    <listener>




主要参考: http://wiki.bsdn.org/pages/viewpage.action?pageId=3440713

<think>好的,我现在需要帮助用户解决在设置系统会话属性clientTags时出现的错误。用户提到错误信息是“error when setting system session property clientTags, cannot set clientTags”,并且他们参考了RFC5128和Rendezvous服务器的内容,可能是在处理P2P通信或类似的技术时遇到了这个问题。 首先,我需要确定clientTags的具体用途。通常,会话属性用于配置客户端或会话的参数,可能涉及标签或元数据。根据错误信息,用户可能没有权限修改这个属性,或者属性名称不正确,或者在当前上下文中不允许设置。 接下来,我要考虑可能的原因。比如,是否clientTags是只读属性?是否有拼写错误?或者是否需要特定的权限或角色才能修改?另外,用户提到的RFC5128和Rendezvous服务器可能与NAT穿透或P2P连接有关,这可能意味着clientTags在建立连接时用于标识客户端,但设置时存在问题。 然后,我需要查阅相关的文档或资源。用户提供的引用[1]提到RFC5128和Rendezvous服务器,可能涉及到连接反转的技术。如果clientTags是在这种环境下使用的,可能需要特定的格式或正确的服务器配置。比如,是否需要在服务器端启用clientTags的支持,或者在客户端传递标签时需要遵循特定的协议? 可能的解决方案包括:检查属性名称是否正确,确认用户权限,查看系统是否支持动态设置该属性,或者联系技术支持。此外,可能需要检查日志或错误详细信息,以确定具体原因。例如,某些系统可能要求clientTags在创建会话时设置,而不是在之后修改。 另外,考虑到用户可能使用的是特定软件或框架(如RustDesk的rdserver),可能需要查阅该软件的文档,确认clientTags的使用方法和限制。如果文档中没有明确说明,可能需要社区或官方支持渠道获取帮助。 最后,生成相关问题需要围绕系统属性设置、权限管理、RFC5128应用以及Rendezvous服务器的配置等方面,帮助用户进一步排查问题或扩展相关知识。</think>针对设置系统会话属性`clientTags`时出现的错误,以下是逐步分析与解决方案: ### 错误原因分析 1. **权限不足** - `clientTags`属性可能需要管理员权限或特定角色才能修改。例如,某些系统会话属性只能在初始化时由服务端配置,而非客户端动态设置[^1]。 2. **属性名称错误** - 检查属性拼写是否完全匹配(区分大小写)。例如,是否应为`client_tags`或`ClientTags`? 3. **属性不可动态修改** - 根据RFC5128中关于P2P连接的定义,部分会话属性需在连接建立前通过Rendezvous服务器预先配置,无法在运行时修改[^1]。 4. **格式或值无效** - `clientTags`可能需要特定数据类型(如JSON数组)或遵循协议约束。例如:`{"os": "windows", "version": "1.2.3"}`。 ### 解决方案 1. **检查权限与角色** ```bash # 示例:通过管理员权限启动服务(假设使用rdserver) sudo rdserver --set-property clientTags="your_value" ``` 2. **验证属性名称与作用域** - 查阅框架/工具文档(如RustDesk),确认`clientTags`是否属于客户端可配置属性。 3. **在连接初始化时设置属性** ```python # 示例:在建立会话前通过Rendezvous服务器传递clientTags import rustdesk session = rustdesk.Session( rendezvous_server="your_server", clientTags={"role": "admin", "region": "eu"} ) ``` 4. **检查日志与错误详情** - 查看服务端日志,确认是否触发类似`"property clientTags is read-only"`的明确错误提示。 ### 引用说明 根据RFC5128,Rendezvous服务器在P2P连接中负责协调客户端元数据(如标签),但部分属性需在握手阶段固定,后续不可修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值