Tomcat與Netty的使用比較
Tomcat介紹
Tomcat是一個免費(fèi)的、開放源代碼的Web應(yīng)用服務(wù)器,是Apache軟件基金會項目中的一個核心項目。它由Apache、Sun和其他一些公司及個人共同開發(fā)而成,深受Java愛好者的喜愛,是一款比較流行的Web應(yīng)用服務(wù)器。
Tomcat由一系列的組件構(gòu)成,其中核心的組件有三個:
web容器:完成web服務(wù)器的功能。servlet容器:名字為catalina,用于處理Servlet代碼。jsp容器:用于將jsp動態(tài) 網(wǎng)頁翻譯成Servlet代碼。
因此,Tomcat是web應(yīng)用服務(wù)器,也是一個Servlet/JSP容器。作為Servlet容器,Tomcat負(fù)責(zé)處理客戶請求,把請求傳送給Servlet,并將Servlet的響應(yīng)傳送回給客戶。在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下,Tomcat被普遍使用,是開發(fā)和調(diào)試JSP程序的首選。

Tomcat支持的協(xié)議
Tomcat支持的協(xié)議很多,主要包括如下的協(xié)議
- HTTP/1.1 : Tomcat對HTTP/1.1的支持體現(xiàn)在持久連接、請求和響應(yīng)的處理、虛擬主機(jī)支持、請求的路由和處理、錯誤處理和日志記錄以及兼容性和向后兼容性等方面。這些功能使得Tomcat能夠作為一款可靠的Web服務(wù)器,為使用HTTP/1.1協(xié)議的應(yīng)用提供良好的支持。
- HTTP/2.0 :Tomcat從8.5版本開始支持HTTP/2.0協(xié)議。HTTP/2.0協(xié)議在傳輸方面進(jìn)行了重要改進(jìn),包括采用二進(jìn)制格式傳輸數(shù)據(jù)而非HTTP/1.1的文本格式,支持服務(wù)器推送等。Tomcat對HTTP/2.0的支持主要通過移除SPDY/2的相關(guān)功能實現(xiàn),因為HTTP/2.0與SPDY雖然有所不同,但兩者之間存在一些相似之處。在HTTP/2.0中,一個基本的協(xié)議單元是幀,這與TCP中的數(shù)據(jù)包概念相似。
- AJP :在Tomcat中,AJP協(xié)議主要用于連接Apache HTTP服務(wù)器和其他反向代理服務(wù)器,實現(xiàn)Web服務(wù)器和Servlet容器之間的通信。通過AJP連接器(AJP Connector),Tomcat可以與支持AJP協(xié)議的Web服務(wù)器進(jìn)行集成,提供更好的性能和擴(kuò)展性
Tomcat的優(yōu)缺點
- Tomcat的優(yōu)點主要包括:
- 輕量級和易部署:Tomcat是一個輕量級的服務(wù)器,具有較小的體積和簡單的配置,使得它易于部署和管理。
- 開放源代碼:Tomcat是開源的,這意味著用戶可以免費(fèi)獲取和使用它,并根據(jù)需要對其進(jìn)行修改。
- 穩(wěn)定性好:Tomcat經(jīng)過長時間的發(fā)展和廣泛的應(yīng)用,已經(jīng)證明了其穩(wěn)定性和可靠性。
- 支持Servlet和JSP:Tomcat是一個符合Java Servlet和JavaServer Pages技術(shù)規(guī)范的實現(xiàn),可以運(yùn)行基于Servlet和JSP的Web應(yīng)用程序。
- 支持多種應(yīng)用:Tomcat不僅可以作為Web服務(wù)器運(yùn)行,還可以作為獨立的應(yīng)用服務(wù)器運(yùn)行,支持多種應(yīng)用和框架。
- Tomcat也有一些缺點:
- 內(nèi)存占用較大:相較于一些其他的Web服務(wù)器,Tomcat的內(nèi)存占用較大,可能會影響性能。
- 線程數(shù)限制:Tomcat默認(rèn)的線程數(shù)是有限制的,這可能會影響到并發(fā)訪問的性能。
- 安全性:雖然Tomcat已經(jīng)進(jìn)行了安全配置,但用戶仍需要采取額外的安全措施來保護(hù)自己的應(yīng)用程序和數(shù)據(jù)。
- 更新和維護(hù):由于Tomcat是開源的,因此需要用戶自行負(fù)責(zé)更新和維護(hù)。
Netty介紹
Netty是由JBOSS提供的一個java開源框架,現(xiàn)為Github上的獨立項目。Netty提供異步的、事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶端程序。
具體來說,Netty是一個基于NIO的客戶、服務(wù)器端的編程框架,使用Netty可以確保快速和簡單的開發(fā)出一個網(wǎng)絡(luò)應(yīng)用,例如實現(xiàn)了某種協(xié)議的客戶、服務(wù)端應(yīng)用。Netty相當(dāng)于簡化和流線化了網(wǎng)絡(luò)應(yīng)用的編程開發(fā)過程,例如:基于TCP和UDP的socket服務(wù)開發(fā)。 “快速”和“簡單”并不用產(chǎn)生維護(hù)性或性能上的問題。Netty是一個吸收了多種協(xié)議(包括FTP、SMTP、HTTP等各種二進(jìn)制文本協(xié)議)的實現(xiàn)經(jīng)驗,并經(jīng)過相當(dāng)精心設(shè)計的項目。最終,Netty成功的找到了一種方式,在保證易于開發(fā)的同時還保證了其應(yīng)用的性能,穩(wěn)定性和伸縮性。
此外,Netty整合了網(wǎng)絡(luò)編程、多線程處理和并發(fā)等多個領(lǐng)域,極大地簡化了網(wǎng)絡(luò)開發(fā)的流程。 Netty本質(zhì)是一個NIO框架,適用于服務(wù)器通訊相關(guān)的多種應(yīng)用場景,它能夠快速和輕松地開發(fā)網(wǎng)絡(luò)應(yīng)用程序,如協(xié)議服務(wù)器和客戶端。它極大地簡化了TCP和UDP套接字服務(wù)器等網(wǎng)絡(luò)編程。

Netty支持的協(xié)議
Netty支持多種協(xié)議,包括但不限于:
- TCP/UDP:Netty提供了基于NIO的TCP和UDP編程框架,可以用來構(gòu)建高性能、高可用性的網(wǎng)絡(luò)應(yīng)用。
- HTTP/HTTPS:Netty提供了HTTP/HTTPS編程框架,可以用來開發(fā)Web服務(wù)器和客戶端。
- WebSocket:Netty提供了WebSocket編程框架,可以用來實現(xiàn)雙向通信應(yīng)用程序,如聊天室等。
- SPDY/HTTP2:Netty提供了SPDY和HTTP2編程框架,可以用來實現(xiàn)高效的Web應(yīng)用程序。
- MQTT/CoAP:Netty提供了MQTT和CoAP編程框架,可以用來構(gòu)建IoT應(yīng)用程序。
此外,Netty還支持各種二進(jìn)制和文本協(xié)議,如FTP、SMTP等。這些協(xié)議都是通過Netty的ChannelHandler來處理的,用戶只需要根據(jù)業(yè)務(wù)需求實現(xiàn)對應(yīng)的ChannelHandler即可。
Netty的優(yōu)點和缺點
- Netty的優(yōu)點主要包括:
- API使用簡單,開發(fā)門檻低。
- 功能強(qiáng)大,預(yù)置了多種編解碼功能,支持多種主流協(xié)議。
- 定制能力強(qiáng),可以通過ChannelHandler對通信框架進(jìn)行靈活地擴(kuò)展。
- 性能高,通過與其他業(yè)界主流的NIO框架對比,Netty的綜合性能最優(yōu)。
- 成熟、穩(wěn)定,Netty修復(fù)了已經(jīng)發(fā)現(xiàn)的所有JDK NIO BUG,業(yè)務(wù)開發(fā)人員不需要再為NIO的BUG而煩惱。
- 社區(qū)活躍,版本迭代周期短,發(fā)現(xiàn)的BUG可以被及時修復(fù),同時,更多的新功能會加入。
- 經(jīng)歷了大規(guī)模的商業(yè)應(yīng)用考驗,質(zhì)量得到驗證。 在互聯(lián)網(wǎng)、大數(shù)據(jù)、網(wǎng)絡(luò)游戲、企業(yè)應(yīng)用、電信軟件等眾多行業(yè)得到成功商用,證明了它已經(jīng)完全能夠滿足不同行業(yè)的商業(yè)應(yīng)用了。
Tomcat和Netty的區(qū)別
Tomcat和Netty在以下方面存在一些區(qū)別:
- 作用:Tomcat是Servlet容器,可以視為Web服務(wù)器,而Netty是異步事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用于簡化網(wǎng)絡(luò)編程,例如TCP和UDP套接字服務(wù)器。
- 協(xié)議:Tomcat是基于HTTP協(xié)議的Web服務(wù)器,而Netty能通過編程自定義各種協(xié)議,因為Netty本身自己能編碼/解碼字節(jié)流,所有Netty可以實現(xiàn)HTTP服務(wù)器、FTP服務(wù)器、UDP服務(wù)器、RPC服務(wù)器、WebSocket服務(wù)器、Redis的Proxy服務(wù)器、MySQL的Proxy服務(wù)器等等。
- 性能:雖然Tomcat和Netty在某些方面都有較好的性能,但Netty的性能更高。Tomcat從6.x開始就支持了nio模式,并且后續(xù)還有arp模式——一種通過jni調(diào)用apache網(wǎng)絡(luò)庫的模式,相比于舊的bio模式,并發(fā)性能得到了很大提高。而Netty是否比Tomcat性能更高,則要取決于Netty程序作者的技術(shù)實力。
Tomcat和Netty在作用、協(xié)議和性能方面存在一些區(qū)別。用戶可以根據(jù)自己的需求選擇合適的工具。
選擇Tomcat還是Netty,主要取決于具體需求。
如果需求是構(gòu)建高性能、高并發(fā)的網(wǎng)絡(luò)應(yīng)用,并且需要實現(xiàn)自定義協(xié)議,那么Netty可能更適合。因為Netty的異步、事件驅(qū)動的設(shè)計模式能更好地應(yīng)對高并發(fā)場景,并且它支持自定義協(xié)議,提供了更為靈活的網(wǎng)絡(luò)編程框架。
然而,如果主要需求是構(gòu)建Web應(yīng)用服務(wù)器,并且基于HTTP協(xié)議的應(yīng)用較多,那么Tomcat可能更簡單易用。Tomcat一度是web容器的標(biāo)準(zhǔn),并且對HTTP層的支持更為完善。
Tomcat和Netty的應(yīng)用場
Tomcat和Netty的應(yīng)用場景存在一定差異。
Tomcat主要應(yīng)用于傳統(tǒng)的Web應(yīng)用程序,如電子商務(wù)網(wǎng)站、博客等。它是一個開源的Web服務(wù)器,提供了一個容器來運(yùn)行Java Web應(yīng)用程序,并處理HTTP請求和響應(yīng)。Tomcat的設(shè)計目標(biāo)是提供一種簡單、易用、可靠的方式來開發(fā)和部署Java Web應(yīng)用程序。
而Netty則更適用于需要處理大量并發(fā)連接和高吞吐量的場景,如實時通信、游戲服務(wù)器等。Netty是一個基于事件驅(qū)動的異步網(wǎng)絡(luò)應(yīng)用框架,它提供了高性能、可擴(kuò)展的網(wǎng)絡(luò)編程能力。其設(shè)計目標(biāo)是提供一種簡單、高效、可靠的方式來開發(fā)可維護(hù)的高性能服務(wù)器和客戶端。
Tomcat和Netty在相同的服務(wù)器配置下,Netty的并發(fā)支持能力通常更高。
Tomcat默認(rèn)的最大并發(fā)數(shù)是150,可以通過配置來提高,但受限于線程數(shù)。而Netty基于NIO(非阻塞IO)設(shè)計,能夠處理更多的并發(fā)連接,并且不需要為每個請求創(chuàng)建新的線程。這使得Netty在處理大量并發(fā)連接時具有更高的性能和效率。
總的來說,如果需要處理大量并發(fā)連接,Netty是一個更好的選擇。
Tomcat和Netty來處理大規(guī)模并發(fā)連接的優(yōu)化
- 處理大規(guī)模并發(fā)連接時,Netty可以通過以下方式進(jìn)行優(yōu)化:
- 異步和事件驅(qū)動的設(shè)計:Netty基于異步和事件驅(qū)動的設(shè)計模式,通過非阻塞IO(NIO)處理連接。它可以高效地處理大量并發(fā)連接,而無需為每個連接創(chuàng)建新的線程。
- 連接管理和復(fù)用:Netty使用連接池和連接復(fù)用技術(shù)來管理連接。它可以重用已經(jīng)建立的連接,避免了頻繁地創(chuàng)建和銷毀連接的開銷。
- 流量控制和背壓機(jī)制:Netty提供了流量控制和背壓機(jī)制,可以根據(jù)服務(wù)器的負(fù)載情況動態(tài)調(diào)整接收和發(fā)送數(shù)據(jù)的速率,避免服務(wù)器過載。
- 高效的線程模型:Netty采用了多線程模型,通過合理的線程劃分和調(diào)度,充分利用多核處理器的性能,提高了并發(fā)處理能力。
- 自定義協(xié)議和編解碼器:Netty支持自定義協(xié)議,并提供了豐富的編解碼器,可以靈活地處理各種協(xié)議和數(shù)據(jù)格式,以滿足不同場景的需求。
- 高性能的數(shù)據(jù)傳輸:Netty使用了零拷貝技術(shù)和緩沖區(qū)池化,減少了數(shù)據(jù)傳輸過程中的內(nèi)存拷貝和分配開銷,提高了數(shù)據(jù)傳輸?shù)男省?/li>
- 監(jiān)控和調(diào)優(yōu):Netty提供了豐富的監(jiān)控和調(diào)優(yōu)手段,可以實時監(jiān)測服務(wù)器的性能指標(biāo),并根據(jù)需要進(jìn)行調(diào)整和優(yōu)化,以保證系統(tǒng)的穩(wěn)定性和性能。
通過異步和事件驅(qū)動的設(shè)計、連接管理和復(fù)用、流量控制、高效的線程模型、自定義協(xié)議和編解碼器、高性能的數(shù)據(jù)傳輸以及監(jiān)控和調(diào)優(yōu)等技術(shù)手段,Netty能夠有效地處理大規(guī)模并發(fā)連接,并提供高性能、可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用服務(wù)。
- Tomcat對大規(guī)模并發(fā)連接的支持可以通過以下方式進(jìn)行優(yōu)化:
- 服務(wù)器配置優(yōu)化:通過優(yōu)化Tomcat的服務(wù)器配置,如調(diào)整線程池大小、連接器配置等,可以提高并發(fā)處理能力??梢愿鶕?jù)實際應(yīng)用的需求和硬件資源來合理配置。
- 使用負(fù)載均衡和集群技術(shù):通過負(fù)載均衡器將請求分發(fā)到多個Tomcat實例,可以實現(xiàn)水平擴(kuò)展,提高并發(fā)處理能力。同時,集群技術(shù)可以將多個Tomcat實例組成一個集群,共同處理請求,進(jìn)一步提高并發(fā)處理能力。
- 連接池和連接復(fù)用:類似于Netty,Tomcat也可以使用連接池和連接復(fù)用技術(shù)來管理連接,避免頻繁地創(chuàng)建和銷毀連接的開銷。
- 異步處理和事件驅(qū)動:雖然Tomcat是同步的,但可以通過異步處理和事件驅(qū)動的方式來提高并發(fā)處理能力。例如,使用異步Servlet或Spring的異步Web框架等技術(shù)。
- 數(shù)據(jù)庫讀寫分離:對于數(shù)據(jù)庫的讀寫操作,可以采用讀寫分離的策略,將讀操作和寫操作分發(fā)到不同的數(shù)據(jù)庫實例,減輕單點數(shù)據(jù)庫的壓力,提高并發(fā)處理能力。
- 緩存技術(shù):合理使用緩存技術(shù),如Redis、Memcached等,可以減少對數(shù)據(jù)庫的訪問次數(shù),減輕數(shù)據(jù)庫的壓力,從而提高并發(fā)處理能力。
- 監(jiān)控和調(diào)優(yōu):通過監(jiān)控Tomcat的性能指標(biāo),及時發(fā)現(xiàn)瓶頸并進(jìn)行調(diào)優(yōu)。例如,調(diào)整JVM參數(shù)、優(yōu)化SQL語句等。
通過優(yōu)化服務(wù)器配置、使用負(fù)載均衡和集群技術(shù)、連接池和連接復(fù)用、異步處理和事件驅(qū)動、數(shù)據(jù)庫讀寫分離、緩存技術(shù)和監(jiān)控調(diào)優(yōu)等技術(shù)手段,Tomcat也可以有效地支持大規(guī)模并發(fā)連接。
Tomcat與Netty的網(wǎng)絡(luò)模型的區(qū)別
Tomcat的網(wǎng)絡(luò)模型主要有三種:JIO(即BIO)、NIO和NIO2(即AIO)。
- JIO(Java I/O):這是傳統(tǒng)的同步阻塞模型,即BIO。在這種模型中,I/O操作是同步的,并且當(dāng)數(shù)據(jù)未準(zhǔn)備好時,線程會被阻塞。這種模型適用于連接數(shù)較少且數(shù)據(jù)量大的場景。
- NIO(Non-blocking I/O):這是Java 7引入的模型,支持非阻塞的I/O操作。在這種模型中,I/O操作是異步的,當(dāng)數(shù)據(jù)未準(zhǔn)備好時,線程不會被阻塞,而是可以繼續(xù)執(zhí)行其他任務(wù)。這種模型適用于高并發(fā)、高吞吐量的場景。
- NIO2(Asynchronous I/O):這是Java 7引入的另一種異步I/O模型,也被稱為AIO。與NIO相比,NIO2更簡單、更輕量級,它提供了基于回調(diào)的異步I/O操作。這種模型適用于需要處理大量并發(fā)連接的場景。
在Tomcat 7之前,主要使用JIO模型;從Tomcat 7開始,支持NIO和NIO2模型;在Tomcat 8之后,默認(rèn)使用NIO模型??梢愿鶕?jù)具體需求選擇合適的網(wǎng)絡(luò)模型。
Netty的網(wǎng)絡(luò)模型是基于NIO(非阻塞IO)的,它使用了事件驅(qū)動和異步的設(shè)計模式。Netty的核心組件包括Channel、EventLoop、ChannelHandler等,通過這些組件的協(xié)作,實現(xiàn)了高效的網(wǎng)絡(luò)通信。
Netty的網(wǎng)絡(luò)模型具有以下特點:
- 事件驅(qū)動:Netty的事件驅(qū)動設(shè)計使得它能夠高效地處理并發(fā)連接。當(dāng)網(wǎng)絡(luò)事件發(fā)生時,Netty會將其封裝成一個事件對象,并傳遞給相應(yīng)的ChannelHandler進(jìn)行處理。
- 異步性:Netty的異步性使得它不會阻塞線程等待IO操作完成,而是通過回調(diào)函數(shù)通知處理完成或者錯誤信息。這種異步的設(shè)計使得Netty能夠處理更多的并發(fā)連接。
- 內(nèi)存池化:Netty使用了內(nèi)存池化的技術(shù),通過預(yù)先分配一定數(shù)量的ByteBuf對象,避免了頻繁的內(nèi)存分配和回收操作,減少了GC的次數(shù)和提高了性能。
- 零拷貝:Netty的零拷貝技術(shù)減少了數(shù)據(jù)在內(nèi)存中的拷貝次數(shù),提高了數(shù)據(jù)傳輸?shù)男?。通過優(yōu)化文件通道的讀寫操作,Netty能夠避免不必要的內(nèi)存拷貝和數(shù)據(jù)復(fù)制。
- 高度可定制:Netty提供了豐富的ChannelHandler接口,用戶可以根據(jù)需求實現(xiàn)自定義的ChannelHandler來處理網(wǎng)絡(luò)事件。這種可定制性使得Netty能夠適應(yīng)各種不同的應(yīng)用場景。
- 異步事件驅(qū)動模型:Netty使用異步事件驅(qū)動模型來處理網(wǎng)絡(luò)事件,EventLoop會循環(huán)監(jiān)聽事件,當(dāng)事件到來時,會調(diào)用ChannelHandler進(jìn)行處理。這種模型使得Netty能夠充分利用多核CPU的資源,提高處理性能。
- 線程模型:Netty使用了多Reactor模型,包括一個MainReactor和多個SubReactor。MainReactor負(fù)責(zé)接收新連接,SubReactor負(fù)責(zé)處理已接受的連接。這種線程模型使得Netty能夠高效地處理大量并發(fā)連接。
Tomcat與Netty架構(gòu)設(shè)計
- Tomcat的架構(gòu)設(shè)計主要包括以下幾個部分:
連接器(Connector):連接器負(fù)責(zé)處理HTTP請求和響應(yīng)的數(shù)據(jù)流,可以支持多種協(xié)議和傳輸方式,如HTTP、HTTPS、AJP等。連接器可以配置多個,每個連接器監(jiān)聽不同的端口。Web容器(Web Container):Web容器負(fù)責(zé)管理Web應(yīng)用程序,每個Web應(yīng)用程序都有一個Context,它包含了該應(yīng)用程序的Servlet、Filter、Listener等組件的定義和配置。Web容器還負(fù)責(zé)類加載、Session管理、安全性等方面的處理。集群和負(fù)載均衡(Clustering and Load Balancing):Tomcat支持將多個Tomcat實例組成一個集群,以提高性能和可用性。集群中的Tomcat實例可以通過共享Session等方式進(jìn)行通信,并且可以通過負(fù)載均衡器將請求分發(fā)到不同的Tomcat實例上。日志和監(jiān)控(Logging and Monitoring):Tomcat提供了豐富的日志記錄和監(jiān)控功能,可以幫助開發(fā)人員和管理員監(jiān)控Tomcat的運(yùn)行狀態(tài)和性能指標(biāo)。
Tomcat的架構(gòu)設(shè)計包括連接器、Web容器、集群和負(fù)載均衡、日志和監(jiān)控等部分,這些組件協(xié)同工作,使得Tomcat能夠提供高性能、可擴(kuò)展的Web應(yīng)用服務(wù)。
- Netty的架構(gòu)設(shè)計包括以下幾個主要部分:
通信調(diào)度層(Reactor):由一系列輔助類完成,包括Reactor線程(NioEventLoop及其父類)、NioSocketChannel/NioServerSocketChannel及其父類、Buffer組件、Unsafe組件等。該層的主要職責(zé)是監(jiān)聽網(wǎng)絡(luò)的讀寫和連接操作,負(fù)責(zé)將網(wǎng)絡(luò)層的數(shù)據(jù)讀取到內(nèi)存緩沖區(qū),然后觸發(fā)各種網(wǎng)絡(luò)事件,例如連接創(chuàng)建、連接激活、讀事件、寫事件等。責(zé)任鏈層(Pipeline):負(fù)責(zé)上述的各種網(wǎng)絡(luò)事件在責(zé)任鏈中的有序傳播,同時負(fù)責(zé)動態(tài)地編排責(zé)任鏈。責(zé)任鏈可以選擇監(jiān)聽和處理自己關(guān)心的事件,可以攔截處理事件,以及向前向后傳播事件。
Netty的設(shè)計基于NIO(非阻塞IO)模型,具有異步、事件驅(qū)動的特點,可以高效地處理大量并發(fā)連接.

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea打包成war包部署到tomcat及訪問路徑問題(圖文詳解)
這篇文章主要介紹了idea打包war包部署到tomcat以及訪問路徑問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
通過prometheus監(jiān)控Tomcat運(yùn)行狀態(tài)的操作流程
文章介紹了如何安裝和配置Tomcat,并使用Prometheus和Tomcat Exporter來監(jiān)控Tomcat的運(yùn)行狀態(tài),文章詳細(xì)講解了Tomcat的常用指標(biāo),如連接、請求、會話和線程指標(biāo),并提供了具體的計算方法和示例,需要的朋友可以參考下2025-02-02
tomcat使用問題之安裝后無法訪問localhost:8080解決
當(dāng)Tomcat無法訪問localhost:8080時,可能是由于未啟動、環(huán)境變量未配置、端口號占用或版本問題,這篇文章主要介紹了tomcat使用問題之安裝后無法訪問localhost:8080解決的相關(guān)資料,需要的朋友可以參考下2024-10-10

