Alguem já vi esse erro no tomcat lembrando que estou o utilizando o apache derby para fazer a conxão com o banco de dados:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/sql cannot be resolved in either web.xml or the jar files deployed with this application
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/sql cannot be resolved in either web.xml or the jar files deployed with this application
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:50)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:114)
org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:316)
org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:147)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:423)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552)
org.apache.jasper.compiler.Parser.parse(Parser.java:126)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
Apache Tomcat/5.5.17
o código do JSP é esse:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<sql:setDataSource dataSource="jdbc/SampleDB" />
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Speak To Me, Please</title>
</head>
<body>
<h1>Speak To Me, Please</h1>
Welcome to the Acme Corp. feedback site.
<h2>Here's what your fellow workers have said:</h2>
<table border='1'>
<tr><th>Worker</th><th>Comment</th></tr>
<!-- -->
<sql:query var="qryPosts" > SELECT autor,titulo FROM enredo </sql:query>
<c:forEach var="row" items="${qryPosts.rows}">
<tr>
<td><c:out value="${row.autor}" /></td>
<td><c:out value="${row.titulo}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
Eu passei por esse erro há alguns poucos dias. Usei uma solução muito estranha, mas que funcionou. Buscando por uma solução para este problema, encontrei em algum lugar um cara que garantia que uma certa mudança no web.xml resolveria. Quando vi a mudança, não acreditei, mas mesmo assim tentei… e funcionou !!! Chega de suspense, o negócio é o seguinte: O cabeçalho do meu web.xml (gerado AUTOMATICAMENTE PELO NETBEANS) estava asim:
uma vez em que os arquivos standard.jar e jstl.jar , que se encontram no tomcat CATALINA-HOME/webapps/examples/WEB-INF/lib estiverem no SUA_APP/WEB-INF/lib, declare-os no web.xm conforme acima.
Lembrando que na spec do 2.4 você precisa declarar as taglibs manualmente. Na spec 2.5 qualquer TLD que estiver dentro de um jar é automaticamente carregado pela app (não necessitando declarar conforme o brunix.java indicou), e é usado o URI especificado no TLD para endereçamento no JSP.
Esse caso de alterar as headers do XML é importante, pois deixando o atributo version=“2.4” e o XSD do 2.4 você está dizendo para o appserver usar 2.4 ao invés de 2.5.
[quote=garcia-jj]Lembrando que na spec do 2.4 você precisa declarar as taglibs manualmente. Na spec 2.5 qualquer TLD que estiver dentro de um jar é automaticamente carregado pela app (não necessitando declarar conforme o brunix.java indicou), e é usado o URI especificado no TLD para endereçamento no JSP.
Esse caso de alterar as headers do XML é importante, pois deixando o atributo version=“2.4” e o XSD do 2.4 você está dizendo para o appserver usar 2.4 ao invés de 2.5.[/quote]
Talvez o nobre colega esteja usando NetBeans, porque tenho version=“2.5” e aponto as minhas tagLibs para suas respectivas URIs na mão mesmo, depois de exportar para .war, usando Eclipse.
brunix.java, independente da IDE que você usa, a especificação diz que se você usa servlet 2.5 a taglib é carregada pelo container sem necessitar ser declarada. Obvio que para isso você precisa pegar a taglib compatível com a especificação (se não me engano a standart 1.1) e alterar os URIs das taglibs, que mudou da versão 1.0 para a 1.1.
Quer dizer que quando exportadas para .war as libs não têm que ser declaradas no web.xml? Pois eu digo que o Tomcat 6 iniciado na mão não mapeia. já experimentou ir lá no webapps e colocar sua aplicação p rodar libs sem declará-las no web.xml? não roda.
Sim. Se sua aplicação estiver configurada para usar a spec JSP 2.4 (via web.xml), seu container suportar a spec JSP 2.4, quaisquer TLDs que estejam dentro do META-INF dentro de algum JAR será lido automaticamente. Conheço muito pouco tomcat, mas creio que isso seja suportado desde o tomcat5.
Ou seja, se você fizer um TLD e jogar em qualquer lugar ele não lê. Apenas dentro de JARs.
Estou com pouco tempo aqui para pesquisar, mas se você olhar na documentação do JEE5 verá essa explicação.
[quote=garcia-jj]Sim. Se sua aplicação estiver configurada para usar a spec JSP 2.4 (via web.xml), seu container suportar a spec JSP 2.4, quaisquer TLDs que estejam dentro do META-INF dentro de algum JAR será lido automaticamente. Conheço muito pouco tomcat, mas creio que isso seja suportado desde o tomcat5.
Ou seja, se você fizer um TLD e jogar em qualquer lugar ele não lê. Apenas dentro de JARs.
Estou com pouco tempo aqui para pesquisar, mas se você olhar na documentação do JEE5 verá essa explicação.
Abraços[/quote]
Amigo, desisto. o senhor quer estar certo pulverizando regras de especificação. Lamento mas o fato é que quem quizer ver rodar na web de verdade, não dentro da ide, vai ter que mapear no web.xml.
Estou saindo desta thread. meu propósito é ajudar, não me afirmar. FUI
Não estou pulverizando a especificação, nem mesmo querendo aparecer. Meu interesse é apenas ajudar com minha experiência. Se você não concorda comigo, use suas palavras com algum embasamento, e não apenas com acusações.
Sei que o tópico é de 2011. Mas só pra constar que o que resolveu pra mim foi usar os .jar que estavam no tomcat (tomcat-7.0.25\webapps\examples\WEB-INF\lib) no lugar dos que havia baixado.