解决IDEA配置tomcat启动报错问题
在配置servlet不同路径时遇上以下两个错误:
java.lang.NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
java.lang.ClassNotFoundException:org.apache.jsp.index_jsp;
对于第一个问题,我上网查阅了很多资料后发现,可能是tomcat版本冲突导致,catalinalog如下:
19-Feb-201808:26:44.175信息[main]org.apache.catalina.startup.VersionLoggerListener.logServerversion: ApacheTomcat/8.5.28
19-Feb-201808:26:44.175信息[main]org.apache.catalina.startup.VersionLoggerListener.logServerbuilt: Feb6201823:10:25UTC
19-Feb-201808:26:44.175信息[main]org.apache.catalina.startup.VersionLoggerListener.logServernumber: 8.5.28.0
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logOSName: Windows7
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logOSVersion: 6.1
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logArchitecture: x86
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logJavaHome: C:\ProgramFiles\Java\jdk1.8.0_141\jre
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logJVMVersion: 1.8.0_141-b15
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logJVMVendor: OracleCorporation
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCATALINA_BASE: F:\apache-tomcat-8.5.28
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCATALINA_HOME: F:\apache-tomcat-8.5.28
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Djava.util.logging.config.file=F:\apache-tomcat-8.5.28\conf\logging.properties
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Djdk.tls.ephemeralDHKeySize=2048
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Dignore.endorsed.dirs=
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Dcatalina.base=F:\apache-tomcat-8.5.28
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Dcatalina.home=F:\apache-tomcat-8.5.28
19-Feb-201808:26:44.191信息[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Djava.io.tmpdir=F:\apache-tomcat-8.5.28\temp
19-Feb-201808:26:44.191信息[main]org.apache.catalina.core.AprLifecycleListener.lifecycleEventLoadedAPRbasedApacheTomcatNativelibrary[1.2.16]usingAPRversion[1.6.3].
19-Feb-201808:26:44.206信息[main]org.apache.catalina.core.AprLifecycleListener.lifecycleEventAPRcapabilities:IPv6[true],sendfile[true],acceptfilters[false],random[true].
19-Feb-201808:26:44.206信息[main]org.apache.catalina.core.AprLifecycleListener.lifecycleEventAPR/OpenSSLconfiguration:useAprConnector[false],useOpenSSL[true]
19-Feb-201808:26:44.830信息[main]org.apache.catalina.core.AprLifecycleListener.initializeSSLOpenSSLsuccessfullyinitialized[OpenSSL1.0.2m 2Nov2017]
19-Feb-201808:26:45.080信息[main]org.apache.coyote.AbstractProtocol.initInitializingProtocolHandler["http-nio-8080"]
19-Feb-201808:26:45.517信息[main]org.apache.tomcat.util.net.NioSelectorPool.getSharedSelectorUsingasharedselectorforservletwrite/read
19-Feb-201808:26:45.581信息[main]org.apache.coyote.AbstractProtocol.initInitializingProtocolHandler["ajp-nio-8009"]
19-Feb-201808:26:45.597信息[main]org.apache.tomcat.util.net.NioSelectorPool.getSharedSelectorUsingasharedselectorforservletwrite/read
19-Feb-201808:26:45.597信息[main]org.apache.catalina.startup.Catalina.loadInitializationprocessedin2422ms
19-Feb-201808:26:45.643信息[main]org.apache.catalina.core.StandardService.startInternalStartingservice[Catalina]
19-Feb-201808:26:45.643信息[main]org.apache.catalina.core.StandardEngine.startInternalStartingServletEngine:ApacheTomcat/8.5.28
19-Feb-201808:26:45.675信息[localhost-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectoryDeployingwebapplicationdirectory[F:\apache-tomcat-8.5.28\webapps\docs]
19-Feb-201808:26:46.423信息[localhost-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectoryDeploymentofwebapplicationdirectory[F:\apache-tomcat-8.5.28\webapps\docs]hasfinishedin[748]ms
19-Feb-201808:26:46.423信息[localhost-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectoryDeployingwebapplicationdirectory[F:\apache-tomcat-8.5.28\webapps\examples]
19-Feb-201808:26:47.059严重[localhost-startStop-1]org.apache.catalina.core.ContainerBase.addChildInternalContainerBase.addChild:start:
org.apache.catalina.LifecycleException:Failedtostartcomponent[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/examples]]
atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
atorg.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1141)
atorg.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1875)
atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
atjava.util.concurrent.FutureTask.run(FutureTask.java:266)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
atjava.lang.Thread.run(Thread.java:748)
Causedby:org.apache.catalina.LifecycleException:Failedtostartcomponent[Pipeline[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/examples]]]
atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
atorg.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5125)
atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
...10more
Causedby:org.apache.catalina.LifecycleException:Failedtostartcomponent[org.apache.catalina.authenticator.FormAuthenticator[/examples]]
atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
atorg.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:182)
atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
...12more
Causedby:java.lang.NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
atorg.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1186)
atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
...14more
19-Feb-201808:26:47.075严重[localhost-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectoryErrordeployingwebapplicationdirectory[F:\apache-tomcat-8.5.28\webapps\examples]
java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:Failedtostartcomponent[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/examples]]
atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:756)
atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
atorg.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1141)
atorg.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1875)
atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
atjava.util.concurrent.FutureTask.run(FutureTask.java:266)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
atjava.lang.Thread.run(Thread.java:748)
我先试着删除其他Tomcat版本,重新配置tomcat环境变量并重新部署Tomcat。发现并没有解决问题,再次上网查阅,发现getContextPath()在servlet2.5特有。于是试着删除原先jar包中的servlet-api.jar,然后重新部署项目。发现了第二个问题,log如下:
19-Feb-201809:59:51.534严重[http-nio-8080-exec-3]org.apache.catalina.core.StandardWrapperValve.invokeServlet.service()forservlet[jsp]incontextwithpath[/Happy]threwexception[java.lang.ClassNotFoundException:org.apache.jsp.index_jsp]withrootcause
java.lang.ClassNotFoundException:org.apache.jsp.index_jsp
atjava.net.URLClassLoader.findClass(URLClassLoader.java:381)
atorg.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:129)
atorg.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:60)
atorg.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:159)
atorg.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:171)
atorg.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:380)
atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
atjavax.servlet.http.HttpServlet.service(HttpServlet.java:847)
atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
atorg.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
atorg.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
atorg.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
atorg.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
atorg.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
atorg.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
atorg.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
atjava.lang.Thread.run(Thread.java:748)
19-Feb-201810:03:45.289严重[http-nio-8080-exec-1]org.apache.catalina.core.StandardWrapperValve.invokeServlet.service()forservlet[jsp]incontextwithpath[/Happy]threwexception[UnabletocompileclassforJSP]withrootcause
java.lang.ClassNotFoundException:com.sun.el.ExpressionFactoryImpl
atorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
atorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
atjavax.el.FactoryFinder.newInstance(FactoryFinder.java:83)
atjavax.el.FactoryFinder.find(FactoryFinder.java:193)
atjavax.el.ExpressionFactory.newInstance(ExpressionFactory.java:185)
atjavax.el.ExpressionFactory.newInstance(ExpressionFactory.java:156)
atorg.apache.jasper.compiler.PageInfo.
atorg.apache.jasper.compiler.Compiler.generateJava(Compiler.java:117)
atorg.apache.jasper.compiler.Compiler.compile(Compiler.java:374)
atorg.apache.jasper.compiler.Compiler.compile(Compiler.java:351)
atorg.apache.jasper.compiler.Compiler.compile(Compiler.java:335)
atorg.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595)
atorg.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368)
atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
atjavax.servlet.http.HttpServlet.service(HttpServlet.java:847)
atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
atorg.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
atorg.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
atorg.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
atorg.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
atorg.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
atorg.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
atorg.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
atjava.lang.Thread.run(Thread.java:748)
再次查阅资料,发现是缺少jar包。因为jdk1.8的扩展jar包里没有servlet相关api,故IDEA会导入失败。
此时需要导入jar包,之前我是下载相关api
然后放到下图目录中
为了防止出现缺少jar包问题,建议直接去tomcat目录下的lib中找到servlet-api.jar,直接复制到ext中。然后再重新部署一下tomcat,问题解决。
总结
到此这篇关于解决IDEA配置tomcat启动报错问题的文章就介绍到这了,更多相关IDEA配置tomcat启动报错内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。