我不知道我做错了什么,但我不能包括jstl。我有jstl-1.2.jar,但不幸的是我得到了一个异常:
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
```
javax.servlet
servlet-api
2.5
provided
javax.servlet.jsp
jsp-api
2.1
provided
16条答案
按热度按时间cuxqih211#
@巴鲁斯克是完全正确的,但如果你仍然遇到这个例外,这意味着你做错了什么。您将在so jstl tag info页面上找到最重要的信息。
基本上,这是您需要做什么来处理这个异常的摘要。
检查web.xml中的servlet版本:
<web-app version="2.5">
检查此servlet版本是否支持jstl版本:servlet版本2.5使用jstl 1.2,servlet版本2.4使用jstl 1.1servlet容器必须具有适当的库,或者必须在应用程序中手动包含它。例如:jstl1.2需要jstl-1.2.jar
如何处理tomcat 5或6:
您需要将适当的jar包含到您的webinf/lib目录(它将只对您的应用程序有效)或tomcat/lib目录(将对所有应用程序全局有效)。
最后一件事是jsp文件中的taglib。对于jstl 1.2,正确的方法是:
nr7wwzry2#
我发现了这种错误的另一个原因:在我的例子中,有人设置了
conf/catalina.properties
设置tomcat.util.scan.StandardJarScanFilter.jarsToSkip
属性到*
避免日志警告消息,从而跳过tomcat的必要扫描。将其改回tomcat默认值并添加适当的jar跳过列表(不包括jstl-1.2或springwebmvc)解决了这个问题。mi7gmzs63#
我只是想添加我为这个问题找到的修复程序。我不知道为什么会这样。我有正确版本的jstl(1.2)和正确版本的ServletAPI(2.5)
我也有正确的地址,在我的网页上建议在这个线程,这是
解决这个问题的方法是从pom中的xml文件中删除jstl1.2依赖项的scope标记。同样,我不知道为什么会修复它,但是如果有人在pluralsight上用jpa和hibernate做spring教程,并且他们的pom是这样设置的,请尝试删除scope标记,看看是否修复了它。就像我说的对我有用。
bhmjp9jg4#
2020年的答案
这个问题仍然很受欢迎,但所有的答案都严重过时了。所有javaee组件都被分割成了不同的jakarta项目,jstl也不例外。因此,以下是今天正确的maven依赖项:
是的,版本和groupid不匹配,但这是项目当前状态的一个怪癖。
vltsax255#
另外,请检查您添加的依赖关系jar
javax.servlet.jar
以及javax.servlet.jsp.jstl-1.2.1.jar
或者不在web inf/lib文件夹中。就我而言,这两个人解决了问题。h7appiyu6#
我已经提到pom.xml中的maven依赖是错误的。应该是的
6uxekuva7#
这对我有用
0ejtzxu18#
添加
jstl-1.2.jar
进入tomcat/lib
文件夹。这样,依赖性错误将再次得到修复。
dgenwo3n9#
通过选择以下选项解决了ibm rad 7.5中的类似问题:
项目属性
项目方面
jstl复选框
ercv8c1e10#
我也遇到了同样的问题,我正在使用eclipse,以防其他人遇到同样的问题:
在eclipse中双击tomcat服务器,
停止服务器
取消勾选“不发布服务器模块”
启动服务器。
p1iqtdky11#
这个问题的所有答案都对我有所帮助,但我想我应该为后代补充一些额外的信息。
结果发现我对
gwt-test-utils
带来了gwt-dev
包裹。不幸的是gwt-dev
包含jetty、jsp、jstl等的完整副本,这些副本在类路径上的正确包之前。因此,即使我对JSTL1.2有适当的依赖关系,它也会将1.0版本加载到gwt-dev
. 发牢骚。对我来说,解决方案是不使用测试范围运行,这样我就不会拿起
gwt-test-utils
运行时的包。卸下gwt-dev
以其他方式从类路径得到的包也可以解决这个问题。6mw9ycah12#
下载jstl-1.2.jar
将此指令添加到页面:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
将jar文件粘贴到webinf/lib文件夹中。这应该管用(这对我很有效。)n6lpvg4x13#
只是在eclipse中修复了类似的问题:
以前我在编辑pom.xml时被什么东西踢了出来
我有所有需要的jar文件,tagliburi和web.xml都可以
z18hc3ub14#
org.apache.jasper.jasperexception:绝对uri:http://java.sun.com/jstl/core 无法在web.xml或与此应用程序一起部署的jar文件中解析
这个uri是针对JSTL1.0的,但实际上您使用的是JSTL1.2,它使用带有附加uri的uri
/jsp
path(因为发明el表达式的jstl从1.1版开始就作为jsp的一部分进行集成,以便在普通jsp中共享/重用el逻辑)。因此,根据jstl文档相应地修复taglib uri:
此外,还需要绝对确保不要将多个不同版本的jstljar文件一起抛出到运行时类路径中。这在tomcat用户中是一个非常常见的错误。tomcat的问题是它不提供现成的jstl,因此您必须手动安装它。这在普通javaee服务器中是不必要的。另请参见什么是javaee?
在您的特定案例中,pom.xml基本上告诉您jstl-1.2.jar和standard-1.1.2.jar一起存在。这是错误的。基本上是将oracle的JSTL1.2API+impl与apache的JSTL1.1impl混合在一起。你需要移除任何
standard-.jar
. 只不过是jstl-1.2.jar
足够了。非maven用户可以通过将物理jstl-1.2.jar文件放到
/WEB-INF/lib
web应用程序项目的文件夹(绝对不要将standard.jar或任何松散的.tld文件放在其中!)。必要时将其拆下。如果您实际使用的是普通的javaee服务器,如wildfly、payara等,而不是像tomcat、jetty等这样的基本servletcontainer,那么您根本不需要显式安装jstl。普通的javaee服务器已经提供了现成的jstl。换句话说,您不需要将jstl添加到
pom.xml
也不能在webapp中删除任何jar/tld文件。唯一的provided
范围足够:此外,您还应该确保
web.xml
声明至少符合Servlet2.4,因此不是Servlet2.3或更早版本。否则jstl标记中的el表达式将无法工作。选择与目标容器匹配的最高版本,并确保没有<!DOCTYPE>
你生活中的任何地方web.xml
. 下面是一个与servlet 4.0(tomcat 9)兼容的示例:另请参见:
jstl核心taglib文档(用于正确的taglib uri)
jstl标签信息页(用于jstl下载链接和
web.xml
(示例)mbzjlibv15#
如果您使用Spring Boot,请考虑将其拆下
server.tomcat.additional-tld-skip-patterns=*.jar
从Application.properties
如果有的话