为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

素胚勾勒不出你 2023-03-31 17:18:46
我们在 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.提前致谢!
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

一种解决方案是:

定义资源conf/context.xml:

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

  • 使用 webapps 目录之外的部署,例如wars/

  • ROOT.xml在 下创建一个 XML 文件,该文件使用相对于 webapps 目录的路径conf/Catalina/localhost/定义属性:docBase

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="../wars/MyApp.war"></Context>

这样 :

  • 文件conf/server.xml未修改

  • war 文件的名称不是必需的ROOT.xml

  • 资源定义在conf/context.xml

但 :

  • conf/Catalina/localhost/每个 .war 中必须有一个文件

  • 战争不会自动部署

  • 如果更改根 war 文件的名称,则必须修改文件docBase中的属性conf/Catalina/localhost/ROOT.xml


查看完整回答
反对 回复 2023-03-31
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信