웹 아카이브의 WEB-INF 디렉토리에서 리소스를로드하는 방법
WEB-INF 디렉토리에 파일이있는 웹 아카이브가 있습니다.
Java 클래스에서 해당 파일을 어떻게로드합니까?
나는 그것을 classes 디렉토리에 넣고 거기에서 불러올 수 있다는 것을 알고 있습니다. 그냥 WEB-INF에 넣을 것입니다.
getResourceAsStream()
ServletContext 객체 에서 메소드를 사용하십시오.
servletContext.getResourceAsStream("/WEB-INF/myfile");
ServletContext에 대한 참조를 얻는 방법은 응용 프로그램에 따라 다릅니다. Servlet 또는 JSP에서 수행 하시겠습니까?
편집 됨 : Servlet 객체 내부에 있다면 getServletContext()
. JSP를 사용하는 경우 사전 정의 된 변수를 사용하십시오 application
.
다음은 서블릿을 사용하지 않고 어떻게 작동하는지 보여줍니다.
project / WebContent / WEB-INF / web.xml에서 web.xml에 액세스하려고한다고 가정 해 보겠습니다.
프로젝트 속성 Source-tab에서 WEB-INF 폴더의 상위 컨테이너를 가리켜 소스 폴더를 추가합니다 (내 경우에는 WebContent).
이제 클래스 로더를 사용하겠습니다.
InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml")
Java (저지) 서버에서 만든 sqlite db 파일에 액세스하는 문제는 전적으로 경로 때문이었습니다. 일부 문서에서는 jdbc 연결 URL이 "jdbc : sqlite : //path-to-file/sample.db"와 같아야한다고 말합니다. 이중 슬래시는 htt 프로토콜 스타일 경로의 일부이고 배포시 제대로 매핑 될 것이라고 생각했지만 실제로는 절대 또는 상대 경로입니다. 따라서 WebContent 폴더 (tomcat 프로젝트)의 루트에 파일을 배치했을 때 이와 같은 URI가 "jdbc : sqlite : sample.db"로 작동했습니다.
저를 던지는 한 가지는 디버거를 밟을 때 "opening db : ... permission denied"라는 메시지를 받았다는 것입니다. 파일 시스템 권한 또는 SQL 사용자 권한의 문제라고 생각했습니다. SQLite에 MySQL 등과 같은 역할 / 권한의 개념이 없다는 것을 알게 된 후, 올바른 솔루션이라고 생각하기 전에 결국 파일 권한을 변경했지만 잘못된 메시지라고 생각합니다 (예 : 파일을 찾을 수 없음 대신 권한이 거부 됨).
이것이 누군가를 돕기를 바랍니다.
'IT박스' 카테고리의 다른 글
JVM에서 부동 소수점 연산이 모든 플랫폼에서 동일한 결과를 제공합니까? (0) | 2020.12.25 |
---|---|
Visual Studio 2017에서 WiX 프로젝트를 활성화하는 방법 (0) | 2020.12.25 |
이전 버전의 Python 용 OrderedDict (0) | 2020.12.25 |
new 대신 GWT.create ()를 사용하는 이유는 무엇입니까? (0) | 2020.12.25 |
JavaScript의 array.clear ()가 함수가 아닙니까? (0) | 2020.12.25 |