如何修改每个 Web 应用程序的 Tomcat web.xml 文件位置

huangapple go评论101阅读模式
英文:

How to modify tomcat web.xml location per webapplication

问题

我有多个Spring Boot应用程序部署在我的Tomcat服务器上(作为war文件)。我的问题是,我想要为一些Web应用程序自定义Tomcat的默认“session-timeout”(即在不编辑全局“$CATALINA_BASE/conf/web.xml”的情况下实现)。

我搜索并阅读了Tomcat文档。看起来我唯一能实现这一目标的方式是在需要不同“session-timeout”值的war文件内创建/WEB-INF/web.xml。但是我们不会在源代码库中存储特定于应用程序的web.xml配置。

因此,我想要做的是创建一个目录,用于存储所有特定于Web应用程序的web.xml文件,并告诉Tomcat从那里加载web.xml文件,而不是从我的war文件的/WEB-INF/web.xml位置加载。

示例:

对于Web应用程序“A.war”和“B.war”,我希望有一个名为$CATALINA_BASE/webxmls的目录,其中包含两个web.xml文件,分别命名为A_web.xmlB_web.xml。Tomcat将加载这些web.xml,而忽略war文件的默认/WEB-INF/web.xml路径。

英文:

I've multiple spring boot applications deployed in my tomcat server (as war files). My problem is I want to customize tomcat's default session-timeout for some of the webapps (ie. without editing the global $CATALINA_BASE/conf/web.xml).

I searched and read tomcat docs. It seems the only way I can achieve that is by creating /WEB-INF/web.xml inside my war files that needs different session-timeout value. But we don't store app specific web.xml configurations in our source base.

So what I want to do is create a directory where I'll store all the webapp specific web.xml files and tell tomcat to load the web.xml file from there and not from my war's /WEB-INF/web.xml location.

Example:

For webapp A.war, B.war I want to have a directory $CATALINA_BASE/webxmls which has two web.xml inside like A_web.xml and B_web.xml. Tomcat will load these web.xml ignoring war's default /WEB-INF/web.xml path.

答案1

得分: 1

我通过为每个 Web 应用程序创建单独的 context.xml 文件来解决了这个问题。根据 Tomcat 文档,context.xml 具有一个名为 altDDName 的属性,它可以覆盖该 Web 应用程序的 web.xml 文件的绝对路径。根据 Tomcat 的文档

altDDName
用于此上下文的替代部署描述符的绝对路径。这将覆盖位于 /WEB-INF/web.xml 的默认部署描述符。

因此,通过在 altDDName 中设置我的外部 web.xml 的绝对路径,我可以将所有 Web 应用程序特定的 web.xml 文件外部存储。

示例:

假设我有两个应用程序 A.warB.war。我的 Tomcat 托管在本地主机上。我在 $CATALINA_BASE/conf/Catalina/localhost/A.xml$CATALINA_BASE/conf/Catalina/localhost/B.xml 中分别创建了两个单独的 context.xml 文件,内容如下:

A.xml

<Context altDDName="$CATALINA_BASE/webxmls/A_web.xml">
</Context>

以及类似的 B.xml

<Context altDDName="$CATALINA_BASE/webxmls/B_web.xml">
</Context>

现在在 $CATALINA_BASE/webxmls/A_web.xml 中,我可以存储我的外部 web.xml,在其中我可以覆盖特定于 Web 应用程序的 session-timeout

A_web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1">

    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>

</web-app>

类似地,为 B.war 创建新的 B_web.xml

我希望有比这更好的解决方案,但这解决了我的问题。

英文:

I solved this problem by creating seperate context.xml for each webapp. According to tomcat docs context.xml has an attribute named altDDName which can override the absolute path of that webapp's web.xml. According to tomcat docs:

> altDDName
The absolute path to the alternative deployment descriptor
> for this context. This overrides the default deployment descriptor
> located at /WEB-INF/web.xml.

So setting the absolute path of my external web.xml in altDDName will allow me to externally store all my webapp specific web.xmls.

Example:

Suppose I've two apps A.war and B.war. My tomcat is hosted in localhost. I create two seperate context.xmls in $CATALINA_BASE/conf/Catalina/localhost/A.xml & $CATALINA_BASE/conf/Catalina/localhost/B.xml with the following property:

A.xml

&lt;Context altDDName=&quot;$CATALINA_BASE/webxmls/A_web.xml&quot;&gt;
&lt;/Context&gt;

and similarly B.xml:

&lt;Context altDDName=&quot;$CATALINA_BASE/webxmls/B_web.xml&quot;&gt;
&lt;/Context&gt;

Now in $CATALINA_BASE/webxmls/A_web.xml I can store my external web.xml where I can override webapp specific session-timeout:

A_web.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;web-app xmlns=&quot;http://xmlns.jcp.org/xml/ns/javaee&quot;
  xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version=&quot;3.1&quot;&gt;

    &lt;session-config&gt;
        &lt;session-timeout&gt;60&lt;/session-timeout&gt;
    &lt;/session-config&gt;

&lt;/web-app&gt;

Similarly create new B_web.xml for B.war.

I hope there are better solution than this. But it solves my problem.

答案2

得分: 0

你可以通过以下方式更改web.xml的路径:

<Context docBase="****" altDDName="$CATALINA_BASE/webxmls.xml">
英文:

you can change the path of web.xml by the following way

&lt;Context docBase=&quot;****&quot; altDDName=&quot;$CATALINA_BASE/webxmls.xml&quot;&gt;

huangapple
  • 本文由 发表于 2020年9月8日 00:30:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/63781257.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定