【问题标题】:Multiple war files for a single webapp or context单个 webapp 或上下文的多个 war 文件
【发布时间】:2011-10-11 13:48:08
【问题描述】:

我有一个具有以下结构的应用程序

$TOMCAT_HOME/webapps/myapp
            |-css
                |-myapp.css
            |-js
                |-myapp.js
            |-forum
                |-index.jsp
                |-list.jsp
                |-users.jsp
            |-Articles
                |-index.jsp
                |-ListArticles.jsp
            |-Guestbook
                |-viewGuestBook.jsp
                |-AddnewEntry.jsp
            |-WEB-INF
                |-classes
                    com
                     |-myapp
                        |-forum
                            |-DisplayForum.class
                            |-ListUsers.class
                        |-article
                            |-ArticleList.class
                            |-AddArticle.class
                        |-guestbk
                            |-LoadGuestBook.class
                            |-ProcessGuestBook.class

应用程序作为一个 war 文件(即 myapp.war)交付并部署到 $TOMCAT_HOME/webapps 文件夹中。如果任何文件发生更改(jsp、css、js 或 java 文件),我必须始终重建整个 war 文件。这意味着我在每个版本上部署每个文件。

我想知道是否有办法部署应用程序的特定区域。如果可以将应用程序分成多个war文件,我特别感兴趣。即 myapp.war、articles.war 和 forum.war。即使使用了多个war文件,我仍想通过相同的上下文访问应用程序,即http://0.0.0.0/myapp

使用这种方法,我将能够只交付受更改影响的模块。这有可能吗?

我不介意在部署每个 war 文件后必须重新启动容器。

【问题讨论】:

  • AFAIK 这是不可能的,因为每个 Web 应用程序都需要自己的上下文。但是,您可以使用 url 重写将 /myapp/articles/xxx 映射到 /articles/xxx 或类似的东西。
  • 在开发环境中,您可以将应用程序部署为目录(而不是 WAR 文件)。在这种情况下,您只需要分发更改的文件。
  • 顺便说一句,您还可以将应用程序部署为文件夹并创建 jars 来包含您的类文件。这样你就只有一堆 jars 在 WEB-INF/lib 和你的 JSP、CSS 等。
  • 是的,可以选择将每个模块部署为文件夹,将类文件部署为 jar 文件,但我更喜欢存档方法。如果无法使用某种存档方法,我可能会选择文件夹选项。
  • 最重要的是,如果没有实现逻辑来处理不同 war 文件之间的会话数据,我就无法拆分模块。 :)

标签: java jsp jakarta-ee tomcat


【解决方案1】:

我不记得你是如何做到这一点的 Tomcat,你可能需要做一些手动配置(在 context.xml 或类似的东西中),但我相当肯定你可以部署你的三个应用程序(.战争)具有以下上下文路径:

  • myapp.war -> /myapp
  • articles.war -> /myapp/articles
  • forum.war -> /myapp/forum

我在这里找到了一些特定于 Tomcat 的信息:

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

具体来说:

在单个文件(扩展名为“.xml”)中 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录。的名字 该文件(减去 .xml 扩展名)将用作上下文路径。 可以使用 # 定义多级上下文路径,例如foo#bar.xml 为 /foo/bar 的上下文路径。可以定义默认的 Web 应用程序 通过使用名为 ROOT.xml 的文件。

或者,您可能想要执行以下操作:

  • myapp.war -> /(称它为 ROOT.war)
  • articles.war -> /articles
  • forum.war -> /forum

话虽如此,但请记住,如果您这样做,您将无法在三个应用程序之间轻松共享状态(会话信息)。例如,如果“forum.war”需要身份验证,则该身份验证信息将不适用于 myapp.war 或articles.war。

【讨论】:

  • 第一种方法是否允许访问war文件之间的会话数据?
  • 不,它没有。需要明确的是,我并没有真正列出两种方法。我只是列出了相同方法的两种变体。
猜你喜欢
  • 1970-01-01
  • 2012-06-26
  • 2019-06-16
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多