`

spring boot项目发布tomcat容器

 
阅读更多
spring boot因为内嵌tomcat容器,所以可以通过打包为jar包的方法将项目发布,但是如何将spring boot项目打包成可发布到tomcat中的war包项目呢?

1. 既然需要打包成war包项目,首先需要在pom.xml文件中修改打包类型,将spring boot默认的<packaging>jar</packaging>修改为<packaging>war</packaging>形式;

2. 其次spring boot的web项目中内嵌tomcat服务器,所以如果我们想要发布war包到tomcat项目,要将spring boot中内嵌的tomcat包依赖排除,不然产生冲突,打开下面代码中的注释即可。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!--
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
    -->
</dependency>          


有一点想说的是,如果本地开发的时候依然想要使用spring boot内嵌tomcat进行调试,添加如下依赖即可:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>


3. spring boot发布jar包web程序的入口是main函数所在的类,使用@SpringBootApplication注解。但是如果war包发布至tomcat,需要增加 SpringBootServletInitializer 子类,并覆盖它的 configure 方法,或者直接将main函数所在的类继承 SpringBootServletInitializer 子类,并覆盖它的 configure 方法。代码举例如下
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
     
    @Override
    protected SpringApplicationBuilder configure(
            SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }
 
     
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}


以上就完成了spring boot项目打包war包的所有步骤,可以发布至tomcat7及其以上版本。

但是以上流程改造完spring boot打包war包发布至tomcat6版本之后,浏览器访问项目地址会给出404的错误?为什么呢,一头雾水,经过我一番查阅资料以及实验,得出以下结论,

首先spring boot支持的servlet容器如下,可以看出spring boot最低支持的servlet版本是3.0,但是tomcat6的servlet版本是2.5,这样的话上面的流程是无法支持tomcat6发布spring boot项目的,



但是又google了一番,发现已经有人在解决这个问题了,https://github.com/dsyer/spring-boot-legacy,


标题就表明了它是为了让spring boot支持servlet2.5,刚好解决我们的痛点,使用步骤如下:

1. pom.xml中添加spring-boot-legacy的依赖,
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-legacy</artifactId>
    <version>1.1.0.RELEASE</version>
</dependency>


2.手动替换web.xml文件。但是在发布war包中发现metricFilter提示空指针异常,我就简单粗暴的将filter过滤了,注释如下。 所要替换的web.xml文件的未知如下 : {工程目录}/src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>com.example.DemoApplication</param-value>
    </context-param>
 
    <listener>
        <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
    </listener>
 
<!--
    <filter>
        <filter-name>metricFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
 
    <filter-mapping>
        <filter-name>metricFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
-->
 
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextAttribute</param-name>
            <param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
</web-app>


完成以上两个步骤就可以让spring boot项目支持tomcat6的部署了,解决。

思考:spring boot封装带来了便利性,同时也带来了出问题的解决复杂度,如果不了解原始的spring web开发模式,出现问题很难解决。即使我现在解决了支持tomcat6的spring boot支持问题,但是不太明白解决的原理,filter出现空指针是为什么?所以深入一些原理性的东西,学习技术的基础性的东西非常重要。大家可以明白的可以解释解释2.5支持的原理,以及filter空指针的异常原因。

http://www.cnblogs.com/weixliu/p/6432342.html

把spring-boot项目部署到tomcat容器中
https://www.cnblogs.com/a8457013/p/7687820.html
分享到:
评论

相关推荐

    把spring boot项目发布tomcat容器(包含发布到tomcat6的方法)

    Spring Boot 项目发布到 Tomcat 容器(包含发布到 Tomcat6 的方法) 在本文中,我们将详细介绍如何将 Spring Boot 项目发布到 Tomcat 容器,包括发布到 Tomcat6 的方法。 首先,需要在 pom.xml 文件中修改打包类型...

    spring boot资料以及项目

    容器化部署,如Docker和Kubernetes,也是现代Spring Boot项目常见的部署方式,资料中可能包含相关指导。 总之,这份压缩包中的Spring Boot资料和项目实例是学习和提升Spring Boot技术的全面资源。通过深入学习和...

    如何把spring boot项目部署到tomcat容器中

    然而,有些场景下,如生产环境或需要与其他应用共享服务器时,可能需要将Spring Boot项目部署到独立的Tomcat容器中。本篇文章将详细讲解如何将Spring Boot项目部署到Tomcat。 首先,为了适应Tomcat容器,我们需要...

    59-Spring Boot内嵌Tomcat配置1

    内嵌的 Tomcat 容器是 Spring Boot 默认的 Web 服务器,使得我们可以无需额外配置即可运行 Java Web 应用。在本篇文章中,我们将探讨如何对 Spring Boot 内嵌的 Tomcat 进行个性化配置。 首先,Spring Boot 提供了 ...

    Spring Boot讲义.pdf

    Spring Boot是Spring项目中的一个子项目,它旨在简化Spring应用的初始搭建以及开发过程。它使用了特定的方式来进行配置,使得开发者能够快速启动和运行Spring应用程序,几乎不需要什么配置就可以快速启动和运行。...

    Spring Boot 2 Cookbook 第二版

    对于Web开发,Spring Boot的嵌入式Servlet容器如Tomcat和Jetty使得部署变得简单。书中会涵盖RESTful API设计、模板引擎(Thymeleaf、FreeMarker)以及WebSocket的使用。同时,你还将了解到Spring Security,它是...

    Spring Boot实战派(源码)

    - Spring Boot支持内嵌Tomcat、Jetty等Web服务器,无需额外部署,简化了开发流程。 4. **健康检查与Actuator** - Actuator提供了一组端点,用于监控和管理应用的健康状况、指标、日志等,是微服务治理的重要组件...

    十分钟上手spring boot

    - **嵌入式Servlet容器:**Spring Boot内置了Tomcat、Jetty等容器,无需额外部署。 - **依赖管理:**提供了一套统一的依赖版本管理方案,避免版本冲突问题。 - **生产就绪特性:**包括健康检查、监控等功能,方便...

    spring boot案列

    4. **内嵌式Servlet容器**:Spring Boot 可以内置Tomcat或Jetty等服务器,无需额外部署,极大地简化了开发和测试流程。 5. **Actuator**:提供了监控和管理应用的端点,如健康检查、指标展示、环境信息等,有助于...

    Spring-Boot-Reference-Guide, Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》.zip

    3. 内嵌式Servlet容器:Spring Boot支持内嵌Tomcat、Jetty或Undertow,无需额外部署WAR文件。 4. 健康检查:提供健康检查API,用于监控系统状态。 5. 配置文件:通过application.properties或application.yml进行...

    Spring Boot应用开发框架 v2.7.17.zip

    这可能包括如何使用Maven或Gradle初始化项目,配置应用主类,以及如何利用Spring Boot的内嵌Servlet容器(如Tomcat)启动Web应用。 对于计算机科学的学生来说,这个压缩包可以作为毕业设计论文的参考资源,他们可以...

    Spring Boot-实战

    Spring Boot的核心特性包括自动配置、内嵌Web服务器(如Tomcat或Jetty)、健康检查、Actuator等。自动配置是Spring Boot的一大亮点,它基于“约定优于配置”的原则,通过“spring-boot-starter”模块来引入特定功能...

    Spring Boot in Action 英文版

    Spring Boot还支持内嵌的Servlet容器,比如Tomcat、Jetty或Undertow,这意味着开发者可以不用部署到传统的WAR文件中,而是直接运行一个JAR文件,并且应用程序会启动内嵌的Servlet容器。这简化了部署过程,使得开发...

    Spring Boot启动过程(四)之Spring Boot内嵌Tomcat启动

    TomcatEmbeddedServletContainerFactory是Spring Boot中用于创建Tomcat内嵌容器的工厂类。在该类中,getEmbeddedServletContainer方法用于创建一个Tomcat实例,并将其作为内嵌容器返回。 四、getSelfInitializer...

    java maven工程 spring boot 学习源码

    Spring Boot通过内嵌的Servlet容器(如Tomcat或Jetty)简化了Web应用的搭建,使得开发者无需额外配置即可启动HTTP服务器。此外,Spring Boot提供了一种“约定优于配置”的原则,减少了大量XML配置文件的需求,转而...

    spring boot 项目框架

    3. **内嵌式服务器**:Spring Boot 可以内嵌 Tomcat 或 Jetty 服务器,这意味着你可以直接运行一个 Jar 包,而无需部署到外部容器。 4. **健康检查与 Actuator**:Spring Boot Actuator 提供了一套监控和管理应用的...

    Spring Boot面试题(92题)

    然而,Spring Boot在现有Spring框架的基础上构建,通过自动化配置和内置的Servlet容器,如Tomcat和Jetty,极大地减少了这些工作。 Spring Boot的核心优势在于它的简洁性和高效性。首先,它可以独立运行,无需打成...

    spring-boot实战PDF 完整版和随书源码.7z

    1. 自动配置:Spring Boot根据类路径中的依赖自动配置Spring容器,例如,如果你引入了`spring-boot-starter-web`模块,那么它将自动配置Tomcat服务器和Spring MVC。 2. 嵌入式服务器:Spring Boot支持内嵌Tomcat、...

    spring-boot深入浅出

    2. **内嵌服务器(Embedded Servers)**:Spring Boot支持内嵌Tomcat、Jetty或Undertow服务器,这样可以直接运行打包后的jar文件,而无需额外部署到外部容器,大大提高了开发效率。 3. **自动配置(Auto ...

Global site tag (gtag.js) - Google Analytics