`

关于tomcat多个spring应用部署时webAppRootKey属性设置问题

 
阅读更多

Spring中有个监听器

 

public class WebAppRootListener implements ServletContextListener {

	public void contextInitialized(ServletContextEvent event) {
		WebUtils.setWebAppRootSystemProperty(event.getServletContext());
	}

	public void contextDestroyed(ServletContextEvent event) {
		WebUtils.removeWebAppRootSystemProperty(event.getServletContext());
	}

}

 初始化方法内容如下(将日志代码去掉):

 

 

public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException {
		Assert.notNull(servletContext, "ServletContext must not be null");
		String root = servletContext.getRealPath("/");
		if (root == null) {
			throw new IllegalStateException();
		}
		String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);//webAppRootKey
		String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY);//webapp.root
		String oldValue = System.getProperty(key);
		if (oldValue != null && !StringUtils.pathEquals(oldValue, root)) {
			throw new IllegalStateException()
                 }
		System.setProperty(key, root);
	}

 可以看到这个监听器的作用就是将项目根路径作为value放到系统参数中去,而这个key值默认是“webapp.root”,如果想要修改可以在ServletContext中通过设置“webAppRootKey”这个参数来修改这个key值(比如在web.xml文件中修改)。

这个参数可以用于一些工具包在项目运行时动态以${webapp.root}这样的方式动态获取项目路径,比如log4j.properties配置文件中 log4j.appender.file.File=${webapp.root}/WEB-INF/logs/sample.log就可以在运行时动态的找出项目的路径。

包括Tomcat的一些容器,没有为各个应用维护自己的系统参数,所以必须用“webAppRootKey”为每个web应用设置单独的根目录系统参数key,否则会引起冲突,报错。看上面代码就是如果两个同一个key值被设置过一次且值与当前不同则报错。

当然想要用这个系统参数要在web.xml中配置WebAppRootListener这个监听器,但是如果配置了Log4jConfigListener或者LogbackConfigListener则不需要再陪上面的监听器了,因为这两个监听器的初始化方法第一步就是运行上面的setWebAppRootSystemProperty,但是运不运行又要看另一个参数 "xxxExposeWebAppRoot"。那又是另一回事了

 

两个部署在同一个tomcat下的spring项目如果webAppRootKey值相同有可能会发生只能访问第一个启动的项目,后面启动项目报404错误的问题

 

分享到:
评论

相关推荐

    关于tomcat部署多系统仅部分系统正常说明及解决办法

    2、多个项目一起部署仅部分系统可以使用。 解决办法:检查每个系统的web.xml配置文件,文件位置: Tomcat服务器下../webapps/项目名称/WEB-INF/web.xml。 【webAppRootKey】与其他项目下的配置值决不可相同!。 ...

    tomcat部署多个项目.pdf

    在 Tomcat 中部署多个项目时,可能会遇到一些问题,例如多个项目间的配置冲突、日志记录问题等。以下是解决这些问题的方法和相关知识点。 问题 1:java.lang.IllegalStateException 在多个项目中,可能会遇到 `...

    red5 与 tomcat项目集成

    2. **Tomcat 服务器**:Apache Tomcat 是一个开源的、基于 Java Servlet 和 JavaServer Pages (JSP) 技术的 Web 应用服务器,广泛应用于小型到中型的 Java Web 应用部署。它是 Apache 软件基金会的一个项目,执行 ...

    Spring配置总结

    为了防止在同一容器中部署多个应用时的日志配置冲突,我们需要通过设置唯一的`webAppRootKey`来指定日志的存储路径。如下面的代码所示: ```xml <param-name>webAppRootKey <param-value>itservice.root ``...

    Tomcat 7通过设置不同的端口部署两个项目

    在IT行业中,尤其是在Web服务器管理领域,经常遇到需要在一个服务器上部署多个应用的情况。Tomcat作为流行的Java Servlet容器,能够支持这种多项目部署的需求。本文将详细介绍如何在Tomcat 7上通过设置不同的端口来...

    Spring+Hibernate笔记

    1.3.4. 当所有配置完成并正确无误时,可以运行Spring的Hello World应用,验证环境配置是否成功。通过浏览器访问指定的URL,如果能看到预期的“Hello World”消息,那么说明配置已成功。 1.4. 小结中提到,本章重点...

    springboot项目

    Spring Boot支持内嵌的Web服务器,如Tomcat或Jetty,这使得我们无需单独部署Web服务器,可以直接运行`.jar`文件启动应用。 **6. YAML或Properties配置** Spring Boot应用可以通过`application.yml`或`application....

    tomcat工程迁移至weblogic文档

    为了避免因多个项目使用相同的默认键值而引发冲突,可以通过设置`webAppRootKey`来为当前项目指定一个唯一的键值。 ```xml <param-name>webAppRootKey <param-value>webappby.root ``` 这里的`webappby.root`...

    Spring在容器在启动的时候发生了什么

    在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。 首先,我们在`web.xml`配置文件中看到了`<context-param>`和`...

    spring框架底层架构[借鉴].pdf

    从给定的文件内容可以看到,这是一个 Spring 框架的 Web 应用程序配置文件,使用 XML 格式定义了应用程序的各种配置项。 首先,让我们来看一下 XML 文件的头部声明 `<xml version="1.0" encoding="UTF-8"?>`,这里...

    spring 配置log4j.docx

    在Spring框架中,配置Log4j是一个常见的任务,它允许我们对应用的日志输出进行精细控制,便于调试、监控和问题排查。以下是关于Spring配置Log4j的关键知识点: 1. **webAppRootKey参数**:这个参数用于指定Web应用...

    spring、struts、ibatis框架搭建流程

    通过上述步骤,可以成功地将Spring、Struts和iBatis这三个框架集成到一起,搭建出一个完整的Java Web应用程序架构。这样的架构不仅提供了灵活的应用程序开发方式,还能够很好地支持MVC模式的设计思想,使得应用程序...

    Spring 注解学习手札

    `<context-param>`用于设置全局参数,例如`webAppRootKey`用于定义应用的根目录,`log4jConfigLocation`和`log4jRefreshInterval`分别指定Log4J配置文件的位置和刷新间隔,而`contextConfigLocation`则指定了Spring...

    Red5 0.9与现有tomcat项目整合

    整合Red5 0.9到现有的Tomcat项目中涉及到多个配置文件的调整和优化。通过上述步骤,不仅可以成功集成Red5,还可以实现基于Flex的视频播放功能。在整个过程中需要注意细节处理,如日志配置的调整以及配置文件的兼容性...

    web.xml配置解析[总结].pdf

    `ContextLoaderListener`是Spring框架提供的一个监听器,其主要功能是在Web应用启动时自动加载`ApplicationContext`的配置信息。通过在`web.xml`中配置如下: ```xml <listener-class>org.springframework....

    Red5 0.9与现有tomcat项目整合修正版

    在集成Red5服务器与现有的Tomcat项目时,通常会遇到一些兼容性和配置问题。本文档详细介绍了如何将Red5 0.9版本与现有的Tomcat项目进行整合,并对之前的整合方法进行了修正和完善。通过以下步骤,你可以有效地实现...

    Spring对Log4J的增强.txt

    - **说明**:此配置指定了Log4J配置文件的路径,以便Spring可以在启动时加载并应用这些配置。 3. **`log4jRefreshInterval`**: - **作用**:指定Log4J配置文件的刷新间隔时间(毫秒)。 - **示例**: ```xml ...

Global site tag (gtag.js) - Google Analytics