【问题标题】:tomcat deploy module war to sub url pathtomcat 将模块战争部署到子 url 路径
【发布时间】:2017-08-22 16:11:48
【问题描述】:

我有一个多模块 maven 项目,其结构如下所示:

app                // parent/root project folder
 |- src         
 |- target
      |- app.war   // common features
 |- app-payment    // child/module folder
        |- src   
        |- target
             |- app-payment.war  // shop/pay features

如何将这两个战争文件映射到如下所示的 url?

requests for    
   localhost:8080/app/payment   --goto-->   $CATALINA_HOME/webapps/app-payment.war (or any other locations, doesn't matter)
other requests for
   localhost:8080/app           --goto-->   $CATALINA_HOME/webapps/app.war

web.xml -> <servlet-mapping> 都是<url-pattern>/</url-pattern>

我正在使用 tomcat 8.5 并希望尽可能保留默认设置(例如,不要在 server.xml 中添加 <Context>,保留 autoDeploy=true)。所以可能是 A word on Contexts 中提供的方法 https://tomcat.apache.org/tomcat-8.5-doc/deployer-howto.html 不起作用(无论如何都试过了,没有)。

万一这是一个 XY 问题...使用/修改 tomcat 来实现这种 url 模式是正确的方法吗?还是我应该更改项目设置(或设计)?这是一个 spring-mvc 项目,整个 spring-*.xml 就像一个神话......


catalina.2017-03-29.log:

2017 年 3 月 29 日 17:28:49.472 INFO [main] org.apache.catalina.core.StandardService.startInternal 启动服务 Catalina 2017 年 3 月 29 日 17:28:49.472 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 启动 Servlet 引擎:Apache Tomcat/8.5.5 2017 年 3 月 29 日 17:28:49.494 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR 部署 Web 应用程序存档 C:\Program_Files\tomcat-8.5.5\webapps\payment.war 2017 年 3 月 29 日 17:28:49.505 警告 [localhost-startStop-1] org.apache.catalina.startup.SetContextPropertiesRule.begin [SetContextPropertiesRule]{Context} 将属性“antiJARLocking”设置为“真”没有找到匹配的属性. 2017 年 3 月 29 日 17:28:51.071 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少扫描了一个 JAR 以查找 TLD,但未包含 TLD。启用此记录器的调试日志记录以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。 2017 年 3 月 29 日 17:28:52.480 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR 部署 Web 应用程序存档 C:\Program_Files\tomcat-8.5.5\webapps\payment.war已在 2,985 毫秒内完成 2017 年 3 月 29 日 17:28:52.482 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署 Web 应用程序目录 C:\Program_Files\tomcat-8.5.5\webapps\docs 29-Mar-2017 17:28:52.494 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web 应用程序目录 C:\Program_Files\tomcat-8.5.5\webapps\docs 部署完成在 12 毫秒内 2017 年 3 月 29 日 17:28:52.494 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署 Web 应用程序目录 C:\Program_Files\tomcat-8.5.5\webapps\examples

【问题讨论】:

    标签: java spring tomcat web war


    【解决方案1】:

    尝试更改您的war文件的context.xml

     <Context antiJARLocking="true" path="/app/payment"/>
    

    默认是

     <Context antiJARLocking="true" path="/app-payment"/>
    

    【讨论】:

    • 是xx.war/META-INF下的context.xml吗?
    • 是的,正确。相同的 context.xml。另外,我建议您在部署新应用程序之前完全取消部署现有应用程序
    • 对不起,我试过这个也不起作用... webapps/app-payment.war 仍然变成 localhost:8080/app-payment... 虽然找到这个link...
    • 您是否完全删除了旧部署?
    • 你不是在调整 tomcat。您正在修改您的应用程序
    【解决方案2】:

    我知道这是一篇旧帖子,但我想分享一下。我必须在我有一个 Web 应用程序的地方做类似的事情,然后是另一个需要在核心应用程序的相同目录名称下运行的单独的 Web 应用程序。所以像......

    https://www.example.com/webapp (main app)
    https://www.example.com/webapp/subapp (sub-app)
    

    为此,我将它部署到 Tomcat webapps 文件夹,如下所示:

    ../webapps/webapp.war
    ../webapps/webapp#subapp.war
    

    对我来说就像一个魅力。如果我没记错的话,这是完全支持的,无需任何其他配置(Tomcat v7 和 v8……还没有尝试过 v9)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2016-09-19
      • 2019-03-21
      相关资源
      最近更新 更多