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

web项目配置webAppRootKey 获得根目录

 
阅读更多

log4j和web.xml配置webAppRootKey 的问题

1 在web.xml配置 

<context-param>
  <param-name>webAppRootKey</param-name>
  <param-value>web.sample.root</param-value>
</context-param>

可以用System.getProperty("web.sample.root")来获取属性值。在Eclipse调试Web项目时,项目的路径是一个临时路径,不在真正的路径下,可以通过上述语句打印出属性值,来看看临时项目路径在哪里

如:System.out.println("web.root:"+ System.getProperty("web.root"));

    输出:web.root:D:\apache-tomcat-6.0.30\webapps\wangzun\

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

配置WebAppRootListener:

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


3、部署在同一容器中的多个Web项目,要配置不同的<param-value>,不能重复webAppRootKey的系统变量名

4.WebAppRootListener要在ApplicationContext的ContextLoaderListener之前,否则ApplicationContext的bean注入根目录值时会发生无法注入异常。

   <!-- 项目根目录Listener -->
 <listener>
  <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
 </listener>
 <!--Spring的ApplicationContext 载入 -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>


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

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


在tomcat下部署两个或多个项目时,web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为“webapp.root”,如下:

<!-- 应用路径 --> 
<context-param> 
<param-name>webAppRootKey</param-name> 
<param-value>webapp.root</param-value> 
</context-param> 
最好报纸每个项目的参数值不同,以免引起项目冲突

严重: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0\webapps\DRMProject\] instead of [C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0\webapps\DRMSn\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

对多个项目要对webAppRootKey进行配置,这里主要是让log能将日志写到对应项目根目录下,如我配置这两个项目的webAppRootKey为
项目1 的 web.xml:

<!-- 应用路径 -->
<context-param> 
<param-name>webAppRootKey</param-name> 
<param-value>webapp.root1</param-value> 
</context-param>

 <!-- 项目根目录Listener -->
 <listener>
  <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
 </listener>

项目2的 web.xml:
<!-- 应用路径 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root2</param-value>
</context-param>

 <!-- 项目根目录Listener -->
 <listener>
  <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
 </listener>

这样就不会出现冲突了。
定义以后,在Web Container启动时将把ROOT的绝对路径写到系统变量里
然后log4j的配置文件里就可以用${webName.root }来表示Web目录的绝对路径,把log文件存放于webapp中。

namemax:

 <context-param>
  <param-name>webAppRootKey</param-name>
  <param-value>web.root</param-value>
 </context-param>

 <!-- 项目根目录Listener -->
 <listener>
  <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
 </listener>

bean中可以使用:

   <bean id="transformChinese" class="com.zunmi.util.TransformChinese"

 

         p:outBasePath="${web.root}WEB-INF/destineDomainFile/"
         p:j2fSource="${web.root}WEB-INF/SimpleToTraditional.properties" 
         p:charSet="gbk"
        />

分享到:
评论

相关推荐

    tomcat部署多个项目.pdf

    这个异常是因为多个项目中的 `web.xml` 文件中没有配置 `webAppRootKey` 项,导致 Tomcat 无法正确地分配项目的根目录。 解决方法 1:配置 webAppRootKey 要解决这个问题,可以在每个项目的 `web.xml` 文件中添加 ...

    深入浅析java web log4j 配置及在web项目中配置Log4j的技巧

    `webAppRootKey` 参数用于指定Web应用的根目录,以便在配置文件中引用该路径。`log4jConfigLocation` 指定了Log4j配置文件的位置,通常放在`WEB-INF/classes`目录下。`log4jRefreshInterval` 参数定义了Log4j配置...

    web.xml配置解析.pdf

    `webAppRootKey`参数用于设置应用的根目录键,Log4jConfigListener则会在启动时寻找log4j.properties或log4j.xml配置文件,从而初始化日志系统。 5. **Struts2与Spring整合** 当Struts2和Spring整合时,通常需要...

    java web开发中的路径问题

    在`web.xml`配置文件中,URL映射的`"/"`也代表Web应用的根目录,用于将特定的URL模式映射到Servlet或其他组件上。 ### 总结 在浏览器端,`/`通常表示一台WEB服务器的根目录,即`http://机器IP:8080`。但在服务器...

    Java或web中解决所有路径问题

    在Spring框架中,为了方便获取Web应用的根目录,可以在`web.xml`中配置一个名为`webAppRootKey`的参数,其默认值为`webapp.root`: ```xml &lt;param-name&gt;webAppRootKey &lt;param-value&gt;webapp.root ``` 然后,在...

    red5 与 tomcat项目集成

    - `@webapp.root.key@` 替换:这个占位符需要被替换为 `${webapp.root.key}`,这是一个 Spring EL 表达式,用于动态获取 Web 应用的根目录。 - `context-param`:根据需要调整 `contextConfigLocation` 的值,加入...

    RED5安装与配置.doc

    在RED5中,所有的应用程序都放在RED5根目录下的“webapps”目录中。每个应用程序都需要在webapps目录下添加相应的目录,並在应用程序目录里创建一个名为“WEB-INF”的目录,用来存放程序的配置文件。在“doc/...

    基于web项目log日志指定输出文件位置配置方法

    这个键将在运行时用于动态获取Web应用的根目录,这样我们可以将日志文件保存在特定的项目路径下。 2. **配置Log4j配置文件的位置**:接下来,通过`&lt;context-param&gt;`元素设置`log4jConfigLocation`参数,指明Log4j...

    关于red5配置详解

    总结来说,Red5的配置涉及到多个层面,包括应用程序目录结构、核心配置文件`web.xml`的参数设置、`Context`和`Scope`的管理,以及对自定义组件的配置。理解并熟练掌握这些配置是确保Red5能够高效、稳定地运行流媒体...

    Log4j 相对路径配置

    1. `&lt;param-name&gt;webAppRootKey&lt;/param-name&gt;` 和 `&lt;param-value&gt;webApp.root&lt;/param-value&gt;` 这一对参数定义了一个系统属性,它的值是当前Web应用的根目录。在`log4j.properties`文件中,我们可以使用`${webApp....

    red5 配置详解

    1. **创建应用程序目录**:在Red5的根目录下的"Webapps"文件夹中创建一个子目录,此子目录名应与你的应用程序名称相同。这将是你的应用程序的主目录,其中包含必要的文件和配置。 2. **放置配置文件**:在新创建的...

    Spring+Hibernate笔记

    它定义了初始化参数,如web应用程序的根目录(webAppRootKey)和log4j配置文件的位置(log4jConfigLocation),以及监听器来初始化日志系统。 1.2. 配置Eclipse环境对于提高开发效率至关重要。这包括创建Java工程,...

    RED5安装与配置

    首先,RED5的应用程序部署在服务器根目录下的"webapps"文件夹中。每个应用都会有自己的目录,其中包含一个名为"WEB-INF"的子目录,用于存储应用的配置文件。"WEB-INF"目录下的主要配置文件是"web.xml",它是RED5应用...

    spring 配置log4j.docx

    1. **webAppRootKey参数**:这个参数用于指定Web应用程序的根目录键,它的默认值是"webapp.root"。在示例中,它被设置为"ssh.root",这意味着日志文件和配置文件的位置将会基于此设置。这对于多项目环境或者不同的...

    RED5安装与配置 RED5

    RED5将所有应用程序放置在其根目录下的`webapps`目录中。为了创建一个新的应用,你需要在`webapps`目录下新建相应的应用目录。每个应用目录内必须包含一个名为`WEB-INF`的子目录,用于存储该应用的配置文件。 #### ...

Global site tag (gtag.js) - Google Analytics