Não sei o que fiz incorretamente, mas não posso incluir o JSTL. Eu tenho o jstl-1.2.jar, mas infelizmente recebo a exceção:
org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116)
at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:315)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:148)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1439)
at org.apache.jasper.compiler.Parser.parse(Parser.java:137)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:170)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:332)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Eu tenho:
pom.xml
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
index.jsp
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <html> <head></head> <body></body> </html>
Respostas:
Esse URI é para o JSTL 1.0, mas na verdade você está usando o JSTL 1.2, que usa URIs com um
/jsp
caminho adicional (porque o JSTL, que inventou as expressões EL, desde a versão 1.1 foi integrado como parte do JSP para compartilhar / reutilizar a lógica do EL JSP simples também).Portanto, corrija o URI taglib adequadamente com base na documentação JSTL :
Além disso, você precisa ter certeza absoluta de que não lança vários arquivos JSTL JAR com versão diferentes juntos no caminho de classe de tempo de execução. Este é um erro bastante comum entre os usuários do Tomcat. O problema com o Tomcat é que ele não oferece JSTL pronto para uso e, portanto, você deve instalá-lo manualmente. Isso não é necessário em servidores Java EE normais. Consulte também O que exatamente é o Java EE?
No seu caso específico, seu pom.xml basicamente informa que você possui o jstl-1.2.jar e o standard-1.1.2.jar juntos. Isto está errado. Você está basicamente misturando o JSTL 1.2 API + impl do Oracle com o JSTL 1.1 impl do Apache. Você precisa remover qualquer
standard-xxx.jar
. Apenas apenas ojstl-1.2.jar
é suficiente.Os usuários não-Maven pode conseguir o mesmo largando o físico jstl-1.2.jar arquivo na
/WEB-INF/lib
pasta do projeto de aplicativo web (que absolutamente não cair standard.jar ou quaisquer arquivos .TLD soltos lá dentro!). Remova-os se necessário.Caso você esteja realmente usando um servidor Java EE normal, como WildFly, Payara, etc, em vez de um contêiner de servlet barebones como Tomcat, Jetty, etc, não será necessário instalar explicitamente o JSTL. Servidores Java EE normais já fornecem JSTL imediatamente. Em outras palavras, você não precisa adicionar JSTL
pom.xml
nem soltar nenhum arquivo JAR / TLD no aplicativo da web. Somente aprovided
coordenada Java EE com escopo definido é suficiente:Além disso, você também deve se certificar de que o seu
web.xml
é declarado em conformidade com pelo menos o Servlet 2.4 e, portanto, não como o Servlet 2.3 ou mais antigo. Caso contrário, as expressões EL dentro das tags JSTL, por sua vez, não funcionarão. Escolha a versão mais alta que corresponde ao seu contêiner de destino e verifique se você não tem nenhum<!DOCTYPE>
lugar no seuweb.xml
. Aqui está um exemplo compatível com Servlet 4.0 (Tomcat 9):Veja também:
web.xml
exemplos e links de download JSTL )fonte
standard
taglib. Leia a página de informações da tag para obter mais detalhes.compile('javax.servlet:jstl:1.2')
@BalusC está completamente certo, mas Se você ainda encontrar essa exceção, significa que algo que você fez de errado. As informações mais importantes que você encontrará estão na página Informações da tag SO JSTL .
Basicamente, este é um resumo do que você precisa fazer para lidar com essa exceção.
Verifique a versão do servlet em web.xml:
<web-app version="2.5">
Verifique se a versão JSTL é suportada para esta versão do servlet: A versão 2.5 do servlet usa JSTL 1.2 ou a versão 2.4 do Servlet usa JSTL 1.1
Seu contêiner de servlet deve ter a biblioteca apropriada ou você deve incluí-lo manualmente em seu aplicativo. Por exemplo: JSTL 1.2 requer jstl-1.2.jar
O que fazer com o Tomcat 5 ou 6:
Você precisa incluir jar (es) apropriados no diretório WEB-INF / lib (ele funcionará apenas para o seu aplicativo) ou no tomcat / lib (funcionará globalmente para todos os aplicativos).
A última coisa é um taglib em seus arquivos jsp. Para o JSTL 1.2, um correto é este:
fonte
Encontrei outro motivo para esse tipo de erro: no meu caso, alguém configurou a propriedade de
conf/catalina.properties
configuração para evitar mensagens de aviso de log, ignorando a verificação necessária pelo Tomcat. Mudar isso de volta para o padrão do Tomcat e adicionar uma lista apropriada de jars para ignorar (não incluindo jstl-1.2 ou spring-webmvc) resolveu o problema.tomcat.util.scan.StandardJarScanFilter.jarsToSkip
*
fonte
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*
emcatalina.properties
arquivo em um (incompreendido?) Tentar acelerar Tomcat tempo de arranque. Arghh!jarsToSkip
configuração, abaixo dela há umajarsToScan
configuração que substitui qualquer coisajarsToSkip
. Acabamos adicionandotaglibs*.jar
ao nossojarsToScan
como nossos taglibs eramtaglibs-standard-impl-1.2.5.jar
etaglibs-standard-spec-1.2.5.jar
.conf/catalina.properties
, mudeitomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
paratomcat.util.scan.StandardJarScanFilter.jarsToScan=jstl*.jar
e isso foi corrigido.também verifique os jars de dependência que você adicionou
javax.servlet.jar
ejavax.servlet.jsp.jstl-1.2.1.jar
ou não na sua pasta WEB-INF / lib. No meu caso, esses dois resolveram o problema.fonte
Adicione o
jstl-1.2.jar
natomcat/lib
pasta.Com isso, seu erro de dependência será corrigido novamente.
fonte
Adicione esta diretiva à sua página:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Cole o arquivo JAR na sua pasta WEB-INF / lib. Isso deve funcionar. (Funcionou para mim.)
fonte
Mencionei que a dependência do Maven no pom.xml está errada. Deveria ser
fonte
Eu só queria adicionar a correção que encontrei para esse problema. Não sei por que isso funcionou. Eu tinha a versão correta do jstl (1.2) e também a versão correta do servlet-api (2.5)
Eu também tinha o endereço correto na minha página, conforme sugerido neste tópico, que é
O que corrigiu esse problema para mim foi remover a tag scope do meu arquivo xml no pom da minha dependência do jstl 1.2. Novamente, não sei por que isso foi corrigido, mas apenas no caso de alguém estar iniciando a primavera com o tutorial JPA e Hibernate no pluralsight e ter seu pom configurado dessa maneira, tente remover a tag scope e veja se isso a corrige. Como eu disse, funcionou para mim.
fonte
Desabilitei as ferramentas MAVEN e Spring completamente. E eu tive que adicionar o seguinte jar para fazer meu ambiente funcionar corretamente.
O pior de tudo foi
jstl-api-1.2.jar
ejavax-servlet.jsp.jst-api-1.2.1.jar
. Eles simplesmente não funcionaram.jstl-1.2.jar
funcionou bem.fonte
jstl-1.2
vez dejstl-1.2.1
trabalhar para mim também, e não faço ideia do porquê.Se você usa o Spring boot, considere remover
server.tomcat.additional-tld-skip-patterns=*.jar
deApplication.properties
se houver algumfonte
Todas as respostas nesta pergunta me ajudaram, mas pensei em adicionar algumas informações adicionais para a posteridade.
Aconteceu que eu tinha uma dependência de teste na
gwt-test-utils
qual trouxe ogwt-dev
pacote. Infelizmente,gwt-dev
contém uma cópia completa do Jetty, JSP, JSTL etc., que estava à frente dos pacotes apropriados no caminho de classe. Portanto, embora eu tivesse dependências adequadas no JSTL 1.2, ele carregaria a versão 1.0 interna paragwt-dev
. Resmungar.A solução para mim foi não executar com escopo de teste para não pegar o
gwt-test-utils
pacote no tempo de execução. Remover ogwt-dev
pacote do caminho de classe de alguma outra maneira também teria corrigido o problema.fonte
Só tive problema semelhante no Eclipse corrigido com:
algo começou antes, enquanto eu estava editando meu pom.xml
Eu tinha todos os arquivos jar necessários, taglib uri e web.xml estava ok
fonte
Uma resposta para o ano 2020
A pergunta ainda é muito popular, mas todas as respostas estão seriamente desatualizadas. Todos os componentes do Java EE foram divididos em vários projetos de Jacarta e o JSTL não é diferente. Então, aqui estão as dependências corretas do Maven a partir de hoje:
Sim, as versões e groupIds não correspondem, mas isso é uma peculiaridade do estado atual do projeto .
fonte
Isso funcionou para mim
fonte
Eu tive o mesmo problema, estou usando o eclipse, caso outros tenham o mesmo problema:
No eclipse, clique duas vezes no servidor tomcat,
pare o servidor e
desmarque os "módulos do servidor sem publicar" e
inicie o servidor.
fonte
Resolvido problema semelhante no IBM RAD 7.5, selecionando:
fonte