当前位置: 首页 > news >正文

Spring Boot教程之二十五: 使用 Tomcat 部署项目

Spring Boot – 使用 Tomcat 部署项目

Spring Boot 是一个基于微服务的框架,在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。如今,它正成为开发人员的最爱,因为它是一个快速可用于生产的环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置。

Tomcat 是一个非常流行的 Java Servlet 容器。Tomcat 是默认的 Spring Boot 服务器,它可以在同一个应用程序中管理多个应用程序,从而避免在单个应用程序中为每个应用程序进行多次设置。

在本文中,我们将创建一个简单的 Spring Boot 应用程序,其中我们将使用 Tomcat 服务器部署该应用程序。

Spring Boot 上的项目部署流程 

在 Tomcat Server 上部署 Spring Boot 应用程序涉及三个步骤:

  1. 创建示例 Spring Boot 应用程序
  2. 创建 Spring Boot WAR 的方法
  3. 将 WAR 部署到 Tomcat – 最好需要更高版本的 Tomcat。

步骤 1:为 Tomcat 创建示例 Spring Boot 应用程序

这是一个 Spring Boot Web 应用程序项目,即需要将项目部署到 Tomcat 上。该项目可以创建为基于 Maven 的项目,因此我们可以在 pom.xml 文件中指定所需的依赖项。

pom.xml->Configurations can be specified in a Maven project via pom.xml

由于项目需要使用 Tomcat 部署,因此必须将其打包为“WAR”  Web 应用程序资源或 Web 应用程序存档)。

基本上,pom.xml 应该具有与 spring boot 相关的依赖项,例如

  • spring-boot-starter-parent
  • spring-boot-starter-web
  • spring-boot-starter-tomcat 及其范围设置为提供“geeks-web-services”应该是 pom.xml 中“WAR”文件的名称

示例 1:

  • XML

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

 

    <groupId>com.geeksforgeeks</groupId>

    <artifactId>spring-boot-war-deployment-example-on-tomcat</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <!-- As we need to deploy the project as WAR, this is needed -->

    <packaging>war</packaging>

 

    <name>SpringBootWarDeploymentOnTomcatServer</name>

    <description>Demo project for Spring Boot deployable on Tomcat</description>

 

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.2.2.RELEASE</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

 

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <java.version>1.8</java.version>

    </properties>

    <dependencies>

        <!-- Spring web dependency -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

            </dependency>

        <!--Servlet container has to be set as provided -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-tomcat</artifactId>

            <scope>provided</scope>

        </dependency>

     

 

    <build>

    <!-- Our final war file name is geeks-web-services -->

    <finalName>geeks-web-services</finalName>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>    

         

    </build>

 

 

</project>

需要一个控制器类,通过它我们能够以 GET 方法或 POST 方法调用服务。作为示例,让我们看“SampleRestControllerExample.java”,它包含两个“ GET ”方法

编写了两种方法,提供静态文本作为输出。 

由于这是一个简单的例子,我们只需展示一下调用“geeks-web-services/hello”时显示的内容,Hello Geek,这是一个简单的问候消息,祝您有个美好的一天。

调用“geeks-web-services/greet”时显示Hello Geek,通过减少源代码,可以快速轻松地开发基于Spring的应用程序。

@RestController 是控制器的专门版本。它包括 @Controller 和 @ResponseBody 注释,从而简化了控制器实现。

示例 2: SampleRestControllerExample.java

  • Java

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

 

// Annotation

@RestController

// Class

public class SampleRestControllerExample {

    @GetMapping("/hello")

    // Easy method just to print encouraging and consoling

    // words

    public String hello()

    {

        return "Hello Geek, this is a simple hello message to take care and have a nice day.";

    }

 

    @GetMapping("/greet")

    // Easy method just to print greeting message by saying

    // spring-based applications

    public String greet()

    {

        return "Hello Geek, Fast and easy development can be possible on Spring-based applications by reducing source code;.";

    }

}

第 2 步:创建 Spring Boot WAR 的方法

创建 Spring Boot WAR 有 3 种方法:

  • “Main” 类应该包含主类中的“extends SpringBootServletInitializer” 类。
  • “嵌入式 servlet 容器应标记为已提供。
  • 打包应该是 WAR

SpringBootWarDeploymentOnTomcatServer.java 是我们的主类

例子:

  • Java

// Java Program to Illustrate SpringBoot WarDeployment

// On Tomcat Server

 

// Importing required classes

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

// Annotation

@SpringBootApplication

 

// Class

public class SpringBootWarDeploymentOnTomcatServer   

  extends SpringBootServletInitializer {   

  @Override   

  // Configuring method has to be overridden   

  protected SpringApplicationBuilder   

    configure(SpringApplicationBuilder application){       

    return application.sources(           

      SpringBootWarDeploymentOnTomcatServer.class);   

  }   

   

  // Method 2   

  // Main driver method   

  public static void main(String[] args){       

    SpringApplication.run(           

      SpringBootWarDeploymentOnTomcatServer.class,           

      args);   

  }

}

我们可以使用命令行运行 Maven 步骤,

mvn clean install -X

让我们通过图像来看一下项目结构和目标文件夹:

当WAR文件创建成功后,控制台中会显示WAR文件路径以及“BUILD SUCCESS”的信息,如下图所示:

WAR 文件已创建

步骤 3:将 WAR 部署到 Tomcat 

如果之前没有安装Apache Tomcat Server,则必须安装。最好使用更高版本的 tomcat。例如,我们使用 tomcat 版本 9.0.x。

要使用合适的 tomcat 版本和 java 版本,检查HTML 文件会很有帮助。在上一步中,我们得到了“geek-web-services.war”,必须将其复制到 tomcat 的“webapps”文件夹下。

现在,打开命令提示符并指向 tomcat 位置的 bin 文件夹, 

需要从 bin 文件夹提供“startup.bat”

该图显示 Spring Boot 已启动

而且我们的 war 文件也部署在 tomcat 中。下面的截图证实了这一点:

geek-web-services war 文件已部署

我们可以通过在浏览器中执行以下 URL 来测试相同内容:

geek-web-services/hello 输出

第二个输出:

geek-web-services/greetoutput

最后:

如上所述,Spring Boot 项目可以在 Tomcat 中部署。请记住以下列出的一些要点:

  • 默认情况下,Spring Boot 1.4.4.RELEASE 需要 Java 7 和 Spring Framework 4.3.6.RELEASE 或更高版本
  • 更高版本的Tomcat将有助于部署spring-boot应用程序。

相关文章:

Spring Boot教程之二十五: 使用 Tomcat 部署项目

Spring Boot – 使用 Tomcat 部署项目 Spring Boot 是一个基于微服务的框架&#xff0c;在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。如今&#xff0c;它正成为开发人员的最爱&#xff0c;因为它是一个…...

解决 Git 默认不区分文件名大小写的问题

不得不说 Git 默认不区分文件名大小写真是一个大坑&#xff0c;由于之前的项目目录比较乱&#xff0c;项目下的文件夹命名都不规范&#xff0c;这两天一直在整理&#xff0c;然后今天从服务器将项目重新 clone 下来后发现&#xff0c;之前将所有文件名首字母改成大写的改动全部…...

python学opencv|读取图像(十二)BGR图像转HSV图像

【1】引言 前述已经学习了opencv中图像BGR相关知识&#xff0c;文章链接包括且不限于下述&#xff1a; python学opencv|读取图像&#xff08;六&#xff09;读取图像像素RGB值_opencv读取灰度图-CSDN博客 python学opencv|读取图像&#xff08;七&#xff09;抓取像素数据顺利…...

信息安全工程师-选择题考点总结

密码理论知识 基础理论 一个密码系统至少由明文、密文、加密算法、解密算法和密钥五个部分组成,而其安全性是由密钥决定的。 按照密钥特征的不同,密码体制分为:对称密码体制和非对称密码体制。 按照对明文加密方式的不同,密码体制分为:流密码和分组密码。 非对称密码体…...

重学SpringBoot3-WebClient配置与使用详解

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-WebClient配置与使用详解 1. 简介2. 环境准备2.1 依赖配置 3. WebClient配置3.1 基础配置3.2 高级配置3.3 retrieve()和exchange()区别 4. 使用示例4.1 …...

springBoot中的日志级别在哪里配置

在Spring Boot中&#xff0c;日志级别的配置可以通过多种方式来实现&#xff0c;主要包括在配置文件中设置、使用自定义的logback配置文件&#xff0c;以及在代码中动态配置等。以下是一些具体的配置方法&#xff1a; 一、在配置文件中设置日志级别 Spring Boot默认使用appli…...

统一身份安全管理体系的业务协同能力

随着集团企业数字化组织转型深化&#xff0c;各组织机构间业务协同程度提升。研发业务协同、数据驱动生产决策等数字化生产协作工作体系得以展开&#xff0c;企业内数据流转加快。企业对统一身份安全管理体系的业务协同管理和支撑能力要求提升&#xff1a; 统一身份管理流程需…...

JAVA课堂笔记23(IO流 (java.io包中))

第五章&#xff1a;IO流 &#xff08;java.io包中&#xff09; 三、字符流 1. 字符流的父类(抽象类)&#xff1a; Reader&#xff1a;字符输入流 对应的操作为读操作 功能方法&#xff1a;read方法 Writer:字符输出流 对应的操作为写操作 功能方法&#xff1a;write方法 …...

C# DLT645 97/07数据采集工具

电表模拟器 97协议测试 07协议测试 private void btnSend_Click(object sender, EventArgs e) {string addr txtAddr.Text.Trim();string data txtDataFlg.Text.Trim();byte control 0x01;switch (cmbControl.SelectedIndex){case 0: control (byte)0x01; break;// 97协议c…...

中后台管理信息系统:Axure12套高效原型设计框架模板全解析

中后台管理信息系统作为企业内部管理的核心支撑&#xff0c;其设计与实现对于提升企业的运营效率与决策能力具有至关重要的作用。为了满足多样化的中后台管理系统开发需求&#xff0c;一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨中后台管理信息系统通用原型方案…...

Reactor 响应式编程(第四篇:Spring Security Reactive)

系列文章目录 Reactor 响应式编程&#xff08;第一篇&#xff1a;Reactor核心&#xff09; Reactor 响应式编程&#xff08;第二篇&#xff1a;Spring Webflux&#xff09; Reactor 响应式编程&#xff08;第三篇&#xff1a;R2DBC&#xff09; Reactor 响应式编程&#xff08…...

JVM 双亲委派模型以及垃圾回收机制

目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程&#xff0c;其实就是一个 JVM 虚拟机。 而进程是…...

Delphi编写涂鸦桌面的小程序

用Delphi编写涂鸦桌面的小程序&#xff0c;类似于腾讯会议中的画板功能的实现。这里用Delphi实现代码给大家提供一些思路&#xff1b; 首先&#xff0c;新建一个Application&#xff0c;将Form1的WindowState设为wsMaximized&#xff0c;BorderStyle设为bsNone。这样做的目的就…...

智星云技术文档:GPU测速教程

安装gpu burn git clone https://github.com/wilicc/gpu-burn cd gpu-burn/ make测试 ./gpu_burn 60100.0% procd: 14280 (7373 Gflop/s) - 13390 (6997 Gflop/s) - 15912 (7110 Gflop/s) - 13184 (7055 Gflop/s) - 13464 (7369 Gflop/s) - 13974 (7351 Gflop/s) - 16626 (7…...

《Kali Linux 软件源更换攻略:优化软件获取与系统更新》

KALI为什么要换源 速度提升 Kali Linux 默认的软件源服务器通常位于国外。在从这些国外源下载软件包、更新系统时&#xff0c;会受到网络带宽、网络延迟等因素的限制。例如&#xff0c;在中国&#xff0c;连接到国外服务器的网络速度可能较慢&#xff0c;尤其是在下载大型软件…...

C# 在dataview可以直接增删改查mysql数据库

C# 在dataview可以直接增删改查mysql数据库 首先&#xff0c;确保你的项目中已经安装了MySql.Data。你可以通过NuGet包管理器安装它&#xff1a; Install-Package MySql.Data -Version 8.0.28using System; using System.Data; using MySql.Data.MySqlClient;public class My…...

C#—泛型约束

C#—泛型约束 概念&#xff1a; 泛型约束就是告知编译器类型参数必须具备的功能。 在没有任何约束的情况下&#xff0c;类型参数可以是任何类型。 编译器只能假定 System.Object 的成员&#xff0c;它是任何 .NET 类型的最终基类。当分配给泛型的类型参数不满足约束的类型时&…...

MeiliSearch:一款轻量级开源搜索引擎

Meilisearch 是由 Meili &#xff08;一家总部位于法国的软件开发公司&#xff09;创建的搜索引擎&#xff0c;目前在 Github 上有 47.9k stars。 Meillisearch 具备以下特色功能&#xff08;ChatGPT-4o 翻译&#xff09;&#xff1a; 混合搜索&#xff1a;结合语义搜索和全文…...

Ansible playbook 详解与实战操作

一、概述 playbook 与 ad-hoc 相比,是一种完全不同的运用 ansible 的方式&#xff0c;类似与 saltstack 的 state 状态文件。ad-hoc 无法持久使用&#xff0c;playbook 可以持久使用。 playbook 是由一个或多个 play 组成的列表&#xff0c;play 的主要功能在于将事先归并为一…...

青少年夏令营管理系统的设计与开发(社团管理)(springboot+vue)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...