为啥在我的 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中,怎样让其他用户访问我的项目