我有一个由Tomcat 8驱动的servlet,它需要一个静态方法来用Jackson 2.9.6执行JSON解析。在代码执行期间:JSONData parsedJSONData = PDFGenerator.parseJSONDocument(jsonDocument);我得到:java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException重要的是要注意,servlet类和PDFGenerator类位于不同的包中,但是带有public访问修饰符。我试图通过pom.xml将依赖项添加到项目的根目录:<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version></dependency>但这无济于事。在我的项目中,我没有使用Maven,而是通过添加了所需的库classpath。奇怪的是,只有当我尝试PDFGenerator.parseJSONDocument(jsonDocument)从servlet调用时,这种异常才会出现,而从常规Java类执行的过程就可以顺利进行。我的问题:为了能够使用基于FasterXML / Jackson JSON库的JSON解析器功能调用静态方法,我应该添加什么位置?
1 回答
![?](http://img1.sycdn.imooc.com/533e4d5b0001d57502200203-100-100.jpg)
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
这个问题几乎可以肯定是由您的servlet容器(Tomcat 8.x)中的类加载器无法找到Jackson的库/ JAR引起的。在Servlet容器中装入类/库的方式与独立Java应用程序中的标准类路径声明不同。这就是为什么您从servlet引擎看到错误,而不是在直接执行类的过程中看到错误的原因。以下是有关Tomcat 8.x如何处理类加载的常规文档:
https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html
作为一般规则,首先要帮助防止此类问题,将servlet部署在“ webapp”容器中(包括所有必需的库(必需的JAR的适当版本等))是一个好主意。这样做会将您的servlet隔离在单个类加载器下,并自动将它们定位在正确的层次结构中。请参阅链接文档的这一部分:
WebappX —为部署在单个Tomcat实例中的每个Web应用程序创建一个类加载器。Web应用程序的/ WEB-INF / classes目录中的所有未解压缩的类和资源,以及Web应用程序的/ WEB-INF / lib目录下的JAR文件中的类和资源,对于此Web应用程序都是可见的,但不是给其他人。
仅供参考,还有其他方法可以使用企业级Web应用程序执行此操作,但是我们在这里不做讨论。
添加回答
举报
0/150
提交
取消