2011-07-04 3 views
1

web.xml에서 위치를 하드 코드 만하고 있지만 배포하는 동안 web.xml을 변경할 필요가 있습니다.서블릿에 파일의 위치를 ​​알려주는 적절한 방법은 무엇입니까?

프로젝트 내부에 폴더를 만들고 그 아래에있는 폴더와 파일을 찾을 수 있습니까? 당신이 File 객체가 필요하지 않은 경우

<context-param> 
     <param-name>ipTable</param-name> 
     <param-value>E:\Workspace\Eclipse_Workspace\BpsPdfBill\WebContent\WEB-INF\ipTable.txt</param-value> 
</context-param> 
+1

자바 리소스를 대신 사용할 수 없습니다 (옆에 또는 클래스 옆에있는 텍스트 파일을 배치하십시오). 그건 당신의 WebContent 폴더에있는 파일보다 더 이해가 될 것입니다 ... –

+0

당신은 그것을 자세히 설명해 주시겠습니까? 나는 자바에 대해서 너무 새롭다. 감사. – lamwaiman1988

+0

관련 : http://stackoverflow.com/questions/6097814/how-to-know-the-path-of-the-webcontainer-using-java – BalusC

답변

2

, 당신은 ServletContext.getResource(String path)를 사용할 수 있습니다. path 인수는 '/'로 시작해야하며 컨텍스트 루트에 상대적입니다. 이 메서드는 URL을 반환하며이 파일을 열어 내용을 읽을 수 있습니다.

File 개체에 대한 포인터를 가져 오는 표준 방법이 있다고 생각하지 않습니다. 항상 시스템 속성을 사용할 수는 있지만 web.xml에 넣는 것보다 낫습니다. 당신이 정말로는 File 오브젝트, 파일의 단지 내용을 필요 경우

UPDATE

, 당신이 할 수있는 몇 가지가 있습니다. 그것은 파일의 위치가 어떻게 변하는가에 달려 있습니다.

배포 할 서버에 따라 파일 위치가 변경되지만 각 서버에서 동일하게 유지되는 경우 웹 컨테이너의 시작 스크립트에 시스템 속성을 추가하기 만하면됩니다. 어떻게하는지는 물론 컨테이너마다 다르지만 문서에서 어떻게 확인할 수 있어야합니다.

또한 파일의 위치를 ​​별도의 등록 정보 파일 (예 : file.properties)에 넣고 배포 프로세스를 수정하여이 파일을 생성하거나 업데이트 한 다음 WEB-INF 디렉토리에 배치 할 수 있습니다. 그런 다음 ServletContext.getResourceAsStream()을 사용하여이 등록 정보 파일을 읽고 경로를 얻은 다음 File을 인스턴스화 할 수 있습니다.

+0

사실 파일 개체가 필요합니다. – lamwaiman1988

+0

왜 '파일'이 필요한가요? 너는 그것을 위해 무엇을 필요로 하는가? 그것의'InputStream'을 얻으려면? 그런 다음 대신'ServletContext # getResourceAsStream()'메소드를 사용하십시오. – BalusC

0

시도 getServletContext().getResourceAsStream(filename).

0

내 서블릿에서 파일의 OS 경로가 있어야하는 데는 두 가지 이유가 있습니다. 당신의 목표가 나의 것과 일치한다면, 이것은 대답 일 것입니다.

  1. 서버 외부의 일부 다른 프로세스는 웹 응용 프로그램에서 해당 파일을 공유하기 위해 읽기/쓰기가 필요하며 파일은 서버의 URL에 액세스 할 수 없습니다.
  2. 서버를 통해 URL에 액세스 할 수있는 임시 위치에 차트를 동적으로 생성해야합니다.

나는이 파일을 알려진 URL 아래의 전쟁 디렉토리 아래에 놓습니다. URL이 /data/asdf.txt라고 가정 해 보겠습니다. 이것을 web.xml 매개 변수로 저장할 수도 있습니다. 그럼 난 OS 경로를 얻을 수

ServletContext.getRealPath (/data/asdf.txt)

를 사용합니다. web.xml에서 param을 하드 코딩하더라도 파일의 경로는 배포와 함께 이동합니다.

URL 액세스에서 폴더를 숨기려면 Tomcat에 폴더 앞에 "~"가 붙습니다. 나는 그 캐릭터가 "~"이라고 생각한다. 기억할 수 없다. 당신은 그것을 밖으로 시도해야합니다. 그 문자를 접두어로 사용하면 서버가 해당 URL을 사용하여 내용을 제공 할 수 없습니다. 접두어를 찾기 위해 과거 코드를 파헤 칠 때 대답을 업데이트하기 위해 돌아올 수 있습니다.

물론 폴더를 숨기는 다른 방법은 WEB-INF에 배치하는 것입니다.

관련 문제