tomcat部署应用时设置context path为空的上下文路径问题

Tomcat应用部署解析
本文详细介绍了在Tomcat中如何通过server.xml配置文件部署应用程序,并分析了不同配置下应用程序的加载顺序及访问路径。了解这些内容有助于更好地管理和优化Tomcat应用。

在server.xml中添加<Context>元素,配置如下:

<Context docBase="app" path="" reloadable="false" />

在<Context>配置中包含如下信息:
1. 配置docBase值为:docBase="app"或者docBase="app.war";
2. path为空,表示app为tomcat默认应用;
同时,将app.war部署在CATALINA_HOME/webapps/路径下。


1.如果在部署app时删除了CATALINA_HOME/webapps/路径下的ROOT目录(即删除tomcat默认应用),
那么在tomcat启动时,会首先在CATALINA_HOME/webapps/路径下创建名称为ROOT的目录,然后将文件app.war中的内容拷贝到ROOT目录下,开始部署ROOT应用程序。
接下来才会解压app.war,再部署app应用。
从tomcat的启动日志可以很容易知道,在这种情况下app应用会被加载2次,一次是部署ROOT时加载的,另一次是部署app本身加载的。
因此,访问应用可以带应用上下文路径,也可以不用带上下文路径,即:http://host:port/xxx或者http://host:port/app/xxx。


2.如果在部署app时不删除CATALINA_HOME/webapps/路径下的ROOT目录,即已经存在默认应用程序。
此时在tomcat启动时,会先部署ROOT默认应用(注意:已经存在ROOT应用,不再会拷贝app.war文件内容到ROOT下)。然后解压app.war,部署app应用。显然,app应用只被部署一次!
因此,在这种情况下,即便配置了<Context>元素的path为空,但是访问app应用时还是必须携带应用上下文路径,即:http://host:port/app/xxx。


实际上,tomcat部署应用程序的顺序是这样的(tomcat启动日志):
1.最先部署CATALINA_HOME/webapps/路径下的ROOT应用,该应用为tomcat的默认应用程序,访问时不用带应用上下文路径,即:http://host:port/xxx。
2.然后再按照字母顺序升序依次部署其他应用程序,如:appA,appB等等。


【参考】
http://stackoverflow.com/questions/7276989/how-to-set-the-context-path-of-a-web-application-in-tomcat-7-0 How to set the context path of a web application in Tomcat 7.0

 

转载于:https://www.cnblogs.com/nuccch/p/6792931.html

### 若依项目部署Tomcat获取上下文路径的方法 在若依项目或其他基于Java EE框架开发的应用程序中,当需要在Tomcat启动阶段获取项目的上下文路径Context Path,可以采用以下几种方式: #### 1. 使用`ServletContextListener` 通过实现`javax.servlet.ServletContextListener`接口,在监听器的初始化方法中获取上下文路径。这种方式允许开发者在应用程序启动执行某些操作,并记录或存储上下文路径。 ```java import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ContextPathInitializer implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { String contextPath = sce.getServletContext().getContextPath(); System.out.println("Application started with context path: " + contextPath); // 可以在此处保存contextPath以便后续使用 } @Override public void contextDestroyed(ServletContextEvent sce) { // 清理工作可放在这里 } } ``` 此代码片段展示了如何在应用启动捕获上下文路径并打印出来[^1]。为了使这个监听器生效,还需要将其注册到`web.xml`文件中或者通过注解方式进行配置。 #### 2. 配置Tomcat的`Catalina/localhost/*.xml`文件 如果希望更早地控制上下文路径,可以在Tomcat的`conf/Catalina/localhost`目录下创建一个XML文件来定义具体的应用程序及其上下文路径。例如,假设我们的WAR包名为`ruoyi.war`,则可以创建一个名为`ruoyi.xml`的文件,内容如下所示: ```xml <Context path="" docBase="ruoyi" reloadable="true"/> ``` 这里设置字符串作为`path`属性值意味着该应用将成为根应用,默认情况下浏览器访问服务器IP地址即可进入本应用而不需额外附加子路径[^3]。注意此即使你在`server.xml`里指定了其他`path`也不会起作用因为局部覆盖全局原则适用于此场景当中[^2]。 #### 3. 动态解析Tomcat启动参数 另外一种不太常用但也有效果的办法就是分析Tomcat本身的命令行启动参数或者是环境变量里面是否存在关于当前正在加载的那个war包所对应的context-path信息项存在与否来进行判断处理得到最终的结果集返回给调用方知道确切数值是多少就可以了结束整个流程走向下一步骤继续往下走完成既定目标达成预期效果为止停止进一步动作指令下达完毕等待反馈消息回来确认无误后再做相应安排布置计划实施行动方案措施落实到位确保万无一失才行啊亲们! 总结来说,以上三种技术手段都可以帮助我们在不同层次上去抓取所需要的context-path数据用于满足实际应用场景下的各种复杂情况变化需求适应性强灵活性高值得推荐给大家参考借鉴学习一下哦小伙伴们!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值