xrp_coil

2012년 5월 30일 수요일

스프링(spring) 3.0 Annotation 파일 다운로드(File Download) 구현하기.


그냥 파일다운로드는 다른 사람들의 포스팅에도 있어서 금방했는데...

프로퍼티에서 가져와서 구현을 하려고 했더니 클래스패스를 잡지 못해서

request.getClass().getResource("/").getPath() 를 사용하면 이상하게 자꾸 톰캣 라이브러리 쪽으로 패스를 가져온다.

그래서 바꾼것이 currentThread에서 클래스로더를 가져오고 거기에서 getResource로 프로퍼티의 위치를 가져오는식으로 바꿈. 그래도 이렇게 해서 되니까~ 다행~ .

그것때문에 좀 더 시간이 걸렸슴.


우선 첫번째로 해야할 부분. 파일다운로드용 ViewResolver를 선언.

- dispatcher-servlet.xml




두번째로, Controller 구현. 일반적으로 공통 controller를 만들고 bean으로 만드는데 저는 그냥 업무마다 각각의 controller에서 구현했슴. 원래 properties에서 가지고 오는 부분은 공통클래스로 되어있으나 포스팅을 위해 잠시...
- templeteFileController.java






세번째로. 파일다운로드 뷰 bean으로 넘긴 후, 처리해야할 로직 구현.
- FileDownloadView.java





네번째로 jsp에서 필요 파라메터를 넘긴 후, 다운로드 테스트.
- test.jsp





* 참고 프로퍼티 파일은 아래와 같습니다. 경로는 src 바로 아래에 있구요.
- test.properties





다운로드 부분은 얼마전 작성한 아래 포스팅을 참고하시면 됩니다.

ajax로 파일다운로드 구현.
http://leinger.blogspot.com/2012/05/ajax.html


다른 세팅에 비해 비교적 간단하게 보이기는 하지만. 이것도 몇 시간에 걸쳐서 한... 나는..

역시.. 배울게 많은 프로그래머이다...ㅠ_ㅠ


======================================
2012-05-31 내용추가

로컬서버에서 잘 돌아가던 다운로드가 linux서버로 올리고나니 돌아가지 않는다. 원인을 찾아보니.

local서버에서 돌릴때 controller의 properties 파일을 가져오는 부분에서 url은


url.toString()::::::file:/D:/project/Java/.metadata/.plugins/org.eclipse.wst.server.core/tmp3/wtpwebapps/Test/WEB-INF/classes/test.properties
url.toString().substring()::::::D:/project/Java/.metadata/.plugins/org.eclipse.wst.server.core/tmp3/wtpwebapps/Test/WEB-INF/classes/test.properties

테스트서버에서 url은


url.toString()::::::file:/usr/local/tomcat7.0.23/webapps/ROOT/Test/WEB-INF/classes/test.properties
url.toString().substring()::::::usr/local/tomcat7.0.23/webapps/ROOT/test/WEB-INF/classes/test.properties

즉. 절대경로이기 때문에 local서버에서는 substring 6자리가 맞지만. linux서버에서는 substring 5자리로 변경해 주어야 한다. 

편하게 만들려고 했는데.. 점점 불편해지고 있는...ㅠㅠ os체크라도 해야하나..ㅠㅠ


결론...;;; 아래 로직 추가.




int substrStartAt = 0;
      String osName = System.getProperty("os.name").toLowerCase();
      if(osName.indexOf("win")>=0){
       substrStartAt = 6;
      }else if(osName.indexOf("mac")>=0){
       substrStartAt = 5;
      }else if(osName.indexOf("nix")>=0 || osName.indexOf("nux")>=0){
       substrStartAt = 5;
      }else if(osName.indexOf("sunos")>=0){
       substrStartAt = 5;
      }

댓글 없음:

댓글 쓰기