2011-03-08 4 views
2

OSGI의 HttpService를 사용하여 내 서블릿과 리소스를 등록하고 있습니다. 내가 HttpService.registerResources을 사용하고 자원 (java.lang.String의 별칭, java.lang.String의 이름으로 HttpContext 컨텍스트) 나는 "이름이"번들 내부에 상대 경로를 취할 수있는 테스트 한osgi HttpService는 번들 (파일 시스템) 외부에서 리소스를 등록합니다.

을 등록합니다. example/resource 여기서 resource는 번들 jar 내의 폴더입니다. 그러나 "name"은 번들 예제/home/user/webapps/resource 외부의 값을 제공하려고합니다. 즉 파일 시스템의 경로로 이름이 링크됩니다. 그게 가능한지 어떻게 알고 싶습니다.

나는 비슷한 게시물을 보았지만 결론은 내리지 않았다. how to get the image which is outside the OSGi bundle?

답변

0

저는 HttpService.registerResources (..)의 깊은 내부에 익숙하지 않지만 제 해결 방법은 리소스를 전달하는 Servlet을 구현하는 것입니다. 자신 만의 구현이므로 파일 시스템에도 액세스 할 수 있습니다. 해당 Servlet을 구현할 때 유의해야 할 점은 올바른 Content-Type을 설정하는 것이며 다른 필수 응답은 header fields 일 수 있습니다.

+0

감사합니다. 나는 다른 일에 같은 일을했다. – nattu

2

번들 외부에서 객체를 가져 오는 쉬운 방법은 Robert가 설명한대로 서블릿을 구현하는 것입니다.

더 좋은 방법은 반환 할 개체, 올바른 MIME 형식 처리 등을 제어하는 ​​것이 HttpContext 개체를 구현하고 HTTP 서비스에 등록하는 것입니다. HTTP 서비스는 리소스가 요청 될 때마다 항상 HttpContext.getResource (문자열 이름) 메서드를 호출합니다. 여기에서는 파일 시스템에서 개체를 제공 할 수 있습니다.

공공의 URL의 getResource (문자열 이름)

의 URL에 자원 이름을 매핑 할 HTTP 서비스에 의해 불려 : 사양에서. 서블릿 등록의 경우, HTTP 서비스는 ServletContext 메소드 getResource 및 getResourceAsStream을 지원하기 위해이 메소드를 호출합니다. 리소스 등록의 경우 Http 서비스는 리소스를 찾기 위해 메서드를 호출합니다. 컨텍스트는 리소스가있는 에서 제어 할 수 있습니다. 예를 들어, 자원 bundleContext.getDataFile (이름) .toURL() 통해 또는 getClass()을 통하여 문맥의 번들의 리소스 번들의 영구 기억 영역 의 파일에 맵핑 될 수있다.의 getResource (이름).

섹션 102.3 봐, 자원 등록 및 OSGi 서비스 일람표의 다음을하시기 바랍니다. 거기에서, 전체적인 개념은 상세한 설명과 예제로 설명됩니다.

관련 문제