如何在项目中使用JSTL

yah*_*Bdd 5 jsp tomcat jstl

我尝试在我的项目中使用 jstl,但在 TomCat 10 上运行该应用程序时遇到以下问题:

描述:服务器遇到意外情况,无法满足请求。

例外:

jakarta.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:777)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
Run Code Online (Sandbox Code Playgroud)

我添加了 jstl.jar standard.jar jst-impl.jar jstl-standar.jar jstl-api-1.2.jar (根据不同的教程)但他们都没有解决问题。

Bas*_*que 5

研究第一行错误消息。在左边,注意jakarta.。右边注意一下javax..

\n

Java EE \xe2\x9e\xa0Jakarta EE

\n

几年前,Oracle 将Java 企业版 (Java EE) 规范和技术的所有权和控制权转让给Eclipse 基金会。因此,Java EE 变成了Jakarta EEJava商标归Oracle 公司所有。, and so that term must be removed from new artifacts produced by the Eclipse Foundation.

\n

作为切换过渡的一部分,包命名从 更改javax.*jakarta.*.

\n

您正在使用Apache Tomcat v 10版本,该版本是为jakarta.* package naming. The Tomcat community is developing another version on parallel, same features, same performance, different package naming.

\n

所以你有两个选择:

\n
    \n
  • 继续使用 Tomcat 10,同时更改import要使用的语句jakarta.* package naming.
  • \n
  • 切换到使用 Tomcat 9,同时保留您的import语句javax.*.
  • \n
\n

如果您的项目是新的、全新的,或者小而简单的,那么我推荐第一个。这样你就为未来做好了准备。除了在复制粘贴代码或阅读旧文章时记住调整包命名之外,没有任何缺点。

\n

另一个好处是,最新版本的 Jakarta EE 实现旨在支持 Java 11(必需)和 Java 17(可选,但通常已完成)。为此,请选择 Tomcat 10.1.x 而不是 10.0.x。请参阅 Tomcat 文档,哪个 Tomcat?.

\n

如果您的项目已经存在并且规模很大,那么您可能希望推迟过渡的麻烦。在这种情况下,请坚持使用 Tomcat 9。我怀疑您最终会想要过渡,但您可能会推迟几年。

\n

顺便说一句,Tomcat 的同等竞争对手是Eclipse Jetty, has chosen the same approach. Jetty development is being done in two parallel versions with same features, same performance, different package naming.

\n
\n

在 Oracle 到 Eclipse 的过渡过程中,现在有点令人困惑。为了帮助您了解方向,您可以观看 YouTube 等上的许多视频演示,包括 Jakarta EE 项目本身发布的一些视频演示。

\n

  • 感谢您花时间提供的帮助,新软件包是 jakarta.servlet.jsp.jstl-2.0.0.jar 和 jakarta.servlet.jsp.jstl-api-2.0.0。不需要改变标签库描述符 (2认同)