springboot项目打成war包部署到tomcat遇到的一些问题
开发环境使用jdk1.8.0_60,把springboot项目打成war包后,
部署到apache-tomcat-7.0.68时报错如下,换成apache-tomcat-8.0.9解决
org.apache.catalina.LifecycleException:Failedtostartcomponent[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/my-springboot-web-0.0.1]] atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) atorg.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1091) atorg.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1980) atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) atjava.util.concurrent.FutureTask.run(FutureTask.java:266) atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) atjava.lang.Thread.run(Thread.java:745) Causedby:java.lang.NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; atorg.apache.tomcat.websocket.server.WsServerContainer.(WsServerContainer.java:149) atorg.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131) atorg.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47) atorg.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5573) atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) ...10more 六月22,201712:19:15上午org.apache.catalina.startup.HostConfigdeployWAR 严重:ErrordeployingwebapplicationarchiveE:\Data\apache-tomcat-7.0.68\webapps\my-springboot-web-0.0.1.war java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:Failedtostartcomponent[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/my-springboot-web-0.0.1]] atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:903) atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) atorg.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1091) atorg.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1980) atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) atjava.util.concurrent.FutureTask.run(FutureTask.java:266) atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) atjava.lang.Thread.run(Thread.java:745)
另外springboot项目打成war包部署到tomcat时需要改变启动方式,否则运行tomcat时war包只会解压,但是加载不了
importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.EnableAutoConfiguration; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.boot.builder.SpringApplicationBuilder; importorg.springframework.boot.context.web.SpringBootServletInitializer; @SpringBootApplication//-springboot项目,并配置扫描路径 @EnableAutoConfiguration//-springboot自动配置,这个注解可以根据你依赖的包自动生成相关配置 publicclassStartAppextendsSpringBootServletInitializer{ publicstaticvoidmain(String[]args){ SpringApplication.run(StartApp.class,args); } /** *需要把web项目打成war包部署到外部tomcat运行时需要改变启动方式 */ @Override protectedSpringApplicationBuilderconfigure(SpringApplicationBuilderbuilder){ returnbuilder.sources(StartApp.class); }
部署到外部tomcat时,注意pom.xml配置,否则会报错
org.springframework.boot spring-boot-starter-tomcat 1.3.5.RELEASE provided
**报错信息:** org.springframework.context.ApplicationContextException:Unabletostartembeddedcontainer;nestedexceptionisjava.lang.NoClassDefFoundError:org/apache/juli/logging/LogFactory atorg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) atorg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) atorg.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) atorg.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) atorg.springframework.boot.SpringApplication.run(SpringApplication.java:307) atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1191) atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1180) atcom.StartApp.main(StartApp.java:13) Causedby:java.lang.NoClassDefFoundError:org/apache/juli/logging/LogFactory atorg.apache.catalina.util.LifecycleBase.(LifecycleBase.java:37) atorg.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:158) atorg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:160) atorg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ...8more Causedby:java.lang.ClassNotFoundException:org.apache.juli.logging.LogFactory atjava.net.URLClassLoader.findClass(URLClassLoader.java:381) atjava.lang.ClassLoader.loadClass(ClassLoader.java:424) atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) atjava.lang.ClassLoader.loadClass(ClassLoader.java:357) ...12more
springboot项目使用jsp页面时会添加以下依赖,但是在外部tomcat运行时会报错
因为tomcat/lib下自带的jar包(jasper.jar,jsp-api.jar等)会跟war包项目路径/lib下的解析jsp的jar包冲突
删除项目路径/lib下的相关jar包即可,如下图
org.apache.tomcat.embed tomcat-embed-jasper 8.0.33
**报错信息:** [ERROR][2017-06-2200:48:28,303][org.springframework.boot.context.web.ErrorPageFilter]Forwardingtoerrorpagefromrequest[/excel]duetoexception[java.lang.LinkageError:loaderconstraintviolation:whenresolvingmethod"org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;"theclassloader(instanceoforg/apache/jasper/servlet/JasperLoader)ofthecurrentclass,org/apache/jsp/jsp/excel_jsp,andtheclassloader(instanceofjava/net/URLClassLoader)forthemethod'sdefiningclass,org/apache/jasper/runtime/InstanceManagerFactory,havedifferentClassobjectsforthetypeorg/apache/tomcat/InstanceManagerusedinthesignature] javax.servlet.ServletException:java.lang.LinkageError:loaderconstraintviolation:whenresolvingmethod"org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;"theclassloader(instanceoforg/apache/jasper/servlet/JasperLoader)ofthecurrentclass,org/apache/jsp/jsp/excel_jsp,andtheclassloader(instanceofjava/net/URLClassLoader)forthemethod'sdefiningclass,org/apache/jasper/runtime/InstanceManagerFactory,havedifferentClassobjectsforthetypeorg/apache/tomcat/InstanceManagerusedinthesignature
默认配置下就可以通过http://localhost:8080/war包名/@RequestMapping.value访问了,另外部署到tomcat后静态资源(resources下的js文件)访问不到的问题还没解决。。。
以上所述是小编给大家介绍的springboot项目打成war包部署到tomcat遇到的一些问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!