一梆暖、 文章背景
在最近一個(gè)項(xiàng)目中,維護(hù)行里一個(gè)年代較為久遠(yuǎn)的單體項(xiàng)目掂骏,需要將項(xiàng)目打包放到的tomcat服務(wù)器下運(yùn)行轰驳,因?yàn)楫厴I(yè)就很少接觸單體項(xiàng)目,在這里記錄一下弟灼。
二滑废、 什么是tomcat
Tomcat是一個(gè)開源的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)行開發(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)模式使得開發(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類、配置文件裙顽、靜態(tài)資源等)打包在一起付燥。
WAR包是一種標(biāo)準(zhǔn)的部署格式,可以在Java Servlet容器中(如Tomcat愈犹、Jetty等)進(jìn)行部署和運(yùn)行键科。它提供了一種方便的方式來(lái)分發(fā)和部署Web應(yīng)用程序,使得開發(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)用程序的配置文件叁执、類文件和其他資源茄厘,而靜態(tài)資源(如HTML矮冬、CSS、JavaScript文件)通常位于WAR包的根目錄或者一個(gè)名為"webapp"的目錄下蚕断。
總而言之欢伏,WAR包是一種用于打包和部署Java Web應(yīng)用程序的文件格式,方便了應(yīng)用程序的分發(fā)和部署亿乳。
五硝拧、 war包和jar的區(qū)別
WAR包和JAR包是兩種不同的文件格式,用于打包和部署不同類型的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包沒有特定的目錄結(jié)構(gòu)要求鼓寺,可以根據(jù)需要自由組織文件。
- 部署方式不同:WAR包通常被部署到Java Servlet容器(如Tomcat勋磕、Jetty)中妈候,用于運(yùn)行Web應(yīng)用程序欠肾。而JAR包可以直接運(yùn)行截汪,或者作為依賴項(xiàng)被其他Java應(yīng)用程序引用括改。
- 依賴管理不同:JAR包可以包含Java類和資源文件扳缕,用于共享和復(fù)用代碼。它們可以作為庫(kù)被其他應(yīng)用程序引用算行,并通過(guò)構(gòu)建工具(如Maven旨怠、Gradle)進(jìn)行依賴管理捂掰。而WAR包通常包含完整的Web應(yīng)用程序贝椿,不會(huì)被其他應(yīng)用程序直接引用想括。
總而言之含潘,WAR包適用于打包和部署Java Web應(yīng)用程序煞躬,具有特定的目錄結(jié)構(gòu)和部署方式。而JAR包適用于打包和分發(fā)Java應(yīng)用程序的庫(kù)疤苹、組件或可執(zhí)行文件习勤,可以作為依賴項(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)目名稱。
<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依賴中移除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依賴党饮。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
- 在您的Spring Boot項(xiàng)目的啟動(dòng)類上,添加
extends SpringBootServletInitializer
并重寫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 {
plication.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)行播聪。
[圖片上傳失敗...(image-8e2e76-1693355454820)]
[圖片上傳失敗...(image-c432a7-1693355477023)]
- 訪問(wèn)服務(wù)朽基。192.168.xxx.xxx:8080/order/doc.html
七、 配置tomcat支持https
要配置Tomcat支持HTTPS离陶,您可以按照以下步驟進(jìn)行操作:
- 獲取SSL證書:您需要從可信任的證書頒發(fā)機(jī)構(gòu)(CA)或自簽名證書創(chuàng)建工具中獲取SSL證書和私鑰稼虎。通常,您會(huì)收到一個(gè)包含.crt和.key文件的證書文件枕磁。
- 將證書和私鑰文件復(fù)制到Tomcat服務(wù)器上的某個(gè)目錄中渡蜻,例如
/path/to/cert
。 - 打開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
為您的證書文件路徑传藏, keystorePass
為您的證書密碼腻暮, keystoreType
為證書類型(根據(jù)您的證書類型進(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)確保在瀏覽器中信任您的證書,以避免安全警告卦碾。
八铺坞、 隱藏tomcat的版本信息
要隱藏Tomcat版本信息起宽,您可以按照以下步驟進(jìn)行操作:
- 打開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)的用戶通過(guò)其他方式確定Tomcat的版本。