Java 如何使用Tomcat定义默认上下文元素?
我们在tomcat 9(apache-tomcat-9.0.22)上部署了一个应用程序 官方文档()说可以定义默认上下文元素,但对我们不起作用 我们需要定义一个数据源和一个邮件服务器。如果我们在Java 如何使用Tomcat定义默认上下文元素?,java,tomcat,deployment,war,context.xml,Java,Tomcat,Deployment,War,Context.xml,我们在tomcat 9(apache-tomcat-9.0.22)上部署了一个应用程序 官方文档()说可以定义默认上下文元素,但对我们不起作用 我们需要定义一个数据源和一个邮件服务器。如果我们在GlobalNamingResources中的conf/server.xml文件中定义此资源,它就会工作 <GlobalNamingResources> <Resource name="mail" type="javax.mail.Session"... /> &l
GlobalNamingResources
中的conf/server.xml
文件中定义此资源,它就会工作
<GlobalNamingResources>
<Resource name="mail" type="javax.mail.Session"... />
<Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... />
</GlobalNamingResources>
此解决方案可能令人满意,但我们的war文件必须具有与ROOT.war不同的名称(如MyApp_v42.war),并且它将随着每次更新而更改。我们无法在每次更新时重命名xml文件
如果我们在$CATALINA_BASE/conf/context.xml
文件或$CATALINA_BASE/conf/[engineame]/[hostname]/context.xml中定义资源,默认的类似于文档的文件表示我们获得了javax.naming.NameNotFoundException
提前谢谢 一种解决办法是:
- 在
conf/context.xml
中定义资源:
这样:
- 未修改
conf/server.xml
文件
- war文件的名称不是必需的
ROOT.xml
- 资源在
conf/context.xml
但是:
- 您必须在
conf/Catalina/localhost/
per.war中有一个文件
- 战争不是自动部署的
- 如果更改根war文件的名称,则必须修改
conf/Catalina/localhost/root.xml
文件中的docBase
属性
这些说明有缺陷,但您的思路是正确的。不要命名文件ROOT.xml
。取而代之的是,将其命名为MyApp.xml
,这将通过xml文件的名称定义上下文路径。更好的是,将META-INF/context.xml
打包到WAR文件中——使用适当的WAR文件名——然后像往常一样部署WAR。Tomcat将自动在WAR文件中使用部署描述符。@ChristopherSchultz感谢您的回答。我没有指定,但我的WAR不再使用此解决方案命名为ROOT.xml。@ChristopherSchultz将META-INF/context.xml
放入WAR文件的解决方案可以工作,但并不令人满意,因为资源依赖于服务器,并且同一个WAR可以部署在多个服务器上。所以资源必须在WAR之外定义。哦,我没有意识到您想要使用根上下文,但不想指定ROOT.WAR
。在本例中使用ROOT.xml
是正确的方法(在许多文章和原始文档中都有介绍)
<?xml version="1.0" encoding="UTF-8"?>
<!-- Context configuration file for my web application -->
<Context>
<Resource name="mail" type="javax.mail.Session"... />
<Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... />
</Context>
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="mail" type="javax.mail.Session"... />
<Resource name="jdbc/mydb" type="javax.sql.DataSource"... />
-->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Manager pathname="" />
</Context>
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="../wars/MyApp.war"></Context>