날짜: 2024년 8월 15일
JSP 파일 컴파일 오류로 인한 ClassNotFoundException 해결 사례
웹 애플리케이션을 배포하고 실행하는 과정에서 HTTP 500 내부 서버 오류가 발생.
오류 메시지 :
org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.index_jsp
JSP 파일(index.jsp)이 서블릿으로 컴파일되지 못한 상태에서 발생.
이 오류는 JSP 파일의 잘못된 형식의 page 디렉티브로 인해 발생.
여러개의 jsp를 1개의 html로 사용하는데, 다른 jsp에서는 contentType 속성에 charset=UTF-8 앞에 공백이 있어, JSP 파서가 이 부분을 올바르게 해석하지 못하고 컴파일 오류를 일으킴.
오류 메시지 분석:
JasperException: JSP 파일을 컴파일하거나 실행하는 과정에서 발생하는 예외로, Tomcat의 JSP 엔진인 Apache Jasper에서 발생.
ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.index_jsp: JSP 파일이 서블릿으로 컴파일된 후 생성된 클래스 파일을 찾지 못했음을 나타냄. 이는 JSP 파일의 컴파일이 실패했거나, 해당 파일이 예상된 위치에 존재하지 않는다는 것을 의미.
문제를 해결하기 위해 모든 JSP 파일의 page 디렉티브를 다음과 같이 수정.
잘못된 코드:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
올바른 코드:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
수정으로 JSP 파서가 contentType 속성을 올바르게 해석할 수 있게 되었고, JSP 파일이 성공적으로 컴파일. 이를 통해 ClassNotFoundException 오류를 해결.
WEB_002d가 오류메세지에 포함된 경우, view쪽을 찾아보는 것이 좋다.
코드 일관성 유지: JSP 파일에서 사용하는 page 디렉티브와 같은 설정은 일관성을 유지하는 것이 중요합니다. 작은 차이가 큰 오류로 이어질 수 있기 때문에, 코드 스타일 가이드를 만들어 팀 전체가 일관된 코드를 작성하도록 하는 것이 좋다.