Java 웹에서 경로 해결(절대 경로 및 상대 경로) 문제

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/bin
Thread를 사용하는 것을 추천합니다.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"));

읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기