相关文章推荐
鬼畜的钢笔  ·  docker mysqldump ...·  7 月前    · 
急躁的番茄  ·  http - Why am I ...·  1 年前    · 
+关注继续查看

SSM整合,Tomcat启动失败,在日志中出现 ClassNotFoundException过滤器文件找不到

问题: 最近刚学习了解Spring、SpringMVC、Mybatis,准备做一个SSM整合的简单项目。本来以为应该很简单,毕竟只是简单的CRUD操作,但是真正做的时候就会出现各种问题,其中一个刚接触SSM整合很容易造成的就是ClassNotFoundException,如下图所示:
在这里插入图片描述

java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187)
        at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:539)
        at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:520)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:249)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:102)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4566)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5203)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
        at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1775)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
        at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
        at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:460)
        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:408)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
        at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
        at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1406)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
        at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at java.base/java.lang.Thread.run(Thread.java:832)

查看日志就是一堆这样的错误,大概意思是我在web.xml中配置的字符乱码过滤器找不到文件,也有可能是Spring的拦截器找不到。但是web.xml下实实在在的又这些配置,然后就一直在找代码是否哪里写错了,改了好几次,历经艰难险阻,终于发现了问题所在,下面分享解决方法。

解决方法:

  1. 找不到文件首先看自己代码的相关配置是否有问题,如果自己写的类名错了,当然找不到文件了。
  2. 如果配置无误,看pom.xml中相关的spring、springMVC、Mybatis的jar包是否都配置了,并且要注意spring相关jar包如果是5.0版本以上的,mybatis的jar包需要2.0版本以上。

  3. 如果以上两条都没有问题,基本上都是第三种问题了,如下图所示步骤:

打开File-> Project Structure
image.png

在这里插入图片描述
发现WEB-INF下没有lib包..........因此自己项目下根本没有导入jar ,(导入了但没完全导入)

在这里插入图片描述
右键项目模块点击Put into Output Root 之后项目下就有lib包了,然后apply,最好点击OK,Tomcat正常启动,见到了久违的页面........hhh
在这里插入图片描述
总结: 在使用IDEA进行new一个新的简单的maven项目时,web是我们右键模块添加的框架,因此会存在,模板下面没有自动导入lib目录或者lib目录下的jar不全,之前学习的过程中并没有遇到这个问题,可能是换了不同的IDEA,因此我们在做项目时,应该最后添加一下,防止我们换台电脑换个IDEA的配置就会出现一些莫名其妙的错误。

认识Tomcat的日志:catalina.out、localhost、manager、localhost_access_log
认识Tomcat的日志:catalina.out、localhost、manager、localhost_access_log