gpt4 book ai didi

java - 错误 : Servlet Jar not Loaded. .. 违规类 : javax/servlet/Servlet. 类

转载 作者:IT老高 更新时间:2023-10-28 21:05:10 25 4
gpt4 key购买 nike

我收到以下错误:

INFO: validateJarFile(C:\dev\server\tomcat6\webapps Sempedia\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, sectoin 9.7.2. Offending class: javax/servlet/Servlet.class

现有资源说这是由于与 servlet.jar 或在我的情况下名为 servlet-api.jar 文件的冲突。我已经从/webapps 文件夹中删除了所有其他项目,我已经获取了 tomcat6/lib 目录中的 servlet-api.jar 文件并将其添加到项目构建路径中,所以我看不到那里仍然是冲突。

当我尝试运行应用程序时,我得到以下堆栈跟踪。

org.apache.jasper.JasperException:无法为 JSP 编译类:

An error occurred at line: 22 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:

org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439) org.apache.jasper.compiler.Compiler.compile(Compiler.java:334) org.apache.jasper.compiler.Compiler.compile(Compiler.java:312) org.apache.jasper.compiler.Compiler.compile(Compiler.java:299) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

最佳答案

这是类路径污染的标志。 JSP/Servlet API 库依赖于 appserver 实现,并且在 Tomcat 6 的情况下属于 Tomcat/lib 文件夹中,并且应该不得移动或复制到其他地方。这是您现在遇到的类加载中的可移植性问题和冲突的秘诀。 webapp 中的库在类加载方面具有优先权。如果 servlet-api.jar 在那里遇到,它会依次在那里寻找它的依赖关系,但它们显然在那里丢失了。

您必须从 webapp 的 Webapp/WEB-INF/lib 中删除任何特定于 appserver 的库。您应该将特定于 webapp 的库放在那里。将特定于应用服务器的库保存在应用服务器自己的默认类路径中,在您的情况下是 Tomcat/lib。保持不动。您最多可以添加您想在其中的所有 webapps 之间共享的库,或者更好的是,在 Tomcat/conf/catalina.properties 中配置 shared.loader为此。

如果有的话,还要从 JDK/libJRE/lib 文件夹中删除任何特定于 appserver 的库和特定于 webapp 的库。我经常看到一些初学者在那里移动/复制库,因为“否则它无法编译”。您永远不应该在其中复制非 JRK/JRE 特定的库。这也是便携性问题的良方。使用javac编译类时,应使用-cp参数指定依赖库。

更新:如果是 IDE(您在谈论“构建路径”时似乎使用了一个),您需要将 Web 项目与应用程序服务器相关联。例如,在 Eclipse 中,您可以选择在创建 Dynamic Web Project 期间执行此操作。在创建项目之前,您需要在 Eclipse 中集成服务器实例。您可以通过 Servers View 执行此操作(假设您使用 Eclipse for Java EE 开发人员,否则升级)。之后您也可以通过项目属性中的 Servers 条目对其进行更改。选择一个您想用作“默认”服务器的服务器,然后它的库将自动包含在项目的构建路径中。绝对没有必要将它们复制/移动到其他地方。另见 How do I import the javax.servlet API in my Eclipse project?

关于java - 错误 : Servlet Jar not Loaded. .. 违规类 : javax/servlet/Servlet. 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com