본문 바로가기
JavaScript, jQuery, Java

이클립스 톰캣 이미지 업로드 후 경로/새로고침 엑박

by 보리하늘 2017. 12. 21.
반응형

이미지 파일을 이클립스 프로젝트 경로로 저장을 시킨후,

불러오게 되면 이클립스 프로젝트 안에 저장된 이미지파일을 불러오지 못하여 

아래와 같이 엑스박스가 뜨게된다.






이클립스 환경설정을 바꿔주어도 이 현상은 해결이 된다.

(Window → Preferences → General → Workspace 의 Refresh using native hooks or polling 체크)




하지만 여러명이 개발하는 프로젝트기 때문에 개발자 모두의 이클립스 환경을 바꿀 수는 없는 터라

근본적인 해결이 필요하다.




프로젝트는 WAS 의 배포경로에서 실행되는데,

' 이클립스 + 톰캣 ' 으로 개발시 workspace 의 소스가 바로 실행되는 것처럼 느껴지지만 실제로는 이클립스가

소스 변경을 감지할 때마다 톰캣 배포 경로로 소스를 복사해주고 이 경로에서 소스가 실행된다.


쉽게 풀어 쓰면 이클립스에서 관리하는 프로젝트 폴더와 톰캣에서 관리하는 프로젝트 폴더가 다르다는 것이다.



즉, 로컬에서 실행되는 경로(배포경로)와 업로드 경로(workspace)가 다르기 때문에

이미지를 바로 찾지 못하는 것이다.





위에서 변경한 이클립스 환경에서는 이클립스가 새로고침 하면서 workspace 에 저장된 이미지를 배포 경로쪽으로

복사해 주기 때문에 이미지가 깨지지않고 보이는 것이다.


아래의 경로에 저장하게 되면 새로고침 없이 이미지를 바로 볼 수 있다.

workspace 루트 경로/.metadata/.plugins/org.eclipse.wst.server.core





** 해결 방법

기존에 파일을 저장하는 컨트롤러 메소드의 파라미터에  " HttpSession session " 가 없으면 추가시킨 후

경로를 아래와 같이 설정한다.


 String path = session.getServletContext().getRealPath("/");


한줄만 넣어주면 새로고침 없이 이미지를 바로 로드할 수 있다.

(로드하는데 시간은 조금 걸리지만 줄이는 법은 모르겠다...)




1
2
3
4
5
6
7
8
9
10
// 첨부파일 업로드
if!resultMsg.equals("ERROR") ) {
            
    // 파라메터 <HttpServletRequest>, <파일올라갈 위치>, <파일명>
    commonService.fileInsert(request, (String)result.get("TABLENAME"), (String)result.get("FLE_NAM"));
    
    String path = session.getServletContext().getRealPath("/");
    System.out.println("■path:::"+path);
 
}
cs




다음과 같이 출력된다.

■path:::D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\프로젝트명\





+ 위 방법 외에 이미지 파일을 별도의 디렉토리에 저장한 뒤 이미지를 response.getOutputStream() 에 담아주는

서블릿을 만들어 사용하는 방법도 있다.

728x90
반응형

댓글