如何安装JSTL? 绝对uri:http://java.sun.com/jstl/core无法parsing

我不知道我做错了什么,但是我不能包括JSTL。 我有jstl-1.2.jar,但不幸的是我得到exception:

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) 

我有:

  • 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> 

org.apache.jasper.JasperException:绝对URI: http : //java.sun.com/jstl/core无法在web.xml或使用此应用程序部署的jar文件中parsing

该URI用于JSTL 1.0,但是实际上使用的JSTL 1.2使用带有额外的/jsppath的URI(因为发明ELexpression式的JSTL是从版本1.1集成为JSP的一部分以共享/重用EL在普通的JSP中的逻辑)。

所以,相应地修复taglib URI:

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

此外,您的POM还通过taglibs:standard指定Apache的JSTL 1.1实现。 当您已经通过javax.servlet:jstl jstl绑定了JSTL 1.2 API + impl时,这是不必要的,甚至是危险的。 只是下面的依赖应该这样做,以便在您的Tomcat目标Web应用程序中使用JSTL(不要将<scope> provided为Tomcat,因为Tomcat实际上并不提供它):

 <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> 

非Maven用户可以通过在web应用程序项目的/WEB-INF/lib文件夹中删除单个jstl-1.2.jar文件(不要删除standard.jar或任何松散的.tld文件!)来达到同样的效果。

你也应该确保你的web.xml声明至less符合Servlet 2.4,因此不符合Servlet 2.3或更早的版本。 否则,JSTL标签内部的ELexpression式将无法工作。 select与您的目标容器匹配的最高版本,并确保您的web.xml任何位置都没有<!DOCTYPE> 。 这里有一个Servlet 3.0(Tomcat 7)兼容的例子:

 <?xml version="1.0" encoding="UTF-8"?> <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_3_0.xsd" version="3.0"> <!-- Config here. --> </web-app> 

也可以看看:

  • JSTL核心taglib文档 (对于正确的taglib URI)
  • JSTL标签信息页面 (用于JSTL下载链接和web.xml例子)

@BususC是完全正确的,但如果你仍然遇到这个exception,这意味着你做错了什么。 您可以在SO JSTL Tag Info页面上find最重要的信息。

基本上这是你需要做什么来处理这个exception的总结。

  1. 检查web.xml中的servlet版本: <web-app version="2.5">

  2. 检查此servlet版本是否支持JSTL版本:Servlet版本2.5使用JSTL 1.2或Servlet 2.4使用JSTL 1.1

  3. 您的servlet容器必须具有相应的库,或者您必须手动将其包含在您的应用程序中。 例如:JSTL 1.2需要jstl-1.2.jar

如何处理Tomcat 5或6:

你需要在你的WEB-INF / lib目录(它只能用于你的应用程序)或tomcat / lib(对全部应用程序全局工作)中包含适当的jar。

最后一件事是你的jsp文件中的一个taglib。 对于JSTL 1.2正确的是这样的:

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

还请检查是否已添加javax.servlet.jarjavax.servlet.jsp.jstl-1.2.1.jar的依赖关系jar或不在您的WEB-INF / lib文件夹中。 在我的情况下,这两个解决了这个问题。

  1. 下载jstl-1.2.jar
  2. 将此指令添加到您的页面: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. 将JAR文件粘贴到WEB-INF / lib文件夹中。 这应该工作。 (它为我工作。)

简单的把jstl-1.2.jar添加到tomcat/lib文件夹中。

这样你的依赖再次得到修复。

我发现这种types的错误的另一个原因:在我的情况下,有人设置了catalina.properties设置tomcat.util.scan.StandardJarScanFilter.jarsToSkip属性*以避免日志警告消息,从而跳过Tomcat的必要扫描。 将其更改回Tomcat默认值并添加适当的jars列表(不包括jstl-1.2或spring-webmvc)解决了这个问题。

我已经提到了在pom.xml中的Maven依赖关系是错误的。 它应该是

  <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> 

在这个问题的所有答案帮助我,但我想我会添加一些额外的信息为后人。

事实certificate,我有gwt-test-utils的testing依赖,它带来了gwt-dev包。 不幸的是, gwt-dev包含了Jetty,JSP,JSTL等的完整副本,这是在类path上合适的包之前。 所以,即使我对JSTL 1.2有适当的依赖关系,它也会将1.0版本内部加载到gwt-dev 。 叽。

我的解决scheme是不运行testing范围,所以我没有在运行时拿起gwt-test-utils包。 以其他方式从类path中移除gwt-dev包也可以解决问题。

如果你尝试了一切,但没有帮助,你应该重新启动服务器。 在我的情况下,我只是忘了重新启动Tomcat后,将javax.servlet.jsp.jstl-1.2.1.jar添加到lib目录。

我只是想添加我发现这个问题的修复。 我不知道为什么这个工作。 我有正确版本的jstl(1.2),也正确版本的servlet-api(2.5)

 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> 

我也有正确的地址在我的网页中build议在这个线程,这是

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

什么解决了这个问题对我来说是从我的XML文件中删除范围标记在POM为我的JSTL 1.2依赖项。 再次不知道为什么这样解决它,但只是为了防止JPA和Hibernate教程在复合视图上做弹簧,并以这种方式安装了它们的pom,请尝试删除范围标记,看看是否能解决这个问题。 就像我说的那样对我有用。

在Eclipse中刚刚有类似的问题修复:

 rightclick on project->Properties->Deployment Assembly->add Maven Dependencies 

在我编辑我的pom.xml的时候,一些东西被踢出去了

我有所有需要的jar文件,taglib uri和web.xml是好的

我完全禁用了MAVEN和Spring工具。 为了使我的环境正常工作,我必须添加下面的jar。

  • 弹簧AOP-4.0.3.RELEASE.jar
  • spring-beans-4.0.3.RELEASE.jar(很难find这个修复,其他org.springframework <3.versions>只是没有工作。
  • 弹簧上下文4.0.3.RELEASE.jar
  • 弹簧芯4.0.3.RELEASE.jar
  • 弹簧expression-4.0.3.RELEASE.jar
  • 弹簧networking4.0.3.RELEASE.jar
  • 弹簧webmvc-4.0.3.RELEASE.jar
  • JSTL-1.2.jar

最糟糕的是jstl-api-1.2.jarjavax-servlet.jsp.jst-api-1.2.1.jar 。 他们只是没有工作。

jstl-1.2.jar运行良好。

通过select以下内容解决了IBM RAD 7.5中的类似问题:

  1. 项目属性
  2. 项目方面
  3. JSTLcheckbox