2008-09-03 2 views
4

웹 컨테이너에 전혀 연관되지 않은 Bean 또는 Factory 클래스 내에서 web.xml에 지정된 속성 (예 : 초기화 매개 변수)에 액세스 할 수있는 방법은 Servlet API에 있습니까?Java Bean에서 web.xml 속성에 액세스하는 방법이 있습니까?

예를 들어 Factory 클래스를 작성 중이며 Factory 클래스 내에 몇 가지 로직을 포함시켜 파일 계층 구조와 구성 위치를 확인하여 어떤 구현 클래스를 인스턴스화할지 결정할 수 있는지 확인하십시오 - 아무것도 사용할 수없는 경우, 예를 들어,

  1. 등록 정보는
  2. web.xml 파일 매개 변수,
  3. 시스템 속성 또는
  4. , 클래스 패스에 몇 가지 기본 논리를 파일.

ServletConfig 또는 내 공장과 비슷한 내용을 삽입하지 않고도이 작업을 수행하고 싶습니다. 코드가 서블릿 컨테이너 외부에서 정상적으로 실행될 수 있어야합니다.

약간 이상하게 들릴지 모르겠지만이 구성 요소에 대해 저는 우리 웹 응용 프로그램 중 하나와 함께 패키지 될 수 있기를 바랍니다. 또한 일부 명령으로 패키지화 할 수있을만큼 충분히 다양합니다. 내 구성 요소에 대한 새로운 속성 파일을 필요로하지 않으면 서 - 라인 도구를 사용하므로 - web.xml과 같은 다른 구성 파일 위에 피기 백 (piggyback)하기를 바랬습니다. 내가 올바르게 기억

는 .NET은 현재 Request을 실행에 대한 참조를 얻을 수 Request.GetCurrentRequest() 같은 것을 가지고 -하지만이 이후는 ServletConfig에 액세스하는 데 사용할 수를 닮아 뭔가를 찾고 있어요 자바 응용 프로그램입니다.

답변

5

한 가지 방법은 잠시 동안 일을하려고 한 일이다 your web.xml

<listener> 
    <listener-class>com.acme.FactoryInitialisingServletContextListener<listener-class> 
</listener> 

응용 프로그램이 웹 컨테이너에서 실행중인 경우 컨텍스트가 만들어지면 수신기에 의해 수신기가 호출됩니다. 이 경우 _servletContextProperties는 web.xml에 지정된 컨텍스트 매개 변수로 바뀝니다.

응용 프로그램이 웹 컨테이너 외부에서 실행중인 경우 _servletContextProperties는 비어 있습니다.

1

스프링 프레임 워크를 사용해 보셨습니까? 그런 식으로, 콩은 더 이상 크래프트를 얻지 못하며 스프링이 설정을 처리합니다.

0

당신은 ServletConfig (또는 ServletContext)에 대한 참조를 가져 와서 그 값을 Factory 클래스에 전사하는 연관된 부트 스트랩 클래스를 추가해야한다고 생각합니다. 적어도 이렇게하면 별도로 패키지 할 수 있습니다.

@toolkit은 : - :

public class FactoryInitialisingServletContextListener implements ServletContextListener { 

    public void contextDestroyed(ServletContextEvent event) { 
    } 

    public void contextInitialized(ServletContextEvent event) { 
     Properties properties = new Properties(); 
     ServletContext servletContext = event.getServletContext(); 
     Enumeration<?> keys = servletContext.getInitParameterNames(); 
     while (keys.hasMoreElements()) { 
      String key = (String) keys.nextElement(); 
      String value = servletContext.getInitParameter(key); 
      properties.setProperty(key, value); 
     } 
     Factory.setServletContextProperties(properties); 
    } 
} 

public class Factory { 

    static Properties _servletContextProperties = new Properties(); 

    public static void setServletContextProperties(Properties servletContextProperties) { 
     _servletContextProperties = servletContextProperties; 
    } 
} 

그리고 다음에 다음을 가지고, 가장 겸손 우수 이것은 내가 당신이 할 수있는