如何安装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使用带有额外的/jsp
path的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的总结。
-
检查web.xml中的servlet版本:
<web-app version="2.5">
-
检查此servlet版本是否支持JSTL版本:Servlet版本2.5使用JSTL 1.2或Servlet 2.4使用JSTL 1.1
-
您的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.jar
和javax.servlet.jsp.jstl-1.2.1.jar
的依赖关系jar或不在您的WEB-INF / lib文件夹中。 在我的情况下,这两个解决了这个问题。
- 下载jstl-1.2.jar
-
将此指令添加到您的页面:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
将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.jar
和javax-servlet.jsp.jst-api-1.2.1.jar
。 他们只是没有工作。
jstl-1.2.jar运行良好。
通过select以下内容解决了IBM RAD 7.5中的类似问题:
- 项目属性
- 项目方面
- JSTLcheckbox