SpringBoot項(xiàng)目打包部署到Tomcat的操作流程
一、 文章背景
在最近一個(gè)項(xiàng)目中,維護(hù)行里一個(gè)年代較為久遠(yuǎn)的單體項(xiàng)目,需要將項(xiàng)目打包放到的tomcat服務(wù)器下運(yùn)行,因?yàn)楫厴I(yè)就很少接觸單體項(xiàng)目,在這里記錄一下。
二、 什么是tomcat
Tomcat是一個(gè)開(kāi)源的Java Servlet容器,它實(shí)現(xiàn)了Java Servlet和JavaServer Pages(JSP)規(guī)范,用于支持在Java環(huán)境中運(yùn)行Web應(yīng)用程序。Tomcat是Apache軟件基金會(huì)的一個(gè)項(xiàng)目,它提供了一個(gè)可靠且高性能的服務(wù)器環(huán)境,用于部署和運(yùn)行Java Web應(yīng)用程序。Tomcat可以作為一個(gè)獨(dú)立的Web服務(wù)器運(yùn)行,也可以與其他HTTP服務(wù)器(如Apache HTTP服務(wù)器)配合使用,以提供更強(qiáng)大的功能。
三、 什么是單體項(xiàng)目
單體項(xiàng)目是一種傳統(tǒng)的軟件架構(gòu)模式,它將一個(gè)完整的應(yīng)用程序作為一個(gè)單一的、獨(dú)立的單元進(jìn)行開(kāi)發(fā)、部署和運(yùn)行。在單體項(xiàng)目中,所有的功能模塊和業(yè)務(wù)邏輯都集中在一個(gè)應(yīng)用程序中,通常使用單一的數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)。
在單體項(xiàng)目中,應(yīng)用程序的不同模塊之間通過(guò)函數(shù)調(diào)用或者直接的方法調(diào)用進(jìn)行通信。這種緊密耦合的架構(gòu)模式使得開(kāi)發(fā)和測(cè)試相對(duì)簡(jiǎn)單,但也存在一些問(wèn)題。隨著應(yīng)用程序的規(guī)模不斷增大,單體項(xiàng)目往往變得龐大且復(fù)雜,導(dǎo)致代碼難以維護(hù)和擴(kuò)展。此外,由于所有的功能都集中在一個(gè)應(yīng)用程序中,當(dāng)某個(gè)模塊發(fā)生故障時(shí),整個(gè)應(yīng)用程序可能會(huì)受到影響。
隨著微服務(wù)架構(gòu)的興起,單體項(xiàng)目逐漸被拆分為多個(gè)小型、獨(dú)立的服務(wù),每個(gè)服務(wù)負(fù)責(zé)一個(gè)特定的業(yè)務(wù)功能。這種架構(gòu)模式可以提供更好的可擴(kuò)展性、可維護(hù)性和可靠性。
四、 什么是war包
WAR(Web Application Archive)是一種用于打包和部署Java Web應(yīng)用程序的文件格式。它是一種特殊的JAR(Java Archive)文件,用于將Web應(yīng)用程序的相關(guān)文件(如HTML、JSP、Java類(lèi)、配置文件、靜態(tài)資源等)打包在一起。
WAR包是一種標(biāo)準(zhǔn)的部署格式,可以在Java Servlet容器中(如Tomcat、Jetty等)進(jìn)行部署和運(yùn)行。它提供了一種方便的方式來(lái)分發(fā)和部署Web應(yīng)用程序,使得開(kāi)發(fā)人員可以將應(yīng)用程序打包成一個(gè)獨(dú)立的文件,然后將其部署到目標(biāo)服務(wù)器上。
在部署WAR包時(shí),Servlet容器會(huì)將其解壓并將其中的文件放置到適當(dāng)?shù)奈恢?,然后啟?dòng)Web應(yīng)用程序。通常,WAR包中的WEB-INF目錄包含了應(yīng)用程序的配置文件、類(lèi)文件和其他資源,而靜態(tài)資源(如HTML、CSS、JavaScript文件)通常位于WAR包的根目錄或者一個(gè)名為"webapp"的目錄下。
總而言之,WAR包是一種用于打包和部署Java Web應(yīng)用程序的文件格式,方便了應(yīng)用程序的分發(fā)和部署。
五、 war包和jar的區(qū)別
WAR包和JAR包是兩種不同的文件格式,用于打包和部署不同類(lèi)型的Java應(yīng)用程序。
- 用途不同:WAR包主要用于打包和部署Java Web應(yīng)用程序,而JAR包主要用于打包和分發(fā)Java應(yīng)用程序的庫(kù)、組件或可執(zhí)行文件。
- 目錄結(jié)構(gòu)不同:WAR包通常包含一個(gè)特定的目錄結(jié)構(gòu),其中包括WEB-INF目錄和靜態(tài)資源文件,用于部署Web應(yīng)用程序。而JAR包沒(méi)有特定的目錄結(jié)構(gòu)要求,可以根據(jù)需要自由組織文件。
- 部署方式不同:WAR包通常被部署到Java Servlet容器(如Tomcat、Jetty)中,用于運(yùn)行Web應(yīng)用程序。而JAR包可以直接運(yùn)行,或者作為依賴(lài)項(xiàng)被其他Java應(yīng)用程序引用。
- 依賴(lài)管理不同:JAR包可以包含Java類(lèi)和資源文件,用于共享和復(fù)用代碼。它們可以作為庫(kù)被其他應(yīng)用程序引用,并通過(guò)構(gòu)建工具(如Maven、Gradle)進(jìn)行依賴(lài)管理。而WAR包通常包含完整的Web應(yīng)用程序,不會(huì)被其他應(yīng)用程序直接引用。
總而言之,WAR包適用于打包和部署Java Web應(yīng)用程序,具有特定的目錄結(jié)構(gòu)和部署方式。而JAR包適用于打包和分發(fā)Java應(yīng)用程序的庫(kù)、組件或可執(zhí)行文件,可以作為依賴(lài)項(xiàng)被其他應(yīng)用程序引用。
六、 SpringBoot打包成war包
要將Spring Boot項(xiàng)目打包為WAR(Web Application Archive)文件,您可以按照以下步驟進(jìn)行操作:
- 在您的Spring Boot項(xiàng)目的pom.xml文件中,將打包方式設(shè)置為war。在
<packaging>
標(biāo)簽中添加以下內(nèi)容。
<packaging>war</packaging>
- 在pom.xml文件中將build節(jié)點(diǎn)中的finalName修改為server.context-path中的路徑。就是項(xiàng)目名稱(chēng)。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <!--打包后的項(xiàng)目名--> <finalName>order</finalName> </build>
- 在spring-boot-starter依賴(lài)中移除tomcat模塊。
<dependency> ?? ?<groupId>org.springframework.boot</groupId> ?? ?<artifactId>spring-boot-starter</artifactId> ?? ??? ?<exclusions> ?? ??? ??? ?<exclusion> ?? ??? ??? ??? ?<groupId>org.springframework.boot</groupId> ?? ??? ??? ??? ?<artifactId>spring-boot-starter-tomcat</artifactId> ?? ??? ??? ?</exclusion> ?? ??? ?</exclusions> </dependency>
- 添加servlet依賴(lài)。
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency>
- 在您的Spring Boot項(xiàng)目的啟動(dòng)類(lèi)上,添加
extends SpringBootServletInitializer
并重寫(xiě)configure
方法。這將使您的項(xiàng)目能夠在Servlet容器中運(yùn)行。示例代碼如下:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class YourApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(YourApplication.class); } public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
- 執(zhí)行Maven的打包命令,將項(xiàng)目打包為WAR文件。在命令行中,進(jìn)入項(xiàng)目的根目錄,然后運(yùn)行以下命令。這將在項(xiàng)目的
target
目錄下生成一個(gè)WAR文件。
mvn clean package
- 現(xiàn)在,您可以將生成的WAR文件部署到Servlet容器(如Tomcat)中運(yùn)行。
- 訪問(wèn)服務(wù)。192.168.xxx.xxx:8080/order/doc.html
七、 配置tomcat支持https
要配置Tomcat支持HTTPS,您可以按照以下步驟進(jìn)行操作:
- 獲取SSL證書(shū):您需要從可信任的證書(shū)頒發(fā)機(jī)構(gòu)(CA)或自簽名證書(shū)創(chuàng)建工具中獲取SSL證書(shū)和私鑰。通常,您會(huì)收到一個(gè)包含.crt和.key文件的證書(shū)文件。
- 將證書(shū)和私鑰文件復(fù)制到Tomcat服務(wù)器上的某個(gè)目錄中,例如
/path/to/cert
。 - 打開(kāi)Tomcat的配置文件
server.xml
,該文件位于Tomcat安裝目錄的conf
文件夾中。 - 在
server.xml
文件中,找到以下Connector配置(可能會(huì)有多個(gè)Connector配置):
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- 在該Connector配置的上方,添加一個(gè)新的Connector配置,用于HTTPS連接。示例如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="/path/to/cert/your_certificate.crt" keystorePass="your_keystore_password" keystoreType="PKCS12" />
確保按照實(shí)際情況修改 keystoreFile
為您的證書(shū)文件路徑, keystorePass
為您的證書(shū)密碼, keystoreType
為證書(shū)類(lèi)型(根據(jù)您的證書(shū)類(lèi)型進(jìn)行修改)。 6. 保存并關(guān)閉 server.xml
文件。 7. 啟動(dòng)或重新啟動(dòng)Tomcat服務(wù)器。
現(xiàn)在,Tomcat將在8443端口上啟動(dòng)一個(gè)HTTPS連接,您可以使用https://localhost:8443 訪問(wèn)您的應(yīng)用程序。請(qǐng)確保在瀏覽器中信任您的證書(shū),以避免安全警告。
八、 隱藏tomcat的版本信息
要隱藏Tomcat版本信息,您可以按照以下步驟進(jìn)行操作:
- 打開(kāi)Tomcat的配置文件
server.xml
,該文件位于Tomcat安裝目錄的conf
文件夾中。 - 在
server.xml
文件中,找到以下配置:
<Server port="8005" shutdown="SHUTDOWN">
- 在該配置的上方,添加一個(gè)新的配置,用于隱藏版本信息。示例如下:
<Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
- 保存并關(guān)閉
server.xml
文件。 - 啟動(dòng)或重新啟動(dòng)Tomcat服務(wù)器。
現(xiàn)在,Tomcat將不再在HTTP響應(yīng)頭中顯示版本信息。請(qǐng)注意,這只會(huì)隱藏版本信息,但無(wú)法阻止有經(jīng)驗(yàn)的用戶(hù)通過(guò)其他方式確定Tomcat的版本。
以上就是SpringBoot項(xiàng)目打包部署到Tomcat的操作流程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot項(xiàng)目打包到Tomcat的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- vue+springboot項(xiàng)目上傳部署tomcat的方法實(shí)現(xiàn)
- 淺談springboot內(nèi)置tomcat和外部獨(dú)立部署tomcat的區(qū)別
- vue打包部署到springboot并通過(guò)tomcat運(yùn)行的操作方法
- SpringBoot項(xiàng)目打包成war包并部署在tomcat上運(yùn)行的操作步驟
- SpringBoot中jar打包并部署到Tomcat
- 詳解springboot項(xiàng)目帶Tomcat和不帶Tomcat的兩種打包方式
- SpringBoot項(xiàng)目打包發(fā)布到外部tomcat(出現(xiàn)各種異常的解決)
- springboot項(xiàng)目打包并部署到Tomcat上及報(bào)錯(cuò)處理方案
相關(guān)文章
使用stream的Collectors.toMap()方法常見(jiàn)的問(wèn)題及解決
這篇文章主要介紹了使用stream的Collectors.toMap()方法常見(jiàn)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03在SSM中配置了事務(wù)控制但沒(méi)生效的問(wèn)題
這篇文章主要介紹了在SSM中配置了事務(wù)控制但沒(méi)生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02@FeignClient注解中屬性contextId的使用說(shuō)明
這篇文章主要介紹了@FeignClient注解中屬性contextId的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot項(xiàng)目中建議關(guān)閉Open-EntityManager-in-view原因
這篇文章主要為大家解析了在Spring Boot項(xiàng)目中建議關(guān)閉Open-EntityManager-in-view的原因示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02java代碼實(shí)現(xiàn)C盤(pán)文件統(tǒng)計(jì)工具
今天周末,給大家分享基于java代碼實(shí)現(xiàn)C盤(pán)文件統(tǒng)計(jì)工具,在這小編使用的版本是Maven-3.9.9,jdk1.8,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01超詳細(xì)的Spring Boot入門(mén)筆記(總結(jié))
本篇文章主要介紹了超詳細(xì)的Spring Boot入門(mén)筆記(總結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Mybatis + js 實(shí)現(xiàn)下拉列表二級(jí)聯(lián)動(dòng)效果
這篇文章給大家介紹基于Mybatis + js 實(shí)現(xiàn)下拉列表二級(jí)聯(lián)動(dòng)效果,實(shí)現(xiàn)代碼分為前端界面實(shí)現(xiàn)和后端處理方法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06