예외 내용

org.apache.jasper.JasperException: PWC6188: 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 


해결책

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

다음과 같이 jstl을 사용하고 싶은데 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 

로 하지 않으면 에러가 발생하는 경우가 있습니다.

이경우는 web.xml스키마의 버전과 WAS의 버전차이에 의해서 발생하는 에러입니다.

web.xml 스키마의 버전이 2.3일때 http://java.sun.com/jstl/core"
web.xml 스키마의 버전이 2.4이상일때 http://java.sun.com/jsp/jstl/core 이렇게 사용하시면 됩니다.


예제 >>> 

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

두번째 처럼 사용하고 싶으면 
다음과 같이 수정
<web-app id="Web" version="2.4" 
 xmlns="http://java.sun.com/xml/ns/j2ee
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

또는 

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.5//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

이런식으로 수정하셔도 됩니다


출처 - http://nanstrong.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C-jstl-URL-taglib-prefixc-urihttpjavasuncomjspjstlcore-%EC%97%90%EB%9F%AC






web.xml 에서 지정한 uri 의 값과, jsp 파일에서 호출하는 jstl 의 uri 값이 동일해야 된다는 것이 핵심입니다.

적어놓은 uri로 부터 뭔가를 다운로드받아서 실행한다거나 하진 않으니깐요.

만약 web.xml 의 저 부분을 수정했는데 됐다면 분명히

<%@taglib prefix="c" uri= <- 이 부분도 아마 그렇게 되어 있을 겁니다.


꼬박 이틀을 낭비했다고 생각했는데 결국은 조금 이해가 되는군요.
단순히 jstl를 쓸 수 있어서 좋은 것이 아니라 뭔가를 알았다는 것이 또 이렇게 기쁠 줄이야.. :lol: 
uri는 단순한 identifier일 뿐 그 이상은 아니라는 글을 어디선가 봤는데, 이제서야 그 의미를 알겠군요. 그런데, 굳이 http까지 붙여서 이렇게 헷갈리게 하다니..
WEB-INF/lib 폴더 아래에 있는 standard.jar 파일을 보니 jstl에 관련된 여러 tld파일들이 있습니다. 이것들은 자동으로 참조되니 web.xml 파일에서 굳이 tag-lib 태그를 사용하여 다시 uri를 지정할 필요가 없더군요.
다만 관련 jsp 파일의 uri 값을 jar안에 있는 tld 파일의 uri값과 동일하게만 쓰주면 됩니다. 즉, jar안의 tld 파일의 uri값과 jsp 파일의 uri값만 일치시킨다면 굳이 http://java.sun.com/jstl/core가 아닌 welcome.to.mywebsite.www.www.www의 값도 상관없습니다.
아울러, 굳이 tld 파일들을 jar에서 추출하여 다시 만들거나 카피할 필요도 없구요. 결국 제가 가진 WEB-INF/web.xml 파일에서 jstl 관련 태그는 없애버리고 밖으로 빼놓았던 관련 tld 파일들도 지워버렸습니다. 이미 jar 파일에서 참조되었기 때문이죠.
이렇게 간단한 원리를 이해하는데 이틀이나 걸렸지만( :oops: ) 그래도 기분은 좋습니 :P . 이런식으로 배워나가는거죠.
freesoft님께 감사드립니다.


출처 - http://kldp.org/node/22117






Posted by linuxism
,