如何使用 Tomcat 定义默认上下文元素?

我们在 tomcat 9 (apache-tomcat-9.0.22) 上部署了一个应用程序。


官方文档 ( https://tomcat.apache.org/tomcat-9.0-doc/config/context.html ) 说可以定义默认上下文元素,但它对我们不起作用。


我们需要定义一个数据源和一个邮件服务器。conf/server.xml如果我们在文件中定义此资源,GlobalNamingResources它就可以工作。


<GlobalNamingResources>

    <Resource name="mail" type="javax.mail.Session"... />

    <Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... />

</GlobalNamingResources>

但是在生产中,我们不能修改server.xml文件。所以我们需要在另一个文件中定义这个资源。


如果我们$CATALINA_BASE/conf/[enginename]/[hostname]/ROOT.xml使用名为 ROOT.war 的 war 在文件中定义资源,它会起作用:


<?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>

这个解决方案可能令人满意,但我们的 war 文件必须具有与 ROOT.war 不同的名称(如 MyApp_v42.war),并且它会随着每次更新而改变。我们不能每次更新都重命名xml文件。


如果我们在$CATALINA_BASE/conf/context.xml文件中或$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default文件中定义资源,如文档所述,我们将获得一个javax.naming.NameNotFoundException.


提前致谢!


素胚勾勒不出你
浏览 123回答 1
1回答

绝地无双

一种解决方案是:定义资源conf/context.xml:<?xml version="1.0" encoding="UTF-8"?><Context>&nbsp; &nbsp; <Resource name="mail" type="javax.mail.Session"... />&nbsp; &nbsp; <Resource name="jdbc/mydb" type="javax.sql.DataSource"... />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-->&nbsp; &nbsp; <WatchedResource>WEB-INF/web.xml</WatchedResource>&nbsp; &nbsp; <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>&nbsp; &nbsp; <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>&nbsp; &nbsp; <Manager pathname="" /></Context>使用 webapps 目录之外的部署,例如wars/ROOT.xml在 下创建一个 XML 文件,该文件使用相对于 webapps 目录的路径conf/Catalina/localhost/定义属性:docBase<?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?> <Context&nbsp;docBase="../wars/MyApp.war"></Context>这样 :文件conf/server.xml未修改war 文件的名称不是必需的ROOT.xml资源定义在conf/context.xml但 :conf/Catalina/localhost/每个 .war&nbsp;中必须有一个文件战争不会自动部署如果更改根 war 文件的名称,则必须修改文件docBase中的属性conf/Catalina/localhost/ROOT.xml。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java