springboot项目打成war包部署到tomcat遇到的一些问题

网友投稿 657 2023-05-05


springboot项目打成war包部署到tomcat遇到的一些问题

开发环境使用jdk1.8.0_60,把springboot 项目打成war包后,

部署到apache-tomcat-7.0.68时报错如下,换成apache-tomcat-8.0.9解决

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/my-springboot-web-0.0.1]]

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)

at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1091)

at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1980)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

at org.apache.tomcat.websocket.server.WsServerContainer.(WsServerContainer.java:149)

at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)

at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5573)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)

... 10 more

六月 22, 2017 12:19:15 上午 org.apache.catalina.startup.HostConfig deployWAR

严重: Error deploying web application archive E:\Data\apache-tomcat-7.0.68\webapps\my-springboot-web-0.0.1.war

java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/my-springboot-web-0.0.1]]

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:903)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)

at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1091)

at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1980)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

另外springboot项目打成war包部署到tomcat时需要改变启动方式,否则运行tomcat时war包只会解压,但是加载不了

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.context.web.SpringBootServletInitializer;

@SpringBootApplication //- springboot项目,并配置扫描路径

@EnableAutoConfiguration //- springboot自动配置,这个注解可以根据你依赖的包自动生成相关配置

public class StartApp extends SpringBootServletInitializer {

public static void main(String[] args) {

SpringApplication.run(StartApp.class, args);

}

/**

* 需要把web项目打成war包部署到外部tomcat运行时需要改变启动方式

*/

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

return builder.sources(StartApp.class);

}

部署到外部tomcat时,注意pom.xml配置,否则会报错

org.springframework.boot

spring-boot-starter-tomcat

1.3.5.RELEASE

provided

**报错信息:**

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)

at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180)

at com.StartApp.main(StartApp.java:13)

Caused by: java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory

at org.apache.catalina.util.LifecycleBase.(LifecycleBase.java:37)

at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:158)

athttp:// org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:160)

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)

... 8 more

Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory

at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

... 12 more

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-22 00:48:28,303][org.springframework.boot.context.web.ErrorPageFilter]Forwarding to error page from request [/excel] due to exception [java.lang.LinkageError: loader constraint violation: when resolving method "org.apache.jasper.runtime.InstanceManagerFactory.getbetnbZzVcInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/jsp/excel_jsp, and the class loader (instance of java/net/URLClassLoader) for the method's defining class, org/apache/jasper/runtime/InstanceManagerFactory, have different Class objects for the type org/apache/tomcat/InstanceManager used in the signature]

javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: when resolving method "org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/jsp/excel_jsp, and the class loader (instance of java/net/URLClassLoader) for the method's defining class, org/apache/jasper/runtime/InstanceManagerFactory, have different Class objects for the type org/apache/tomcat/InstanceManager used in the signature

默认配置下就可以通过http://localhost:8080/war包名/@RequestMapping.value访问了, 另外部署到tomcat后静态资源(resources下的js文件)访问不到的问题还没解决。。。

以上所述是给大家介绍的springboot项目打成war包部署到tomcat遇到的一些问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java 中冒泡、二分、快速算法详解
下一篇:Java老矣 尚能饭否?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~