2011-02-15 4 views
3

Tomcat 서버에 배포 된 큰 응용 프로그램을 작성했습니다. 하나의 .jsp 페이지 만 있고 모든 UI는 ext-js를 사용하여 수행됩니다.Tomcat : 올바른 방법으로 리소스를 찾을 수 있습니까?

많은 .java 클래스가 있습니다. 유효성 검사를 수행하는이 클래스 중 하나에서 XML 유효성 검사를 추가하고이 작업을 수행하려면 .xsd 파일에 액세스해야합니다.

내 문제는 내 .xsd 파일 경로를 명확하게 찾는 방법을 모르겠다는 것입니다.

나는 CSS/이미지/등

나는 시시한 방법으로이 방법을 알고 옆에 레퍼토리에 .XSD 파일을 놓을 게요 : 나는 System.getProperty를 호출 ("user.home의 ") 그리고 거기에서 내 webapp, xsd/ 폴더와 .xsd 파일을 찾습니다.

하지만이 작업을 수행하는 데 "깨끗한"방법은 무엇입니까?

어디에서 webapp (또는 webapp 리소스)에 대한 경로를 찾고이 정보를 .java 유효성 검사를 수행하는 클래스로 전달해야합니까?

답변

10

공용 웹 콘텐츠에있는 파일의 경우 ServletContext#getRealPath()이 실제로 이동하는 길입니다.

String relativeWebPath = "/path/to/file.xsd"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
File file = new File(absoluteDiskPath); 
// ... 

그러나 나는 또한 공공 및 서블릿 될 것 같지 않습니다 XSD를 필요로하는 자바 클래스로 XSD 파일을 제공하는 적 의도가 있다는 것을 상상할 수 없다. 그래서, XSD 파일을 classpath에 넣고 거기에서 잡아내는 것이 좋습니다. 다음과 같이이 패키지 com.example.resources에 배치되어 있다고 가정하면, 당신은 클래스 경로에서로드 할 수 있습니다

String classpathLocation = "com/example/resources/file.xsd"; 
URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation); 
// Or: 
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation); 
+0

덕분에 많이. 두 번째 경우에는 classpath에 파일을 놓는 것이 좋습니다. (아마도 이것을 수행하는 방법에 관한 새로운 질문이있을 것입니다.) – Gugussee

+0

자바 클래스의 리소스는 확실히 정상적인 방법입니다. classpath는 자바 클래스가있는 곳입니다 :) 패키지를 만들거나 기존 패키지를 재사용하고 XSD 파일을 여기에 넣습니다. 그게 전부 야. – BalusC

1

getServletContext().getRealPath("/")이 필요합니다.

here을 참조하십시오.

+0

않아요 작업을 바람둥이에 – momomo

관련 문제