♣ Tech & Biz Salon/Tech

Windows에 Tomcat 세팅 및 Webapp 로딩

TasteGod 2012. 11. 28. 17:14

허접 PC 한 놈에다가 Windows 2008 R2 / SqlServer 2008 R2 세팅해서 쓰고 있다.

조만간 운영서버 배포도 해야 되고 일단 그보다 내부 테스트도 해야 되서
Tomcat 설치, Webapp 로딩도 하려고 어제 좀 했는데 예상대로 순탄치 않았다.

그래서 바로 접고, 일단 로컬 진행을 해서 오늘 오전에 완료했는데 
허접 PC ... 아니 ... 테스트 장비라고 하자...

테스트장비에 그대로 옮겨서 하는데도

java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

가 떨어졌다.

해결은 Java 인스톨 폴더의 jre/lib/ext 에 servlet 파일을 위치시키고, Tomcat 과 Webapp 에서는 Servlet.jar 다 빼는거로 처리했다  ( 참고 링크 : http://blog.naver.com/lriberio/80065951926 )

해당 jar 는 tomcat 에 있는 servlet-api.jar 는 아니고 (그 놈을 써도 될 것임) servlet-api-2.5.jar 이다. 까보면 버젼은 같을수 있다...

( Tomcat lib 에만 두는걸 해봤는데 되지 않음 )

로컬 PC는 Windows7 이니 뭐 같은 환경은 아니니 조금 차이가 있나보다..

그리고 jsp-api.jar 는 톰캣꺼 빼고 webapp 쪽의 jsp-api-2.1.jar 만 둔 상태다.

아무튼... 이렇게 windows server 에 tomcat 세팅과 webapp 정상로딩은 처리했다!!

위에 언급한 거 외의 사항도 기록차원에서 메모해둔다.

■ 경로는 대략 아래와 같이 하였다

D:\myappdomain 
  > apache-tomcat-6.0.36
  > applogs : myapp 에서 남기는 로그를 이쪽으로
  > myapp
     > src
       > main
         > webapp > WEB-INF 
     > target

■ Tomcat 설치

맞는 버젼 받아서 압축풀고 기동후 해당 장비에서 접속 테스트 한다. 요까지는 무난하게 잘 될 것이다.

■ Tomcat Port 오픈

그런데 해당 장비 말고 다른 장비에서 접속하면 안될것이다. 방화벽을 오픈한다.

       참고 링크 : window2008 server port 설정하기 (방화벽 열기)

내 경우는 tomcat 을 80 포트로 쓴다 ( 아파치 64 비트와 tomcat 연동이 무난히 되지 않아 시간상 접음;; )


방화벽에서 80포트와 매핑된 인바운드 규칙이 이미 있는데 사용함으로 되어 있지 않은 상태라서 이놈을 사용하는 것으로 바꾸어보았는데 적용되지 않았다.

그래서 그냥 위 링크처럼 진행하되 포트에 80을 기재하니 잘 되었다.

■ Tomcat 세팅 - Server.xml

  0. 8080 > 80포트 

    <Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
  
  0. Host 세팅 (여긴 건드리지 않았다. Context Path 여러개 쓰는것도 아니고 해서... 근데 favicon 이 탐캣고양이가 나온다;; favicon 만 바꾸던가... Host 경로도 바꾸던가 해야겠다... )

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

  0. Context Path 세팅
     Tomcat 에서 Virtual Hosting, Context Path 설정하는건 매우 어려운거 같다.
     버젼마다 다르고... 특정 버젼부터 여러 도메인으로 쓸 경우에는 특정 폴더 밑에 폴더로 세팅하는 식으로 되고 있다.
     이번 플젝에선 하나로 가기때문에 Context Path 만 잘 세팅하면 된다.
     디렉토리 구분을 \로 할지 / 로 할지 어떤 attribute 에 경로를 넣어야할지 이런게 어렵다.
     Tomcat 사이트에 가서 설명을 봐도... 다른 Open Source 등의 매뉴얼보다 쉽게 이해가 안되는거 같다. 아무튼 처리...

      <Context docBase="D:\pssdomain\psst\src\main\webapp" path="/psst" reloadable="true" />

■ Tomcat 세팅 - catalina.bat 에 classpath, heap size 세팅

  Webapp 에서 참조할 classpath 세팅이 필요하다.
  Maven 사용 등을 안하고 있고, 모든 jar 들 열거가 필요하다.  추가한 코드는 파란색 폰트다.
  저렇게 해놓아도 정말 세팅되었는지 눈으로 보고 싶었다. 하도 go to 구문이 많아서 내가 어디 적어놓았다고 해서 타는지 안타는지 보기도 힘들고... 물론 찍어보면 되지만.... weblogic 등은 기동할때 classpath 쫙 찍혔던거 같은데
  tomcat은 보이지가 않는다. 그래서 파일 제일 위쪽에 @echo off 를 주석처리하고 @echo on 으로 수정하니 보였었음.

---------------- catalina.bat
rem Copy CATALINA_BASE from CATALINA_HOME if not defined
if not "%CATALINA_BASE%" == "" goto gotBase
set "CATALINA_BASE=%CATALINA_HOME%"
:gotBase

REM CODE BY BYC
set PPATH0=D:\pssdomain\psst\src\main\webapp\WEB-INF\lib_minus\
set PPATH=D:\pssdomain\psst\src\main\webapp\WEB-INF\lib\

REM CODE BY BYC

set CPATH0=%PPATH0%jsp-api-2.1.jar;servlet-api-2.5.jar
set CPATH1=%PPATH%aopalliance-1.0.jar;%PPATH%asm-3.3.1.jar;%PPATH%asm-commons-3.3.1.jar;%PPATH%asm-tree-3.3.1.jar;%PPATH%aspectjrt-1.6.9.jar;%PPATH%cglib-2.2.2.jar;%PPATH%commons-beanutils-1.8.0.jar;%PPATH%commons-cli-1.0.jar;%PPATH%commons-dbcp-1.2.2.jar;%PPATH%commons-digester-2.0.jar;%PPATH%commons-fileupload-1.2.2.jar;%PPATH%commons-io-2.1.jar;%PPATH%commons-lang-2.6.jar;%PPATH%commons-logging-1.1.1.jar;%PPATH%commons-pool-1.3.jar;%PPATH%cos-05Nov2002.jar;%PPATH%doxia-sink-api-1.0-alpha-7.jar;%PPATH%exec-maven-plugin-1.2.1.jar;%PPATH%jackson-core-asl-1.9.9.jar;%PPATH%jackson-mapper-asl-1.9.9.jar;%PPATH%javax.inject-1.jar;%PPATH%jcl-over-slf4j-1.5.10.jar;%PPATH%jstl-1.2.jar;%PPATH%junit-3.8.1.jar;%PPATH%junit-4.7.jar;%PPATH%log4j-1.2.15.jar;%PPATH%maven-archiver-2.4.1.jar;%PPATH%maven-clean-plugin-2.4.1.jar;%PPATH%maven-compiler-plugin-2.3.2.jar;%PPATH%maven-eclipse-plugin-2.9.jar;%PPATH%maven-filtering-1.0-beta-2.jar;%PPATH%maven-filtering-1.0-beta-4.jar;%PPATH%maven-install-plugin-2.3.1.jar;%PPATH%maven-reporting-api-2.0.6.jar;%PPATH%maven-resources-plugin-2.4.3.jar;%PPATH%maven-surefire-plugin-2.7.1.jar;%PPATH%maven-war-plugin-2.1.1.jar;%PPATH%mybatis-3.1.1.jar;%PPATH%mybatis-spring-1.1.1.jar;%PPATH%plexus-archiver-1.2.jar;%PPATH%plexus-build-api-0.0.4.jar;%PPATH%plexus-compiler-api-1.8.1.jar;%PPATH%plexus-compiler-javac-1.8.1.jar;%PPATH%plexus-compiler-manager-1.8.1.jar;%PPATH%plexus-interactivity-api-1.0-alpha-4.jar;%PPATH%plexus-interpolation-1.13.jar;%PPATH%plexus-io-1.0.1.jar;%PPATH%plexus-utils-2.0.5.jar;%PPATH%slf4j-api-1.5.10.jar;%PPATH%slf4j-log4j12-1.5.10.jar;%PPATH%spring-aop-3.1.0.RELEASE.jar;%PPATH%spring-asm-3.1.0.RELEASE.jar;%PPATH%spring-aspects-3.1.0.RELEASE.jar;%PPATH%spring-beans-3.1.0.RELEASE.jar;%PPATH%spring-context-3.1.0.RELEASE.jar;%PPATH%spring-context-support-3.1.0.RELEASE.jar;%PPATH%spring-core-3.1.0.RELEASE.jar;%PPATH%spring-expression-3.1.0.RELEASE.jar;%PPATH%spring-jdbc-3.1.0.RELEASE.jar;%PPATH%spring-orm-3.1.0.RELEASE.jar;%PPATH%spring-test-3.1.0.RELEASE.jar;%PPATH%spring-tx-3.1.0.RELEASE.jar;%PPATH%spring-web-3.1.0.RELEASE.jar;%PPATH%spring-webmvc-3.1.0.RELEASE.jar;%PPATH%sqljdbc-4.0.jar;%PPATH%tiles-api-2.2.2.jar;%PPATH%tiles-core-2.2.2.jar;%PPATH%tiles-jsp-2.2.2.jar;%PPATH%tiles-servlet-2.2.2.jar;%PPATH%tiles-template-2.2.2.jar;%PPATH%xpp3_min-1.1.4c.jar;%PPATH%xstream-1.3.1.jar
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx1024m

rem Ensure that any user defined CLASSPATH variables are not used on startup,
rem but allow them to be specified in setenv.bat, in rare case when it is needed.

REM CODE BY BYC
REM set CLASSPATH=
set CLASSPATH=%CLASSPATH%;D:\pssdomain\psst\target\classes;%CPATH0%;%CPATH1%
---------------- catalina.bat <<

■ Tomcat 세팅 - catalina.bat 에 classpath, heap size 세팅

■ 그밖에... eclipse 개발 환경에선 괜찮았는데 tomcat 별도 설치한것에 기동할때는 class not found 가 좀 나왔다. jar 쫑나는 이유가 원인으로 이래 저래 해서 처리했다.  이 글 제일 위쪽에 언급한것도 그 내용중 하나이다.