英文:
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.xml
和B_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.war
和 B.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.xml
s.
Example:
Suppose I've two apps A.war
and B.war
. My tomcat is hosted in localhost. I create two seperate context.xml
s in $CATALINA_BASE/conf/Catalina/localhost/A.xml
& $CATALINA_BASE/conf/Catalina/localhost/B.xml
with the following property:
A.xml
<Context altDDName="$CATALINA_BASE/webxmls/A_web.xml">
</Context>
and similarly B.xml
:
<Context altDDName="$CATALINA_BASE/webxmls/B_web.xml">
</Context>
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
<?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>
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
<Context docBase="****" altDDName="$CATALINA_BASE/webxmls.xml">
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论