当前位置: 首页 > 面试题库 >

Error: Servlet Jar not Loaded… Offending class: javax/servlet/Servlet.class

胡博艺
2023-03-14
问题内容

我收到以下错误:

INFO:validateJarFile(C:\ dev \ server \ tomcat6 \ webapps Sempedia \ WEB-INF \ lib \ servlet-api.jar)-未加载jar。参见Servlet Spec 2.3,第9.7.2节。令人反感的类:javax / servlet / Servlet.class

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

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

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

在生成的Java文件中的第22行发生错误:对于类型JspFactory,未定义方法getJspApplicationContext(ServletContext)。

堆栈跟踪:

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/lib文件夹中是Tomcat 6的情况下属于JSP ,因此绝对不应将其移动或复制到其他位置。正如你现在遇到的那样,它是可移植性问题和类加载冲突的良方。webapp中的库在类加载中具有优先权。如果在servlet-api.jar那里遇到,则依次在其中查找其依赖项,但显然在那里缺少它们。

你必须从webapp的中删除所有特定于appserver的库Webapp/WEB-INF/lib。你只应在其中放置特定于Webapp的库。将特定于应用程序服务器的库保留在应用程序服务器自己的默认类路径中,Tomcat/lib你可以使用此默认路径。保持原状。你最多可以添加要在其中的所有Web应用程序之间共享的库,或者甚至更好地为此配置shared.loaderin Tomcat/conf/catalina.properties。

此外,还从JDK/lib和JRE/lib文件夹中删除所有特定于appserver和webapp的库。我经常看到一些入门者将库移动/复制到那里,因为“否则它不会编译”。你永远不要在其中复制非JRK / JRE特定的库。这也是可移植性问题的解决方案。使用编译类时javac,应使用-cp参数指定从属库。

更新:如果是IDE(在谈论“构建路径”时似乎使用了一个),则需要将Web项目与应用程序服务器关联。例如,在Eclipse中,你可以选择在创建Dynamic Web Project期间执行此操作。在创建项目之前,你需要在Eclipse中集成服务器实例。你可以通过Servers视图来做到这一点(假设你正在将Eclipse用于Java EE开发人员,否则进行升级)。你还可以随后通过服务器进行更改在项目属性中输入。选择一个你想用作“默认”服务器的服务器,然后其库将自动包含在项目的构建路径中。绝对没有必要在其他地方复制/移动它们。另请参见如何在Eclipse项目中导入javax.servlet API?



 类似资料:
  • 消息 说明服务器遇到内部错误(),无法运行 根本原因 根本原因 当我将浏览器用作http://localhost:8080/sample/rest/app/test将返回一个json数据类型。。 产品类 StringService类 StringServiceApplication 我的网络。xml 我的jboss网站。xml 构建路径上的我的库——javassist-3.12.1。GA-json

  • 问题内容: 由于Servlet 3.0 支持异步处理。使用始终异步处理会更好吗?或者在什么情况下同步处理更好? 问题答案: 异步Servlet带来的最大好处是HTTP push ,在该服务器中,服务器可以在选择时向客户端发送信息,而不是在客户端请求时将信息发送回客户端。在异步Servlet之前,这将需要长时间运行的HTTP连接,每个HTTP连接都会束缚服务器线程,这是非常低效的。这个新模型使服务器

  • 主要内容:Filter 接口,Filter 的工作流程,Filter 的生命周期,注册与映射 Filter,示例Servlet Filter 又称 Servlet 过滤器,它是在 Servlet 2.3 规范中定义的,能够对 Servlet 容器传给 Web 资源的 request 对象和 response 对象进行检查和修改。 Filter 不是 Servlet,不能直接访问,它本身也不能生成 request 对象和 response 对象,它只能为 Web 资源提供以下过滤功能: 在 Web

  • 主要内容:Session 的工作原理,Session 与 Cookie 对比,Session API,设置 Session 过期时间,Session 的生命周期,Session 域对象,示例Session 是服务器端会话技术。当浏览器访问 Web 服务器的资源时,服务器可以为每个用户浏览器创建一个 Session 对象,每个浏览器独占一个 Session 对象。 由于每个浏览器独占一个 Session,所以用户在访问服务器的资源时,可以把数据保存在各自的 Session 中。当用户再次访问该服务

  • 主要内容:会话技术,Cookie,示例HTTP(超文本传输协议)是一个基于请求与响应模式的无状态协议。 无状态主要指 2 点: 协议对于事务处理没有记忆能力,服务器不能自动维护用户的上下文信息,无法保存用户状态; 每次请求都是独立的,不会受到前面请求的影响,也不会影响后面的请求。 当浏览器发送 HTTP 请求到服务器时,服务器会响应客户端的请求,但当同一个浏览器再次发送请求到该服务器时,服务器并不知道它就是刚才那个浏览器,即 HTTP

  • 涉及到 WEB-INF 子目录的 Web 应用程序结构是所有的 Java web 应用程序的标准,并由 Servlet API 规范指定。给定一个顶级目录名 myapp,目录结构如下所示: /myapp /images /WEB-INF /classes /lib WEB-INF 子目录中包含应用程序的部署描述符,名为 web.xml。所有的 H