JSP 배포
배포 개요
: 자바프로젝트를 원시적인 방법인 리눅스로 배포하는 방법을 알아본다.
jar 명령어
war 압축파일 생성 (for 리눅스OS)
: jar 명령어로 자바프로젝트 디렉토리를 war확장자로 압축한다.
# jar -cvf [생성할파일명].war [생성대상]
# 현재 경로의 모든 파일들을 압축
jar -cvf study.war .
# 특정 디렉토리 자체를 압축
jar -cvf study.war /testDir
war 압축파일 해제 (for 리눅스OS)
: jar 명령어로 war확장자 압축을 해제한다. (자동배포를 사용하지 않는 경우 직접 배포한다.)
# jar -cvf [압축해제대상]
# 현재 경로에 아래경로의 압축파일을 해제
jar -xvf ~/study/study.war
배포
: 순차적으로 요약하면 다음과 같다.
- sever.xml 자동배포 설정
- war 압축파일 생성
- ContextRoot 경로로 war파일 넣기 (톰캣이 기동되면 자동으로 폴더가 생성되어 배포된다. 단, 반드시 정상적인 파일이어야 배포된다.)
- 서버기동 후 배포확인
- server.xml 에서 docBase 등록
(0) sever.xml 자동배포 설정
: 현재 톰캣서버가 자동배포 설정이 되어있는지 확인한다.
vi [톰캣루트]/conf/server.xml
<Host name="localhost"
appBase="webapps"
unpackWARs="true" #톰캣구동시점 자동배포
autoDeploy="true"> #war압축을풀어서 배포
...
</Host>
참고)
두 옵션은 디폴트로 true 이다.
환경에 따라 다르겠지만 확인은 필요할것이다.
(1) war 압축파일 생성
: war파일을 생성한다. (나는 기존의 프로젝트를 war로 묶는것을 설명하겠다.)
# 'study' 이라는 기존 자바프로젝트 Directory 존재.
cd ~/study
# 안에는 당연히 웹프로젝트 구조이다.
ls
META-INF hi.jsp resources
WEB-INF public_index.html
# war 압축파일 생성
cd ~/study
jar -cvf study.war .
주의)
폴더를 압축하는 것이 아닌 폴더 내부의 파일들을 압축해야한다.
(설정에 따라 다르겠지만 디폴트 기준으로 작성)
(2) ContextRoot 경로로 war파일 넣기
: 자동배포를 위해 war파일을 톰캣컨택스트루트에 위치시킨다.
cd [톰캣루트]/webapps
# 톰캣컨택스트루트에 방금만든 war압축파일 이동
mv ~/study/study.war .
(3) 서버기동 후 배포확인
: 서버를 기동하여 정상배포를 확인한다.
# 톰캣 기동 스크립트
wasstop
wasstart
# 정상적으로 war 압축이 해제되어 디렉토리가 생겼다.
ls [톰캣루트]/webapps/
study study.war
배포시 디렉토리권한
배포시 디렉토리 권한이 root 로 설정되어있다. 아래 명령어로 관리자에게 디렉토리권한을 할당하자.
sudo chown -R wasadm:wasadm /fswas
(4) server.xml 에서 docBase 등록
: 해당 프로젝트에 접근할 수 있도록 컨택스트 매핑해준다.
vi [톰캣루트]/conf/server.xml
# <HOST> 태그 내부에 추가
<Context docBase="study" path="/study" reloadable="true"/>
이슈(작성중)
: 실시간으로 추가 이슈를 기록.
CASE1. war-tracker 자동배포 실패
: 기존 아무 프로젝트를 jar명령어를 통해 war확장자로 묶어서 배포하는데 계속해서 자동배포가 안되었다.. (3시간 삽질)
catalina.log
java.io.IOException: 파일 […/META-INF/war-tracker]을(를) 생성할 수 없습니다 해결
-
- 원인
- 톰캣 공식문서에서 war 파일을 확장하면, 톰캣이 실행 중이 아닐 때 war 파일의 변경을 감지하기 위해 [/META-INF/war-tracker] 파일을 추가한다고 한다.
- 나는 수동으로 war파일(다른프로젝트파일을 통으로 압축)을
META-INF/war-tracker
파일을 포함시키고 pack 했다. - 배포중에 tomcat은 변경 사항 감지를 위해 해당 파일(war-tracker)을 생성하려고 하지만 이미 파일이 존재하면 tomcat은 파일을 만들 수 없다며 위의 Exception을 발생시킨다.
-
- 해결방안
- war-tracker 파일을 삭제하고 다시 war를 pack한다.
rm ~/study/META-INF/war-tracker
-
- 해결완료
- 다시 war 압축하고 컨택스트루트에 넣고 톰캣기동하니까 정상적으로 배포한다.
CASE2. FTP 전송된 jsp ‘^M’ 에러
: FTP 으로 전달받은 war 로 배포하려고하니까 톰캣이 에러를 발생시킨다.
catalina.log
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map ‘Controller’ method
-
- 원인
- FTP로 전송한 war압축 내용에서 jsp의 내용이 변조되었다.
- 윈도우에서 작성한 파일을 Unix/Linux상에 올리면 개행 문자가 깨져서 ^M가 보이는 경우가 있다.
-
이것은 윈도우에서는 CRLF 가 개행인데 Linux/Unix에서는 LF가 개행이라 나타나는 현상으로 보면 된다.
[CR,LF 뜻]
라인피드(LF : Line Feed) => 현재 위치에서 바로 아래로 이동.
캐리지리턴(CR: Carriage return) => 커서의 위치를 앞으로 이동.
-
- 해결방안
- vi, vim에서 FTP 전송중에 붙어버린 ^M 을 제거하면 끝.
vi [^M붙은JSP파일] # 아래 정규식으로 모두 제거 :%s/^M//g
주의)
^M는 ^+M 이 아니고 Ctrl + v + m 이다. -
- 해결완료
- 완료했다.
참고용)
작성중
: javac -cp “../../../lib/*” SessionController.java
Leave a comment