본문 바로가기

카테고리 없음

[IntelliJ]The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application 오류 해결

에러 발생

 


아래와 같이 컴파일 후 페이지 테스중 500 error 가 발생하였다.

 

 

문제해결을 위한 접근 방법

 

 

1. 위에 서버 에러 메시지를 읽어보니 코드에 사용된 jstl 라이브러리를 가져다 썼는데 이 부분이 오류라 생각되었다.

 

2. 아래 메시지를 그대로 복사하여 구글링 해보니 jstl의 jar 파일을 tomcat / lib에 가져다 놓으면 해결이 된다고 하였다.

 

Tomcat 7.X 이상부터는 standard.jar 파일은 필요 없다.

 

3. 파일을 tomcat/lib에 넣고 재시작을 해보았으나 또다시 500 오류가 발생하였지만 에러 메시지는 기존과 달랐다.

해당 오류를 구글링 하여 javax.servlet.jsp.tagext.TagLibraryValidator 클래스는 jsp-api.jar 라이브러리에 있는 클래스라는 걸 확인하고 현재 내가 사용하고 있는 서버 및 서블릿, JSP 파일들의 버전 호환성 문제라 판단하였다.

 

4. Apach JSTL 공식 API에 들어가 설치 방법과 requirement를 살펴보았다.

 

API에서 요구하는 Java, Servlet, JSP 버전은 확인했을 때 이상 없었고, dependency와 lib폴더에도 파일을 추가했으나 역시 같은 오류로 해결되지 않았다.

사용중인 서버/서블릿/JSP 버전

 

5. API 도 해결되지 않아 StackOverflow를 좀 더 살펴보기로 했다. 그중 아래 글을 찾았다.

https://stackoverflow.com/questions/8021370/java-lang-noclassdeffounderror-javax-servlet-jsp-tagext-taglibraryvalidator

 

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator

I followed the guide in this link to install JSTL but I got the following error when I tried to launch my JSP page: java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator ...

stackoverflow.com

 

글을 읽고 아래와 같이 적용시켜 보았다. WEB-INF 파일에 lib 폴더를 만들어 해당 파일을 넣어주었다. 다행히 에러는 사라졌고 문제가 해결되었다.

 

 

Question for myself.

궁금한 점은 분명히 IntelliJ project setting에서 libraries에 추가를 했는데도 500 에러가 떴지만 WEB-INF/lib 파일에 넣는 순간 에러는 없어졌다. 뭐가 다른지 좀 더 구글링 해서 찾아봐야겠다.

 

 

++추가

WEB-INF : 웹 애플리케이션을 실행하는데 필요한 클래스 파일 및 기타 설정 파일이 저장되는 폴더. 톰켓이 읽어 들이는 항목으로 폴더는 반드시 존재해야 한다.

WEB-INF/lib : 웹 애플리케이션에서 사용하는 jar파일이 있는 폴더

WEB-INF/class : 클래스 파일들이 위치하는 폴더