Declarando taglib no web.xml?

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:

<?xml version="1.0" encoding="UTF-8"?>

<web-app 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" version="2.4">

o que o cara mandava fazer era colocar a string "version=“2.4” na frente, logo depois da tag web-app. Assim:

<?xml version="1.0" encoding="UTF-8"?>

<web-app 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">

Tudo funcionou. Estranho, eu sei. Mas funcionou. Boa sorte.

No meu caso eu tive que tirar o “/jsp” e colocar “_rt” depois de core no endereço, era assim:

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

e ficou assim:

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

eu estou com esse problema…
e nenhuma das alternativas funcionaram para mim…
alguém tem mais alguma ?

<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/lib/jstl.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/lib/standard.tld</taglib-location>
</taglib>

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.

Obrigaduuu!!!, salvaram meu dia!! :smiley:

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.

Galeria Virtual http://java.sun.com/jsp/jstl/core /WEB-INF/jstl.tld http://java.sun.com/jsp/jstl/core /WEB-INF/standard.tld

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.

Um exemplo é a FMT que na especificação servlet 2.5 é carregada via http://java.sun.com/jsp/jstl/fmt, já na anterior era http://java.sun.com/jstl/core. Verifique se você está com as libs corretas.

Também uso Eclipse para desenv das apps.

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.

Abraços

[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

Leia na fonte, se você tem dúvidas: http://java.sun.com/javaee/5/docs/tutorial/doc/bnaiy.html

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.

Abraços

valewww brunix.java salvo minha manhã…

[quote=Maicolino]No meu caso eu tive que tirar o “/jsp” e colocar “_rt” depois de core no endereço, era assim:

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

e ficou assim:

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

[/quote]

boa dica, valeu, tava fazendo um teste em outra coisa e me deparei com isso… funcionou blz

Buenas, tive tbm esse problema, mas resolvi de boa,

Tem que copiar os jar´s jstl-api-1.2 e jstl-impl-1.2 para o tomcat “C:\Tomcat 7.0\lib” no meu caso que uso o tomcat xD

Fiz e funfou de boa.

Obrigado a quem fez e respondeu a essa pergunta, me ajudou!

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.

[quote=Maicolino]No meu caso eu tive que tirar o “/jsp” e colocar “_rt” depois de core no endereço, era assim:

e ficou assim:

[/quote]

Cara, sou novato em jsp e quando apareceu o problema comecei a esquentar a cabeça, mas sua dica foi “A DICA!!!”

Me Salvou!!!

Valeu. Obrigado.

eu resolvi colocando as bibliotecas, standard 1.1.2.jar, jstl-1.2.1.jar e mysql-conector-java-5.1.jar dentro da lib, pois antes tavam duplicados