Java 웹에서 경로 해결(절대 경로 및 상대 경로) 문제
Java에서 사용되는 경로는 절대 경로와 상대 경로 두 가지로 나뉩니다.결국 Java는 본질적으로 절대 경로로만 자원을 찾을 수 있다.모든 상대적인 경로에서 자원을 찾는 방법은 편리한 방법에 불과하다.그러나 API는 우리가 절대 경로를 구축하여 자원을 찾을 수 있도록 밑바닥에서 도와준다!
웹 응용 프로그램을 개발할 때 서버에 있는 현재 WebRoot의 물리적 경로를 자주 가져와야 합니다.
Servlet, Action, Controller 또는 Filter, Listener, 차단기 등 관련 클래스의 경우 ServletContext를 획득한 다음 ServletContext를 통과하면 됩니다.getRealPath("/")는 현재 서버에 적용되는 물리적 주소를 가져옵니다.
클래스에서 ServletContext를 찾을 수 없는 경우 다음 두 가지 방법이 있습니다.
1. Java의 클래스 로딩 메커니즘을 이용하여 XXX를 호출합니다.class.getClassLoader().getResource(""); ClassPath에 가져온 다음 WebRoot 디렉터리를 처리하는 방법은 이 클래스가 WebRoot/WEB-INF/classes에서만 적용됩니다. 만약에 이class가jar 파일에 포장되면 이 방법은 효력을 상실합니다.이때는 마땅히 다음 방식을 써야 한다.
2. 스프링 프레임워크의 사고방식, 웹-INF/웹.xml에서 웹 AppRootKey의param을 만들고 값 (기본값은 웹 App.root) 을 키 값으로 지정한 다음 Listener나 Filter, 또는 Servlet을 통해 String 웹 AppRootKey = getServletContext () 를 실행합니다.getRealPath("/"); 웹 AppRootKey에 대응하는 웹 앱입니다.root는 각각 키로, Value는 System Properties 시스템 속성에 기록됩니다.이후 프로그램에서 시스템을 통과합니다.getProperty("webapp.root")는 WebRoot의 물리적 경로를 가져옵니다.
두 번째 사고방식에 따라 우리는 다시 한 번 확장할 수 있다.그러나 한 서버에 배치된 응용 프로그램에 대해 말하자면, 만약 당신이 필요로 하지 않는다면 다시 아래를 보십시오.
다음은classpath와 현재 클래스의 절대 경로를 얻는 방법입니다.당신은 그 중의 몇 가지 방법을 사용하여 당신이 필요로 하는 자원의 절대적인 경로를 얻을 수 있습니다.
일.
DebitNoteAction.class.getResource("")
현재 클래스 FileTest를 받았습니다.class 파일의 URI 디렉토리입니다.자신을 포함하지 않는다!예:
file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
atacarnet/src/com/evi/modules/atacarnet/action/
이.
DebitNoteAction.class.getResource("/")
현재 classpath의 절대 URI 경로를 얻었습니다.예:
file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
삼.
Thread.currentThread().getContextClassLoader().getResource("")
현재 ClassPath의 절대 URI 경로입니다.예:
file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
사.
DebitNoteAction.class.getClassLoader().getResource("")
또는
ClassLoader.getSystemResource("")
현재 ClassPath의 절대 URI 경로입니다.예:
file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
5. 서버 상대 경로 얻기
System.getProperty("user.dir")
예: E:/apache-tomcat-5.5.16/apache-tomcat-5.5.16/binThread를 사용하는 것을 추천합니다.currentThread().getContextClassLoader().getResource ("") 는 현재classpath의 절대 경로에 대한 URI 표현을 가져옵니다.
6. 프로젝트의 절대 경로를 얻기
일반용
request.getRealPath("/")
또는
request.getRealPath("/config/")
하지만 지금은 요청을 사용하지 않습니다.getRealPath ("/") 입니다. ServletContext 를 사용해 보십시오.getRealPath("/") 메서드는 웹 응용 프로그램의 루트 디렉토리의 절대 경로를 가져옵니다.src의 파일을 얻는 것은 매우 쉽습니다. 왜냐하면 src는 기본적인 상대 디렉터리이기 때문입니다. 예를 들어 src에서com 디렉터리의test를 얻으려고 합니다.자바 파일, 이 정도면 충분해요.
File f = new File(com/test.java);
그러나 만약 내가 src 디렉터리나 WebRoot 디렉터리에 없는 파일을 얻으려면, src나 WebRoot 같은 등급의 디렉터리에서 찾으려면, 예를 들면doc나의 강경한 방법은 이렇게 실현된 것이다.
String path = this.getServletContext().getRealPath("/");
Properties p = new Properties();
p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("//WebRoot ") + 1)) + "doc/db.properties")));
System.out.println(p.getProperty("driverName"));
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.