2009-06-24 4 views
2

Tomcat 6.0 서버에서 실행되는 더 큰 응용 프로그램의 모듈 인 여러 개의 미니 전쟁이 있습니다. 서로 다른 설치가 다른 모듈을 필요로하기 때문에 나는 하나의 전쟁에 모든 모듈을 집어 넣는 대신에 이렇게하고있다. 나는 다른 미니 전쟁이 서버에 설치되었는지 알 필요가있는로드 블록을 치기 시작했습니다. Tomcat 6.0 서버에 설치된 모든 전쟁/컨텍스트 목록을 가져 오는 방법이 있습니까?톰캣 서버의 컨텍스트 목록 얻기

답변

3

내가 만든 "미니 전쟁"이 tomcat의 공통 클래스 로더 수준에서 lib를 공유 할 수 있기 때문에이 문제에 대한 해결 방법을 얻을 수있었습니다. 트릭은 다음을 수행하는 (공통 클래스 로더에 위치)는 ApplicationListener을 사용하는 것입니다하십시오 Context가 정적지도에서 ServletContext로 등록 만들어

public class ApplicationListener implements ServletContextListener { 

    private static Map<String, ServletContext> contexts = 
    new HashMap<String,ServletContext>(); 

    public void contextInitialized(ServletContextEvent event) { 
    ServletContext context = event.getServletContext(); 
    if (context.getContextPath().length() > 0) 
     contexts.put(context.getContextPath(), context); 
    context.setAttribute("myapps", applications); 
    } 

} 

. 이 정적지도는 Context 변수 myapps을 통해 모든 컨텍스트간에 공유됩니다. 다른 컨텍스트에 액세스 할 필요가있을 때마다 다음을 할 수 있습니다.

ServletContext namedcontext = 
    ((ServletContext) ServletContext.getAttribute("myapps")).get("/namedapp"); 

누군가에게 도움이되기를 바랍니다.

+0

컨텍스트가 아닙니다 .setAttribute ("myapps", contexts); ? – raspacorp

+0

해당 코드를 catalina.jar의 ApplicationListener 클래스에 추가 했습니까? 또는 해당 코드를 어디에 두어야합니까? – raspacorp

1

웹 응용 프로그램 중 하나에서 가능하지 않습니다.

설치되어있는 경우 서버의/manager/html에 액세스 할 수있는 tomcat 관리 콘솔을 사용할 수 있습니다. 그러면 설치된 모든 응용 프로그램이 나열됩니다.

관련 문제