책보며 천천히 따라하고 있습니다.
그런데 10장에서 더 이상 진도를 못빼네요.
01_upload.jsp를 시작으로 10장은 모두
HTTP Status 500 - saveDirectory cannot be null
exception
java.lang.IllegalArgumentException: saveDirectory cannot be null
이런 에러메시지가 뜨는군요.
오타있나 싶어 파일 하나하나 텍스트 복사해서 저장도 해봤고
web-study-10 프로젝트 그대로 Import도 해봤지만
상태는 똑같습니다.
이클립스 설정이 문제인가요?
뭘 빠뜨린건지,
확인해봐야 할 사항들이 뭐가 있을지 도움부탁드립니다.
참고로,
* lib폴더(cos.jar, jstl.jar, ojdbc5.jar, standard.jar)
* upload폴더 미리 생성
* server.xml설정
driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:XE"
username="scott" password="tiger" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/>
우선,
upload 디렉토리 안에 아무 파일이나 만들어두시고 다시 한번 해봐주시겠어요?
이클립스에서 upload 폴더에 마우스 오른쪽 버튼 두시고 New File 해서 그냥 test라는 이름으로 파일을 하나 만들어두시기 바랍니다.
저도 책 만들 당시에는 문제 없이 테스트를 했는데,
지금 해보니 같은 증상이 나서 지인의 도움을 얻어 해결했습니다.
지인께서는 아래와 같은 멘트를 주셨네요.
참고삼아 첨부합니다.
(저자분이 답변해주실 상황이 아니라서, 부득이하게 다른 분의 도움을 요청하였습니다)
--------------------------김성박님 코멘트---------------
upload 폴더는 이클립스가 만드는 폴더가 아니라 웹 어플리케이션이 만들기 때문입니다.
이클립스는 스스로가 폴더를 만들었다면 인식하는데 그렇지 않다면 인식을 못하거든요.
이클립스 안에서 만든 폴더나 jsp는 인식하지만 그렇지 않죠.
이클립스에서 run on server로 웹 어플리케이션을 실행하면 말슴하신 폴더에
웹 어플리케이션이 설치되고 실행됩니다. 하지만 웹어플리케이션에서 만든 upload폴더는 바로 인식이 안되요.
그래서 파일 업로드 폴더는 c:/temp/upload 이런 폴더에 업로드 하도록 하고.
(그런데 이 폴더는 웹 어플리케이션과 관련이 없는 폴더죠.)
해당 경로에서 다운로드 하는 서블릿을 만들어야 합니다.
http://www.codejava.net/java-ee/servlet/java-servlet-download-file-example
이와 유사한 서블릿이 필요해요.
아니면, 웹 어플리케이션이 만들어지고 실제로 배포할때 (이클립스에서 웹 어플리케이션이 실행되는 것이 아니라 실제 운영 was에 배포될때) 는 보통 웹 서버가 접근할 수 있는 경로에 업로드 하도록 합니다.
브라우저 <---> 웹 서버 <---> WAS (서블릿은여기서 실행)
웹서버는 정적인 파일을 접근할 수 있음.
예를 들어 /home/www/content/upload 폴더를 웹서버가 접근할 때
http://ip/upload/ 와 같은 경로로 접근 할 수 있다면....
해당 폴더에 업로드를 하게 하는 거죠.
물론 파일 다운로드경로는 http://ip/upload/ 로 해야하겠죠.
------추가 설명---------------
이클립스에서 run on server라고 실행을 하면. 해당 폴더안의 내용이 앞에서 말한 플러그인 폴더로 재구성이 되서 실행이 되요.
즉 upload폴더를 이클립스에서 만들었지만 이 폴더가 실제로는
D:\Program Files\eclipse-jee-luna-R-win32\eclipse\web_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\web-study-10\upload
폴더가 되는거죠.
해당 웹 어플리케이션은
D:\Program Files\eclipse-jee-luna-R-win32\eclipse\web_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\web-study-10
폴더에서 실행이 되는 거라고 보시면 되고요.
그런데 문제는 웹 어플리케이션을 실행할때마다 이 경로가 좀 바뀔수도 있고.
기존 경로는 사라지고 다시 만들어지니깐 업로드한 내용이 사라질 수도 있어요.
그리고, 프로세스가 몬가 충돌나면 잘 업로드가 안될 수도 있고요.
그러니 업로드를 할 때는 이클립스 프로젝트 아래에 폴더를 만드는 것이 아니라.
(이건 매번 폴더가 바꾸리수도 있으니깐)
바뀌지 않는 경로 예를 들어 c:\tmp\upload 같은 경로에 업로드를 할 수 있도록 프로그램을
작성하는 것이 좋습니다.
그런데 해당 경로는 WAS가 바로 접근을 하지 못하니깐
해당 경로에서 다운로드 받을 수 있는 다운로드 전용 서블릿을 만드는 것이 좋다는 것이거든요.
upload 폴더에 readme.txt 파일같은 아무 파일하나 넣어놓고 실행해 보세요. 폴더안에 아무것도 없어서 그럴수도 있으니깐. ^^;;;;;
프로세스가 이미 사용중이거나 그러면 파일이 삭제가 안되거나 모 이런 문제가 발생할 수 있잖아요.
그래서 되던것도 안될 수도 있어요. 껐다 키거나 하면 될 수도 있고....
그런데 그런건 너무 번거로우니깐 업로드 폴더를 별도의 경로에 하고 다운로드 서블릿을 만드는 것이 사실 더 좋아요.
(연습할때는요)