为啥在我的 web 应用程序中使用 Tomcat 时出现 Class NotFound Exception?

Posted

技术标签:

【中文标题】为啥在我的 web 应用程序中使用 Tomcat 时出现 Class NotFound Exception?【英文标题】:Why am I getting Class NotFound Exception using Tomcat in my webapp?为什么在我的 web 应用程序中使用 Tomcat 时出现 Class NotFound Exception? 【发布时间】:2019-04-22 16:28:11 【问题描述】:

我正在使用 Gson Library 2.8.0 将 JSON 字符串转换为 Java Hashmap,Maven 作为构建系统, Tomcat 将我的代码作为 webapp 运行。 IDE:IntelliJ 理念

问题是每当我运行我的代码时,执行停止并抛出 Class NotFound Exception。

详情如下:

Tomcat 本地主机日志 ==>

java.lang.ClassNotFoundException: com.google.gson.Gson 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1137) 在 Test.doGet(Test.java:13) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:635) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.base/java.lang.Thread.run(Thread.java:844)

代码 ==>

import com.google.gson.Gson;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;

public class Test extends HttpServlet 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        Gson gson=new Gson();
        String json = " \"color\" : \"Black\", \"type\" : \"BMW\" ";

    HashMap<String,Object> map=gson.fromJson(json, HashMap.class);
    System.out.println("This is the converted Gson result\n" +map);

    

【问题讨论】:

com.google.gson.Gson 在运行时不可用 你是在 intelliJ 的 tomcat 上运行还是手动部署到 tomcat? 也添加你的pom.xml @secret 超级明星 是的,我在 intelliJ 中使用 tomcat。你的意思是 Gson 在运行时不可用?你能解释一下吗? 这意味着,当您运行应用程序时,jvm 无法在类路径中找到类 Gson 类,从而导致问题。尝试清理 tomcat 并再次运行。 【参考方案1】:

将Gson库文件放入lib文件夹即可解决问题 Tomcat 的。

【讨论】:

以上是关于为啥在我的 web 应用程序中使用 Tomcat 时出现 Class NotFound Exception?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我登录之前创建了一个新会话?

为啥我两次被要求在我的 iPhone Web 应用程序中使用 GPS

为啥在我的 Flutter Web 上使用路径 URL 策略会破坏我的导航?

web项目部署在我的电脑上的tomcat中,怎样让其他用户访问我的项目

web项目部署在我的电脑上的tomcat中,怎样让其他用户访问我的项目

web项目部署在我的电脑上的tomcat中,怎样让其他用户访问我的项目