2009-07-30 6 views
2

jar 파일에서 함수를 호출하는 java 서블릿을 작성하고 있습니다. 이 항아리의 코드를 제어 할 권한이 없습니다. 호출되는 함수는 구성 파일의 파일 이름을 인수로 원합니다.서블릿 리소스의 파일 이름은 어떻게 얻을 수 있습니까?

이 파일을 내 war 파일과 함께 제공하고 싶습니다. 만약 내가 어딘가에 전쟁에 넣었다면, 어떤 파일 이름을 병에 전달할 수 있습니까?

jar의 API에는 파일 이름 만 사용할 수 있습니다. 따라서 ServletContext.getResourceAsStream()은 도움이되지 않습니다.

답변

3

ServletContext.getRealPath()을 사용하십시오. 이것은 주어진 서블릿 컨텍스트 자원에 대한 파일 시스템 경로를 반환합니다. 그것은 당신의 .war 파일에 있다면

Resource resource = new ServletContextResource(servletContext, "/path/to/file"); 
File resourceFile = resource.getFile(); 
+1

아, 파일이 패키지화 된 WAR 파일의 일부인 경우 getRealPath()는 실제 파일이 없기 때문에 null을 반환합니다. 그래도 폭발 된 WAR를 사용한다면 정상적으로 작동합니다. – skaffman

+0

Tomcat이 내 WAR를 폭발시키고 저만 지원할 유일한 컨테이너입니다. –

1

, 당신은 그것을 액세스 할 수 없습니다 : 당신이 Spring의 자원 추상화를 사용, 더 나은 아직 ServletContext.getResourceAsStream()

에 전달하는 것처럼 당신은 그것을 같은 인수를 전달 파일. 일부 서블릿 컨테이너는 .war 파일을 구성 요소로 분해하지만 사용자가이 구성 요소에 의존 할 수 있다고 생각하지 않습니다.

(getResourceAsStream()을 통해) 압축을 풀어 임시 파일/디렉토리에 기록한 다음 그 내용을 참조 할 생각이 있으십니까?

관련 문제