有关的:Jasper 异常 PWC6188 - Jetty 无法将 javax.servlet.jstl.fmt TLD 解析为项目内的 JSTL 类 https://stackoverflow.com/questions/73475420/jasper-exception-pwc6188-jetty-cannot-resolve-javax-servlet-jstl-fmt-tld-to-js
有关的:Jetty - 将 9.3.0.M1 升级到 9.3.0.M2 会破坏使用 Maven 的 JSP 功能 https://stackoverflow.com/questions/73417710/jetty-upgrading-9-3-0-m1-to-9-3-0-m2-breaks-jsp-functionality-using-maven
我正在尝试按照上面的方式迁移。 Maven 项目。
我的 pom.xml 中的 Jetty 版本是 9.2.23.v20171218。
我在 Ubuntu 20.04.2 LTS 上运行 Ubuntu 官方存储库中的 JDK 11。
我正在使用包含所有依赖项的胖可执行文件 .jar。 NetBeans 11.
我在 Windows 10 上使用 Netbeans 11 在 JDK1.8 上进行编译,并部署到运行 JDK11 的 Ubuntu 服务器。
除了 Jetty 之外,一切都可以在 JDK11 上运行 - 如果我在 Windows 10 计算机上运行 JDK1.8 中的 .jar,它可以从 Jetty 提供 .JSP 页面。
如果我在 Linux 机器上运行 JDK1.8 中的 .jar,它可以从 Jetty 提供 .JSP 页面。
如果我在 Linux 计算机上的 JDK11 中运行 .jar,当尝试在 Ubuntu 计算机上的 Chrome 中查看 .JSP 页面时,我会得到:
org.apache.jasper.JasperException: /index.jsp(1,68) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/fmt cannot be resolved in either web.xml or the jar files deployed with this application
显然,对于 Jetty 的 JSTL 机制来说,JDK1.8 和 JDK11 之间存在重大差异。
那会是什么?
我进行了广泛的挖掘,我的问题是其他得到这个的人都会得到
org.apache.jasper.JasperException: /index.jsp(1,68) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
当我得到
org.apache.jasper.JasperException: /index.jsp(1,68) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/fmt cannot be resolved in either web.xml or the jar files deployed with this application
“核心”与“fmt”- 我找不到其他人得到“fmt” - 每个人都在同一错误消息中得到“核心”。
我可以从哪里开始寻找?
突出的问题是这仅适用于 JDK1.8 - 如果我在使用 JDK11 的 Windows 中尝试它,我会得到与使用 JDK11 的 Linux 上完全相同的错误。
所以我的问题是 JDK1.8 Jetty 代码为 JSP 页面提供服务,因为我实现它与 JDK11 不兼容。
我可以从哪里开始寻找?
从字面上看,错误是这样的ONLY默认JDK11下
The absolute uri: http://java.sun.com/jsp/jstl/fmt cannot be resolved in either web.xml or the jar files deployed with this application
如何在 JDK11 中解析上述绝对 URI?
它看起来像是一个环境/JDK 设置。
我在 JDK11 中运行 JAR
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djavax.net.ssl.trustStore=/usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts -cp /usr/src/verdi/verdi-1.0-SNAPSHOT-jar-with-dependencies.jar verishare.App
这里有什么想法或基本概念错误吗? (我对 Java 很陌生。)
Thanks!
编辑:我的输出mvn dependency:tree
正如 Joakim Erdfelt 的善意建议:
[INFO] verishare:verdi:jar:1.0-SNAPSHOT
[INFO] +- org.slf4j:slf4j-simple:jar:1.7.21:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.11.0:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.11.0:compile
[INFO] +- junit:junit:jar:4.11:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.eclipse.jetty.websocket:websocket-client:jar:9.2.23.v20171218:compile
[INFO] | +- org.eclipse.jetty:jetty-util:jar:9.2.23.v20171218:compile
[INFO] | +- org.eclipse.jetty:jetty-io:jar:9.2.23.v20171218:compile
[INFO] | \- org.eclipse.jetty.websocket:websocket-common:jar:9.2.23.v20171218:compile
[INFO] | \- org.eclipse.jetty.websocket:websocket-api:jar:9.2.23.v20171218:compile
[INFO] +- org.eclipse.jetty:jetty-server:jar:9.2.23.v20171218:compile
[INFO] | +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
[INFO] | \- org.eclipse.jetty:jetty-http:jar:9.2.23.v20171218:compile
[INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.2.23.v20171218:compile
[INFO] | \- org.eclipse.jetty:jetty-security:jar:9.2.23.v20171218:compile
[INFO] +- com.google.code.gson:gson:jar:2.2.4:compile
[INFO] +- org.glassfish:javax.json:jar:1.0.4:compile
[INFO] +- org.apache.commons:commons-dbcp2:jar:2.5.0:compile
[INFO] | +- org.apache.commons:commons-pool2:jar:2.6.0:compile
[INFO] | \- commons-logging:commons-logging:jar:1.2:compile
[INFO] +- postgresql:postgresql:jar:9.1-901-1.jdbc4:compile
[INFO] +- org.xerial:sqlite-jdbc:jar:3.8.6:compile
[INFO] +- org.eclipse.jetty:jetty-webapp:jar:9.2.23.v20171218:compile
[INFO] | \- org.eclipse.jetty:jetty-xml:jar:9.2.23.v20171218:compile
[INFO] +- org.eclipse.jetty:jetty-jsp:jar:9.2.23.v20171218:compile
[INFO] | +- org.eclipse.jetty.toolchain:jetty-schemas:jar:3.1.M0:compile
[INFO] | +- javax.servlet.jsp:javax.servlet.jsp-api:jar:2.3.1:compile
[INFO] | +- org.glassfish.web:javax.servlet.jsp:jar:2.3.2:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:jar:1.2.0.v201105211821:compile
[INFO] | +- org.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.2:compile
[INFO] | +- org.glassfish:javax.el:jar:3.0.0:compile
[INFO] | \- org.eclipse.jetty.orbit:org.eclipse.jdt.core:jar:3.8.2.v20130121:compile
[INFO] +- Microsoft:MSSQL:jar:4.0:compile
[INFO] +- org.mariadb.jdbc:mariadb-java-client:jar:1.1.8:compile
[INFO] | +- net.java.dev.jna:jna:jar:3.3.0:compile
[INFO] | +- net.java.dev.jna:jna:jar:platform:3.3.0:compile
[INFO] | \- commons-dbcp:commons-dbcp:jar:1.4:compile
[INFO] | \- commons-pool:commons-pool:jar:1.5.4:compile
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.1:compile
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.3:compile
[INFO] | \- commons-codec:commons-codec:jar:1.9:compile
[INFO] +- org.glassfish.jersey.core:jersey-server:jar:2.22.1:compile
[INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.22.1:compile
[INFO] | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.22.1:compile
[INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO] | +- org.glassfish.jersey.core:jersey-client:jar:2.22.1:compile
[INFO] | +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] | +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.22.1:compile
[INFO] | +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b31:compile
[INFO] | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b31:compile
[INFO] | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b31:compile
[INFO] | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b31:compile
[INFO] | +- org.glassfish.hk2:hk2-locator:jar:2.4.0-b31:compile
[INFO] | \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.22.1:compile
[INFO] +- org.glassfish.jersey.media:jersey-media-multipart:jar:2.22.1:compile
[INFO] | \- org.jvnet.mimepull:mimepull:jar:1.9.6:compile
[INFO] +- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.22.1:compile
[INFO] | +- org.glassfish.jersey.ext:jersey-entity-filtering:jar:2.22.1:compile
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.5.4:compile
[INFO] | \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.5.4:compile
[INFO] | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.5.4:compile
[INFO] +- org.glassfish.jersey.containers:jersey-container-jetty-http:jar:2.22.1:compile
[INFO] | \- org.eclipse.jetty:jetty-continuation:jar:9.1.1.v20140108:compile
[INFO] +- org.reflections:reflections:jar:0.9.10:compile
[INFO] | +- com.google.guava:guava:jar:15.0:compile
[INFO] | +- org.javassist:javassist:jar:3.19.0-GA:compile
[INFO] | \- com.google.code.findbugs:annotations:jar:2.0.1:compile
[INFO] +- com.jcraft:jsch:jar:0.1.53:compile
[INFO] +- ie.corballis:sox-java:jar:1.0.1:compile
[INFO] +- com.sun.mail:javax.mail:jar:1.5.0:compile
[INFO] | \- javax.activation:activation:jar:1.1:compile
[INFO] +- org.springframework:spring-web:jar:5.3.0:compile
[INFO] | +- org.springframework:spring-beans:jar:5.3.0:compile
[INFO] | \- org.springframework:spring-core:jar:5.3.0:compile
[INFO] | \- org.springframework:spring-jcl:jar:5.3.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.11.3:compile
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.11.3:compile
[INFO] \- com.fasterxml.jackson.core:jackson-annotations:jar:2.11.3:compile
编辑:花了一些时间并研究了我能找到的引用“JSTL”的每个 Maven 工件,并修改了我的 pom.xml 以包含我能找到的每个 Jetty 9.2.23.v20171218 工件,它似乎甚至远程引用了任何 Web或 JSP 功能,但在 JDK11 下运行上述 .jar 仍然会导致原来的错误。现在处理 Jakarta 和 Apache 工件(在 Maven 页面上搜索字符串“FMT”、“JSTL”、“web”、“jetty”等)并添加我可以找到的所有工件,然后进行迭代。 - 添加、编译、测试、删除、添加、编译、测试、删除。到目前为止,似乎没有添加任何内容来提供预期的效果
The absolute uri: http://java.sun.com/jsp/jstl/fmt
编辑:我对此的完全例外是
[qtp1591916281-28] WARN org.eclipse.jetty.servlet.ServletHandler -
org.apache.jasper.JasperException: /index.jsp(1,64) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/fmt cannot be resolved in either web.xml or the jar files deployed with this application
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:172)
at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:431)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:240)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:502)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:582)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1657)
at org.apache.jasper.compiler.Parser.parse(Parser.java:185)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:145)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:212)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
at org.eclipse.jetty.jsp.JettyJspServlet.service(JettyJspServlet.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:499)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:258)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.base/java.lang.Thread.run(Thread.java:829)
那么...我的问题是在 Eclipse、Jetty、Jasper 还是 Apache 中?完全困惑了。
编辑:我的 Netbeans 11 项目树中的任何位置都没有该项目的“web.xml”文件。我需要一个吗?是否只有 Jetty / Eclipse / Jasper 才需要 JDK11?
编辑:我已经广泛地研究了我能找到的每一篇SO帖子,并且我发现我的项目源树中的任何地方都没有 WEB-INF 文件夹。有问题/不是问题?我没有编写遗留应用程序,该应用程序已有几年历史,并且由于上述 PWC6188,它在 JDK11 中完全无法使用。
编辑:仍然无处可去,也尝试稍微升级 Jetty 版本,问题仍然与上面相同。在Java 11中似乎无法在工作状态下使用JSTL运行Jetty 9.2.23.v20171218?我这样做是在浪费时间吗?我正在考虑放弃整个项目并从头开始重写,并且必须证明这一点是合理的 - 考虑到已经在这个问题上花费了数周的全职开发时间 - 这是开始感受到收益递减的规律。我是否在浪费时间,应该完全放弃 Jetty?