본문 바로가기

language/error 정리

[Linux/리눅스] Caused by : javax.servlet.ServletException: java.lang.NoClassDefFoundError

반응형
에러 문구
Caused by : javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.XllGraphicsEnvironment

 

에러 원인 및 배경

업무를 수행하던 도중 로컬 프로젝트 내에서는 엑셀 다운로드 기능이 정상적으로 수행되었지만 서버 내에서는 엑셀 다운로드 기능에서 아래와 같은 에러가 발생하였습니다.

아래 문단을 확인해보면 위와 같은 에러 문구가 log로 찍힌 것을 확인할 수 있었습니다.

이러한 에러가 나타나는 원인은 간혹 리눅스 버전에서 awt 관련 라이브러리를 사용하지 못하기 때문에 발생하는 것이라 합니다. 

이러한 문제를 해결하기 위해서는 2가지 방법이 존재합니다.

 

해결 방안
  • apache tomcat 수정
  • java servelt 수정

 

apache tomcat 수정

 

- catalina.sh 수정

# apache tomcat 폴더로 이동
cd ./bin
vi catalina.sh

- bin/catalina.sh 파일 확인

# before
if [ -z "$JSSE_OPTS" ] ; then
  JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
fi
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"

# after
# '-Djava.awt.headless=true' 추가
if [ -z "$JSSE_OPTS" ] ; then
  JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
fi
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djava.awt.headless=true"

 

java servelt 수정
System.setProperty("java.awt.headless", "true");

- java servelt code 내부에 위와 같이 작성

 

결과

위의 2가지 방법중에 apache tomcat을 수정하는 방법을 사용해서 문제를 해결해보았습니다.

그 결과, 재기동 후, 정상저긍로 엑셀이 다운로드 되는 것을 확인할 수 있었습니다.

반응형