이클립스에서 로그인 폼 실습을 하다가 css의 background: url() 속성에 상대경로가 적용이 안되는 것을 발견했다. 해결하려다가 다음과 같은 문제점을 발견했다.
* 이클립스에서 동작하는 jsp 파일을 웹브라우저에서 실행할 경우 Tomcat의 localhost 경로를 설정해줘야 실행이 된다.
* 웹 브라우저에서 동작할 때 JavaBean 파일을 사용할 경우 WebContent 폴더 내의 WEB-INF 폴더 안에 classes 폴더를 생성하여 그 안에 .class 파일을 넣어주어야 동작한다. (/WebContent/WEB-INF/classes/[.class 파일])
이제 해결방법을 하나씩 알아보자
Tomcat의 localhost 경로설정
웹 브라우저에서 이클립스 환경의 URL을 그대로 입력하고 실행하면 실행이 되지 않고 다음과 같은 에러가 발생한다.
이 에러를 해결하기 위해선 Tomcat에 /WebContent 까지의 경로를 지정해 주어야 한다.
cygwin을 실행하고 아래의 경로로 들어가면 다음과 같은 파일들이 있다. (각자 설정한 Tomcat 디렉터리 경로로 들어가면 된다)
여기에 새로운 .xml 파일을 하나 만들어 주면 된다.
로그인 폼을 실습하고 있어서 'LoginForm.xml' 로 만들어 주었다. (이름은 되도록이면 프로젝트와 연관성이 있게 지어주자)
다음과 같이 vi 편집기를 이용해 만들어 준다.
내용은 아래와 같이 작성하고 저장해주면 된다.
docBase 부분에 실행하고자 하는 프로젝트의 /WebContent 까지의 경로를 지정해주면 된다.
다음과 같이 정상적으로 생성된 것을 확인할 수 있다.
그 다음 JSP 파일에서 CSS 의 background: url() 속성을 상대경로로 수정해준다.
(나의 경우엔 login_area.gif 파일이 실행할 JSP 파일과 같은 디렉터리 안에 있어서 '/' 없이 명시해줬다)
이제 웹 브라우저에서 아래와 같이 URL을 입력하고 실행해보자.
URL의 /LoginForm 부분이 /WebContent 까지의 경로를 포함하는 것을 알 수 있다.
Tomcat의 JavaBean 파일 경로설정
로그인 페이지의 [Register] 버튼을 누르면 회원가입 페이지로 넘어가는데 폼을 작성하고 [OK] 버튼을 눌렀다.
그러자 다음과 같은 에러 페이지가 출력됬다.
ServletException이 발생했는데 좀더 읽어보면 JavaBean으로 설정한 Member 패키지의 MemberInfo 클래스파일을 찾을 수 없다는 정보를 알려준다.
이클립스의 경우 아래 그림처럼 Java Resources 안의 src 디렉터리에 패키지와 클래스파일을 위치하여 사용한다.
이클립스가 아닌 외부에서 Tomcat 을 사용하여 연동할 경우에는 WebContent 내의 WEB-INF 디렉터리에 classes 디렉터리를 생성하여 이 안에 클래스파일을 위치시켜야 한다.
그 다음 Tomcat 서버를 재부팅해준다.
다시 웹 브라우저에서 실행해보면 정상적으로 동작한다.
이 외에도 살펴볼 부분이 몇 군데 더 있는데 나중에 정리하여 추가로 포스팅 하도록 하겠다.