web.xml中webAppRootKey
------------------------------------------------------------------------------------------------
1、 web.xml配置
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
"webapp.root"这个字符串可以随便写任何字符串。如果不配置默认值是"webapp.root"。
可以用System.getProperty("webapp.root")来动态获项目的运行路径。
一般返回结果例如:/usr/local/tomcat6/webapps/项目名
2、解决以下报错
部署在同一容器中的Web项目,要配置不同的<param-value>,不能重复,否则报类似下面的错误:
Web app root system property already set to different value:
'webapp.root' = [/home/user/tomcat/webapps/project1/] instead of
[/home/user/tomcat/webapps/project2/] - Choose unique values for the
'webAppRootKey' context-param in your web.xml files!
意思是“webapp.root”这个key已经指向了项目1,不可以再指向项目2.
3、加载方式
Spring通过org.springframework.web.util.WebAppRootListener 这个监听器来运行时的项目路径。
但是如果在web.xml中已经配置了 org.springframework.web.util.Log4jConfigListener这个监听器,
则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能
一般配置类型下面的例子:
- <!-- 加载Log4J 配置文件 -->
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>WEB-INF/conf/log4j.properties</param-value>
- </context-param>
- <context-param>
- <param-name>log4jRefreshInterval</param-name>
- <param-value>3000</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
4、在运行时动态的找出项目的路径
在log4j.properties配置文件,就可以按下面的方式使用${webapp.root}:
log4j.appender.file.File=${webapp.root}/WEB-INF/logs/sample.log
就可以在运行时动态的找出项目的路径
xml文件配置:
web.xml文件中webAppRootKey属性是web项目的绝对路径,默认值是webApp.root,可以通过System.getProperty(“webApp.root”)来获取属性值或者在配置文件中通过${webApp.root}获得。
<context-param>
<param-name >webAppRootKey</param-name >
<param-value >webApp.root </param-value >
</context-param >
- 1
- 2
- 3
- 4
Spring通过 org.springframework.web.util.WebAppRootListener 这个监听器来注入项目路径,因此部署在同一个web容器中的项目,要配置不同的param-value(比如”项目名.root”),不然会造成冲突。但是如果在web.xml中已经配置了org.springframework.web.util.Log4jConfigListener这个监听器,则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能。WebAppRootListener要在ApplicationContext的ContextLoaderListener之前,否则ApplicationContext的bean注入根目录值时会发生无法注入异常。
配置WebAppRootListener:
<listener>
<listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
</listener>
- 1
- 2
- 3
web.xml中配置及其监听器顺序如下:
<!--注意各监听器的顺序,否则可能会出现上述的${webapp.root}/WEB-INF/log/sshtest.log不存在的异常-->
<!-- log4j config path -->
< context-param >
<param-name >log4jConfigLocation </param-name >
<param-value >/WEB-INF/classes/log4j.properties </param-value >
</ context-param >
<!-- webapp root path -->
< context-param >
<param-name >webAppRootKey </param-name >
<param-value >projectName.root </param-value >
</ context-param >
<!-- Spring相关的配置 -->
<context-param >
<param-name >contextConfigLocation </param-name >
<param-value >/WEB-INF/applicationContext.xml,
/WEB-INF/dataBeanContext.xml </param-value >
</context-param >
<!-- log4j config listener -->
<listener >
<listener-class >
org.springframework.web.util.Log4jConfigListener
</listener-class >
</listener >
<!-- 使用ContextLoaderListener初始化Spring容器 -->
<listener >
<listener-class >org.springframework.web.context.ContextLoaderListener
</listener-class >
</listener >