Tomcat:以编程方式更改虚拟主机?

jan*_*jan 10 java tomcat virtual-hosts

Tomcat提供了"虚拟主机"支持的构建:可以将引擎/ Web应用程序配置为负责域列表.必须使用特殊的xml指令将这些域放入server.xml/context.xml文件中.

=>是否有可能以编程方式更改Tomcat配置(通常),尤其是Web应用程序/引擎的"虚拟主机"?

例如,如果新用户注册,我必须将他的域添加到"已接受的虚拟主机/域"列表中.我目前想到的唯一方法是通过脚本更改xml文件,然后重新启动Tomcat.

有没有办法添加它们通过一些Java-Methods以编程方式添加运行时?

非常感谢你!一月

ZZ *_*der 6

Tomcat提供API来创建新的虚拟主机.要访问此所需的包装器对象,您需要实现ContainerServlet.你可以像这样创建虚拟主机,

    Context context = (Context) wrapper.getParent();
    Host currentHost = (Host) context.getParent();
    Engine engine = (Engine) currentHost.getParent();

    StandardHost host = new StandardHost();
    host.setAppBase(appBase);
    host.setName(domainName);

    engine.addChild(host);
Run Code Online (Sandbox Code Playgroud)

您需要确保appBase目录存在,并且您必须找到将新主机持久保存到server.xml的方法,或者在重新启动时丢失主机.

但是,这种方法很少有效.如果您的用户运行他们自己的应用程序,您真的想要运行单独的Tomcat实例,以便您可以更好地沙盒化应用程序.例如,一个内存不足的应用程序不会杀死所有其他应用程序.

如果您提供应用程序,则只能使用一个主机(defaultHost).您可以从Host标头获取域名,并在您的代码中执行任何特定于域的内容.