그냥 파일다운로드는 다른 사람들의 포스팅에도 있어서 금방했는데...
프로퍼티에서 가져와서 구현을 하려고 했더니 클래스패스를 잡지 못해서
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; }
댓글 없음:
댓글 쓰기