You cannot see this page without javascript.

tomcat error

Server 조회 수 329 추천 수 0 2014.11.11 12:51:08

어제부터 신규로 웹서버를 셋팅하던 중 평소에는 만나지 못했었던 아래와 같은 오류를 만나고 말았다.

 

in the generated java file Only a type can be imported. 패키지명.클래스명 resolves to a package

 

클래스파일에서 특정 클래스를 임포트를 할때는 문제가 없는데,

JSP 에서 직접 임포트를 하면 이런 에러가 난다.

 

근데 특이한건 java 기본 클래스들은 정상적으로 임포트가 된다.(예: java.util.List)

또한 웹루트 바로 아래에 있는 JSP에서는 정상동작하는게, 한단계 폴더 아래로만 들어가면 똑같이 에러가 난다.

예)

도메인/test.jsp   => 정상

도메인/a/test.jsp  => 에러

 

참 별일이다.

분명 로컬에서 이클립스에서 돌릴때는 잘 돌았는데, 서버에 올리니깐 이런 에러가 떨어지니깐 정말 돌아버리는줄 알았다.

 

근데 스프링 컨트롤러 타는건 잘 돌아간다.

jsp에서 직접적으로 해당 클래스를 호출하는건 왜 해당 패키지 경로를 못 찾겠다는 에러를 뱉는걸까...??

로컬에서 작업하던거 그대로 복사해서 올렸는데.....해당 경로에 클래스도 다 있는데...왜 이러지??

 

정작 만 하루를 삽질한 결과 해결했다!!!!!!

 

 

원인은 톰캣의 server.xml 에 있었다.

웹서버(centos 64bit)의 톰캣 버전은 6.0.29

 

난 사실 평소에 아래처럼 설정했었다.

(<host 밑에 context 를 넣고 했다. 어차피 한 서버에 한개만 돌릴꺼니깐)

 

웹루트가 /home/abcd/web 라는 가정일때

예)

<Host name="localhost"  appBase="/home/abcd/web"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
          <Context path="" docBase="/home/abcd/web" debug="0" reloadable="true"></Context>

 

혹은

<Host name="localhost" appBase="/home/abcd/web"
     unpackWARs="true" autoDeploy="true"
     xmlValidation="false" xmlNamespaceAware="false">
     <Context path="" docBase="." debug="0" reloadable="true"></Context>

 

 

 

이런식으로 했었는데......

위와 같은 에러가 났던것이다.

 

원인은 해당 경로를 내가 원하는대로 못 찾는것

즉 설정 방법이 잘못되었던것.

(근데 로컬에서는 저렇게 해도 잘 돌더만 -_-+ 예전 서버도 저렇게 쓰고 있었는데...)

 

뭐 아무튼 context 설정 하는 방법은 여러가지가 있지만 난 이렇게 바꿔봤다.

 

<Host name="localhost" appBase="/home/abcd"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="web" debug="0" reloadable="true"></Context>

 

사실 appBase 란 웹루트이며, docBase 는 appBase 바로 밑에 해당 폴더(프로젝트)명이다.

이게 기본 원칙이다.

그래서 여러개의 프로젝트를 돌릴때는 아래와 같이 한단다.

 

<Host name="localhost" appBase="/home/abcd"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="web1" debug="0" reloadable="true"></Context>

<Context path="web2" docBase="web2" debug="0" reloadable="true"></Context>

 

그래서 위와 같이 설정 했을때 해당 URL을 호출할때는

도메인/~ 하면 web1 프로젝트로,

도메인/web2/~ 하면 web2 프로젝트로 호출된다고 한다.

 

 

그럼 나는 아래와 같이 하면 되겠네???

 

<Host name="localhost" appBase="/home/abcd"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="web" debug="0" reloadable="true"></Context>

 

와~ 진짜 된다!!!!!!!!!!!!대박

근데 잘 돌아는가는데 한가지 문제가 생겼다.

톰캣 START시 실행되는 커넥션풀 생성이 두번 이루어 지는것이었다.

 

으잉???

 

왜 두번이나 돌까??

난 정말 이유는 잘 모르겠다.

(아마도 appBase를 한번 탐색하고, context 를 한번 탐색하는건 아닐런지 조심히 추측해본다...-_-;; 절대 아니겠지만..)

 

 

그래서 한번 아래처럼 바꿔봤다.

(appBase 를 빼버리고, docBase 에 풀 경로 셋팅)

 

<Host name="localhost"  
                unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
   <Context path="" docBase="/home/abcd/web" debug="0" reloadable="true"></Context>

 

 

 

오오오오~~ 잘 돌아간다~!!!

톰캣 시작시 커넥션풀 두번 실행되던 문제도 한번으로 해결됐다.

 

솔직히 이렇게 해도 되는진 모르겠지만... 일단 돌아는가니 이대로 진행하자........-_-;;;

 

만 하루 삽질끝에 그래도 성공해서 뿌듯하다. ㅠㅠ

이게 다 경험이 되겠지ㅜㅜ

 

그래서 포스팅 해놔야지~ 나 같은 사람 다신 없기를~

엮인글 :
List of Articles
번호 제목 글쓴이 날짜 조회 수sort

XE Login