2009-07-10 4 views

답변

83

ServletContext 개체에서 getResourceAsStream() 메서드를 사용하십시오.

servletContext.getResourceAsStream("/WEB-INF/myfile"); 

ServletContext에 대한 참조를 얻는 방법은 응용 프로그램에 따라 다릅니다 ... 서블릿 또는 JSP에서 수행할까요?

EDITED : 서블릿 개체 안에 있다면 getServletContext()을 호출하십시오. JSP에 있다면 미리 정의 된 변수 application을 사용하십시오.

+11

Servlet 안에 있다면 getServletContext()를 직접 사용할 수 있습니다. :) –

+1

아, 좋은 지적. – skaffman

+1

request-> session-> servletContext에서 servletContext에 접근 할 수도 있습니다. 필요한 경우 요청 개체 만 있으면됩니다. –

5

다음은 Servlet을 사용하지 않는 저에게 맞는 방법입니다.

의 내가 프로젝트 /의 WebContent에서 web.xml 파일에 액세스하려고한다고 가정 해 봅시다/WEB-INF/web.xml을 WEB의 부모 컨테이너에 지정하여 소스 폴더를 추가 프로젝트 속성 Source 탭에서

  1. InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml") 
    
0

: (내 경우의 WebContent에서) -INF 폴더 이제

  • 이의 클래스 로더를 사용하자 내 자바 (저지) 서버에서 만든 sqlite db 파일에 액세스하는 문제는 전적으로 경로 때문에 발생했습니다. 몇몇의 docs는 jdbc connect url이 "jdbc : sqlite : //path-to-file/sample.db"와 같아야한다고 말합니다. 이중 슬래시는 htt 프로토콜 스타일 경로의 일부로 생각되었고 배포 할 때 올바르게 매핑되지만 실제로는 절대 경로 또는 상대 경로입니다. 따라서 WebContent 폴더 (tomcat 프로젝트)의 루트에 파일을 배치하면 uri가 "jdbc : sqlite : sample.db"와 같이 작동합니다.

    저를 던지고있는 한 가지는 디버거를 밟아 가면서 "db : ... 권한이 거부되었습니다"라는 메시지를 받았습니다. 파일 시스템 권한 또는 SQL 사용자 권한의 문제라고 생각했습니다. SQLite는 MySQL과 같은 역할/퍼미션의 개념을 가지고 있지 않다는 것을 알게 된 후, 필자는 올바른 해결책이라고 믿기 전에 파일 사용 권한을 변경했다. 그러나 그것은 단지 나쁜 메시지라고 생각한다. 사용 권한이 거부 됨, 파일을 찾을 수 없음).

    희망이 있으면 도움이됩니다.

  • +0

    빠른 업데이트. 이것은 Eclipse에서 작동했지만, 실제 Tomcat 인스턴스에 배포 할 때 실패했습니다.이것은 두 곳에서 모두 효과가 있습니다 : –

    +0

    죄송합니다. 수정 사항을 제때에 추가하지 않았습니다. 이는 Eclipse와 Tomcat 인스턴스에 배포 된 경우 모두에서 작동했습니다. ServletContext 컨텍스트. DBConnection = DriverManager.getConnection ("jdbc : sqlite :"+ context.getRealPath ("sample.db")); –

    관련 문제