簡體   English   中英

Servlet中的Singleton和Tomcat7上的其他類

[英]Singleton in Servlets and other Classes on Tomcat7

我有一些Web應用程序。 每個位於Tomcat7上的不同虛擬主機中。 所有這些Web應用程序都使用相同的庫集合(由我自己編寫),以.jar的形式存儲在WEB-INF / lib中。該庫具有一些靜態類(記錄器,配置等)。 它接縫了web-app X可以看到/使用web-app Y的靜態實例。“隨機地” X寫入Y的日志文件。Y使用X的配置。

這通常與Tomcat中的JVM有關嗎?

僅對於Servlet,我可以將靜態類存儲在ServletContext中,但非Servlet無法訪問它們,對嗎?

這里是Config.java類中的構造方法

public class Config{
    public static Config instance;

    private Config(){

    }
    public static Config getInstance(){
         if(instance==null) instance = new Config();
         return instance;
    }
}

在Servlet和其他類中,我使用

private static Config config = Config.getInstance();

還有其他方法可以在整個Web應用程序中共享一個Class的一個實例,但只能在此Web應用程序中共享嗎?

在上下文/X運行的任何內容都不會在/Y/WEB-INF/libY/WEB-INF/classes看到任何內容。 原因是/X/WEB-INF/lib中的jar和/X/WEB-INF/classes 中的類與上下文/Y的jar和類位於不同的類加載器中 這不是Tomcat的“問題”,這是根據J2EE Servlet規范。

我將重新設計,但是如果您確實需要在兩個或多個上下文之間共享一個類,請將這些類放在一個jar中,然后將該jar放在${CATALINA_HOME}/lib 該文件夾中的類對於所有上下文都是可見的,因為它們是作為上下文類加載器的父類加載到類加載器中的。

執行此操作的“正確”方法是在JNDI中注冊對象,應用程序的每個組件都可以在其中查找對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM