Tomcat 與 maven 的安裝與使用教程
目錄
- Tomcat
- 1、下載
- 2、重要目錄
- 3、使用 Tomcat
- 3.1、啟動(dòng) Tomcat
- 3.2、使用瀏覽器訪問 Tomcat
- 3.3、通過 webapps 目錄部署頁(yè)面
- Maven
- 1、什么是 Maven ?
- 2、使用 Maven
- 2.1、創(chuàng)建項(xiàng)目
- 2.2、maven 管理依賴
Tomcat
談到 “湯姆貓”,大家可能更多想到的是大名鼎鼎的貓和老鼠
事實(shí)上,Java 世界中的 “湯姆貓” 完全不是一回事,但是同樣大名鼎鼎
Tomcat 是一個(gè) HTTP 服務(wù)器
- HTTP 協(xié)議就是 HTTP 客戶端和 HTTP 服務(wù)器之間的交互數(shù)據(jù)的格式
- 同時(shí)也通過 ajax 和 Java Socket 分別構(gòu)造了 HTTP 客戶端
- HTTP 服務(wù)器我們也同樣可以通過 Java Socket 來實(shí)現(xiàn),而 Tomcat 就是基于 Java 實(shí)現(xiàn)的一個(gè)開源免費(fèi),也是被廣泛使用的 HTTP 服務(wù)器
HTTP 協(xié)議我們也可以認(rèn)為是基于 TCP
HTTP 服務(wù)器,就是在 TCP 服務(wù)器的基礎(chǔ)上,加上了一些額外的功能:
能夠解析請(qǐng)求中的 HTTP 報(bào)文,把請(qǐng)求轉(zhuǎn)換成結(jié)構(gòu)化數(shù)據(jù)(對(duì)象),也能很方便的構(gòu)造 HTTP 響應(yīng)
HTTP 服務(wù)器提供了一組 API,方便程序猿直接調(diào)用,來操作 HTTP 協(xié)議,從而簡(jiǎn)化程序猿的開發(fā)工程
HTTP 服務(wù)器,是屬于很大的類別
這個(gè)分類下面,其中包含著很多很多具體的實(shí)現(xiàn),Tomcat 只是其中的一種 (Java 圈子里,最知名的一種) 還有 Nginx
Tomcat HTTP 服務(wù)器,按照 HTTP 協(xié)議的格式來解析請(qǐng)求,,調(diào)用用戶指定的相關(guān)代碼,并且按照 HTTP 響應(yīng)的格式來構(gòu)造返回?cái)?shù)據(jù)
1、下載
Tomcat 官網(wǎng):Apache Tomcat
Apache 是一個(gè)組織,就是開發(fā)維護(hù) Tomcat 的那個(gè)組織,Apache 是開源社區(qū)中一個(gè)非常有影響力的組織
org 也是一個(gè)常見的頂級(jí)域名,org 后綴的都表示是一個(gè)非營(yíng)利組織的域名,咱們平時(shí)看到的都是 .com… .cn
Tomcat 的版本,會(huì)和 JDK 以及 Servlet 的版本都是密切綁定在一起的,我們使用 Tomcat 8 的版本
解壓縮:
2、重要目錄
bin:?jiǎn)⑼D_本
.bat
后綴的文件,是 windows 的批處理文件。.sh
后綴的文件,是linux 的 shell 腳本的文件- 都是屬于一雙擊就能運(yùn)行的程序
- 要想啟動(dòng) tomcat 就可以直接雙擊這個(gè)
startup.bat
- 既然這里包含了startup.sh,是否意味著當(dāng)前咱們下載的這個(gè)壓縮包,在 linux 上也能直接運(yùn)行呢??
答案是肯定的!!
Tomcat 其實(shí)是基于 Java 實(shí)現(xiàn)的,Java跨平臺(tái)
conf:Tomcat 的配置文件
- 是通過
xml
的格式來組織的
比如想修改下 tomcat 的端口號(hào),tomcat 默認(rèn)綁定的是 8080 端口
logs :日志
- 這個(gè)目錄中記錄了很多的日志
- 日志其實(shí)就是表示了 Tomcat 運(yùn)行中的一些具體過程細(xì)節(jié),日志其實(shí)就是通過類似于 printIn 這樣的代碼打印出來的結(jié)果
webapps:
- 這個(gè)目錄中放的是咱們部署的 servlet 程序
- 每個(gè) servlet 程序,都是一個(gè)
war
后綴的文件 (也是一種壓縮包格式),tomcat 會(huì)自動(dòng)把這個(gè)war
解壓縮,得到一個(gè)目錄 - 每個(gè) war 其實(shí)就對(duì)應(yīng)了一個(gè) webapp (相當(dāng)于是一個(gè)網(wǎng)站)
- 一個(gè)Tomcat 上,允許你同時(shí)部署多個(gè) webapp (多個(gè)網(wǎng)站)
正因?yàn)椋粋€(gè) Tomcat 上面可以同時(shí)部署多個(gè) Servlet 程序,所以,也可以把 Tomcat 稱為 "Servlet 的容器”,或者簡(jiǎn)稱為 “容器”
網(wǎng)上稱:Tomcat是一個(gè)容器 container… (經(jīng)常會(huì)見到的)
容器1:Java 集合類 => C++就稱為容器 => 間接的導(dǎo)致了有些 Java 程序猿也管集合類叫做容器
容器2:Tomcat 是 Servlet 的 容器,一個(gè) Tomcat 上面可以承載多個(gè)webapp
容器3:Spring 可以管理很多很多個(gè) Bean 對(duì)象,Spring 也可以稱為Bean 的容器
容器4:Docker 也是涉及到容器的概念,Docker 可以認(rèn)為是輕量級(jí)的虛擬機(jī) (軟件模擬出來的一個(gè)計(jì)算機(jī)),一個(gè) docker 程序里,可以有多個(gè) “輕量虛擬機(jī)”,每個(gè)輕量虛擬機(jī)里面又可以包含很多程序,就把這個(gè)輕量虛擬機(jī)稱為容器,進(jìn)一步的也把 docker 也稱為容器了……
…….
所以未來看到容器這個(gè)詞的時(shí)候,一定要擦亮眼睛,仔細(xì)的結(jié)合上下文,來分析分析,當(dāng)前這個(gè)"容器" 到底是啥,不要把不同的容器混為一談!
3、使用 Tomcat
3.1、啟動(dòng) Tomcat
運(yùn)行 startup.bat
看到這句話,說明你的 tomcat 啟動(dòng)成功
中間的亂碼,是由于統(tǒng)一編碼方式
Tomcat 內(nèi)部使用的編碼方式,是 utf8 (utf8 就是咱們當(dāng)下最主流的編碼方式)
但是,咱們使用的 windows 是 "簡(jiǎn)體中文版” 默認(rèn)的字符集是 GBK,cmd 這個(gè)程序,也是跟隨了系統(tǒng)的字符集
數(shù)據(jù)是按照 utf8 來構(gòu)造的,但是 cmd 在顯示的時(shí)候按照了 GBK 的方式來解析,勢(shì)必就會(huì)出現(xiàn)亂碼!!!
把 cmd 字符編碼改成 utf8 并不容易,cmd 自身沒有提供設(shè)置字符集的功能,需要修改電腦的注冊(cè)表
Windows 系統(tǒng)的總的配置中心(總指揮部),謹(jǐn)慎修改!!!
Tomcat 還有其他的方式:
- 結(jié)合 IDEA來使用
- 在 Linux 上使用
閃退原因:
(1) 原因1 環(huán)境變量的問題
Tomcat 要想能運(yùn)行,得能夠找到 JDK !!!
如何才能找到 JDK? 你的 JDK 到底安裝在系統(tǒng)的哪個(gè)位置上了
靠咱們之前最開始的時(shí)候配置的 “環(huán)境變量”
就是在描述當(dāng)前咱們把JDK給裝到哪里去了~~,得讓Tomcat 找到JDK的位置,才能去調(diào)用嘛
如何解決這個(gè)問題? 需要能看到報(bào)錯(cuò)提示!! 閃退了如何看到報(bào)錯(cuò)提示???
方案就是把雙擊運(yùn)行的腳本直接拖到 cmd 中來運(yùn)行
如果這里的這一組環(huán)境變量,某個(gè)有問題,就會(huì)告訴你,是誰有問題
不一定是配一個(gè)就能好!!! 再重復(fù)上述步驟,看接下來報(bào)啥錯(cuò)
類似于上述環(huán)境變量,其實(shí) tomca 自身就在嘗試配置,一般來說,tomcat 就自動(dòng)配好了,但是不排除有些情況下 tomcat 自動(dòng)配置不生效,這個(gè)時(shí)候就可以手動(dòng)配置了
(2) 原因2 端口號(hào)被占用了
Tomcat 是一個(gè) HTTP 服務(wù)器,啟動(dòng)的時(shí)候要綁定端口,一般是綁定兩個(gè)端口號(hào):8080,8005
如果這個(gè)端口已經(jīng)被其他程序占用了,此時(shí)你啟動(dòng)肯定是失效的!!(閃退)
最典型的情況:你已經(jīng)啟動(dòng)了一個(gè) tomcat,你再嘗試啟動(dòng)第二個(gè),第二個(gè) tomcat 妥妥的失敗
第二個(gè)情況是很可能電腦上有別的程序占用了 8080 / 8005
比如 web 開發(fā),配置 windows 自帶的 IIS 服務(wù)器 (這個(gè)服務(wù)器默認(rèn)端口也是 8080 ),如果 IIS 在運(yùn)行中,tomcat 大概率啟動(dòng)不了的,找到是哪個(gè)程序占用了 8080 / 8005,cmd 輸入 ,關(guān)閉對(duì)應(yīng)的程序或者給 tomcat 換個(gè)端口
3.2、使用瀏覽器訪問 Tomcat
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-KfT9PUki-1655171538703)(C:\Users\Gwen\Desktop\4e54eaf098194c2dad75cc911f2aab4d.png)]
一般你裝上了 tomcat 就會(huì)帶有這個(gè)歡迎頁(yè)面,127.0.0.1:8080
,看到這個(gè)頁(yè)面就說明tomcat 已經(jīng)成功啟動(dòng)了
光看看歡迎頁(yè)面,沒什么意思,需要自己在 \webapps\ROOT
部署一些頁(yè)面到 tomcat 上去
通過 Tomcat 訪問:
是可以讓別人訪問你的 html 的,就是做網(wǎng)站的初衷
通過本地文件訪問:
這個(gè)方式僅限于,使用自己的主機(jī)來訪問,別人的主機(jī)想通過這種方式訪問你的 html 是做不到
那么此時(shí)能否讓別人訪問我的頁(yè)面?不能,這是因?yàn)?NAT => IPv4,內(nèi)網(wǎng)ip 和 外網(wǎng)ip 結(jié)合
此時(shí)我的 ip是 192.168.178.1,以
- 10.*
- 172.16.* - 172.31*
- 192.168.*
開頭的都是內(nèi)網(wǎng)ip,內(nèi)網(wǎng)IP 只能在局域網(wǎng)內(nèi)部使用,不能被其他局域網(wǎng)直接訪問
除非你連上我的路由器,在同一個(gè)局域網(wǎng)里你才能訪問我的主機(jī)
因此,要想讓 tomcat 真正做到讓頁(yè)面被外面的人訪問,就需要能夠搞一個(gè)外網(wǎng)IP,買一個(gè)云服務(wù)器,就有了一個(gè)外網(wǎng)IP !!!
當(dāng)前 chrome 會(huì)把所有的不是 HTTPS 的都標(biāo)記成 “不安全”,
咱們的 tomcat 也是當(dāng)然支持 HTTPS (需要額外配置,尤其是你得申請(qǐng)證書
3.3、通過 webapps 目錄部署頁(yè)面
雖然咱們部署了頁(yè)面到 tomcat 上,但是這里還有個(gè)問題,當(dāng)前如果頁(yè)面簡(jiǎn)單還好,直接放到 ROOT 就行了
如果當(dāng)前頁(yè)面比較復(fù)雜,(若干個(gè) HTML,還依賴了一些 css,圖片,js…) 如果全都堆在這個(gè) ROOT 目錄里,就非常不優(yōu)雅了
因此更好的做法,是在 webapps 里單獨(dú)創(chuàng)建一個(gè)目錄,把你的頁(yè)面部署到這個(gè)目錄中
將博客系統(tǒng)的代碼全部復(fù)制進(jìn)來
出現(xiàn) 404,一般就是你訪問的資源不存在
- 請(qǐng)求的路徑不對(duì)
- 路徑雖然對(duì),但是資源沒被服務(wù)器加載起來 [此處的原因,重啟下服務(wù)器才能加載資源]
通過這個(gè) http://127.0.0.1:8080/blog102/blog_list.html,就會(huì)看到我們的博客頁(yè)面
壓縮這個(gè) blog102,通過服務(wù)器,就可以讓別人訪問自己的頁(yè)面
以上內(nèi)容,都是基于 tomcat 來部署 “靜態(tài)頁(yè)面”
頁(yè)面內(nèi)容,是固定不變的
后面還需要學(xué)習(xí)基于 Tomcat 來生成動(dòng)態(tài)頁(yè)面 (根據(jù)用戶輸入的不同,會(huì)得到不同的結(jié)果)
像搜狗主頁(yè)這種頁(yè)面就是靜態(tài)頁(yè)面
像搜狗的搜索結(jié)果頁(yè),這種頁(yè)面就是動(dòng)態(tài)頁(yè)面,用戶輸入不同的詞,得到的結(jié)果是不同的
web 開發(fā)主要的工作,其實(shí)還是在動(dòng)態(tài)頁(yè)面這邊
接下來重點(diǎn)學(xué)習(xí)的,就是動(dòng)態(tài)頁(yè)面的構(gòu)造
學(xué)習(xí) Tomcat 給程序猿提供的這組用來操作 HTTP 的 API => Servlet
這里的 API 和 HTTP 協(xié)議緊密相關(guān)
正式學(xué)習(xí) Servlet 之前,需要先學(xué)點(diǎn)前置知識(shí) (HTTP 和 Tomcat 也算是 Servlet 的前置知識(shí))
Maven
1、什么是 Maven ?
maven 是一個(gè) Java 世界中,非常知名的 “工程管理工具” / “構(gòu)建工具”
核心功能:
1.管理依賴
- 就是指進(jìn)行一個(gè) A 操作 之前,要先進(jìn)行一個(gè) B 操作。例如你要結(jié)婚,先要有女朋友
- 再比如,editor.md,就依賴了 jquery,得先讓頁(yè)面加載 jquery,再加載 editor.md
2.構(gòu)建 / 編譯(也是在調(diào)用 jdk )
3.打包
- 把 java 代碼給構(gòu)造成
jar
或者war
jar
就是一個(gè)特殊的壓縮包,類似于 rar,里面就是把各種.class
文件放到一起了
Java 中常見的程序發(fā)布方式
maven 存在的意義就是能夠直接把這些操作串起來,一氣呵成
咱們寫代碼,也是有很多的依賴的 (當(dāng)前階段,依賴的東西不多)
- 經(jīng)常會(huì)依賴標(biāo)準(zhǔn)庫(kù)
- 經(jīng)常依賴一些第三方庫(kù),引入的一些其他 jar 包~~
比如前面寫 JDBC 代碼的時(shí)候,當(dāng)時(shí)就下載了一個(gè) mysql 的驅(qū)動(dòng)包~~ 寫代碼的時(shí)候,也可能是有關(guān)系很復(fù)雜的依賴~~
A-> B -> C ->D
如果你是手動(dòng)管理這個(gè)依賴,這個(gè)過程就會(huì)相當(dāng)?shù)疤?!! 不光你得研究清楚,每個(gè)庫(kù)都依賴哪些其他庫(kù)
而且還得研究清楚,這些依賴之間的版本是怎么關(guān)聯(lián)的
為了解決上述的依賴問題,很多編程語(yǔ)言都引入了自己的包管理工具 (自動(dòng)解決依賴)
Java:Maven Gradle
Python:pip
JS:npm
各種語(yǔ)言都有…
但是除了 C++ … 目前為止,C++ 官方還沒有提供這樣的一個(gè)包管理工具,第三方的包管理工具是有,但是問題都很多… 沒有一個(gè)像Maven 這種這么成熟的工具~~
咱們當(dāng)前用的 maven,隔壁 C++ 的小孩們都饞哭了~~
如何下載安裝 maven ?
網(wǎng)上有很多下載安裝 maven 的教程,大家千萬不要去參考!!!
咱們的做法其實(shí)就是啥也不干就行了 ( IDEA 內(nèi)置了現(xiàn)成的 maven )
“不打等于上分”
2、使用 Maven
2.1、創(chuàng)建項(xiàng)目
搭配 IDEA 的使用方式:選擇 maven 的方式來創(chuàng)建項(xiàng)目
這幾個(gè)東西的用途就是,如果你寫了一個(gè)程序,你要發(fā)布到 maven 中央倉(cāng)庫(kù)上,這三個(gè)參數(shù)就是你這個(gè)程序在中央倉(cāng)庫(kù)的身份標(biāo)識(shí)
下載 mysql 的驅(qū)動(dòng)包,就是從 中央倉(cāng)庫(kù) 搞的呀~~
Java 圈子里有很多的大佬實(shí)現(xiàn)了很多的第三方庫(kù)~~ 這么多第三方庫(kù),組織形式就是把他們統(tǒng)一放到一個(gè)中央倉(cāng)庫(kù)這里,方便用戶去查找
這個(gè)是創(chuàng)建好的項(xiàng)目的目錄結(jié)構(gòu)~~src/main/java
這個(gè)目錄用來放咱們的 java 代碼~~
src/main/resources
這個(gè)目錄用來放一些依賴的資源
src/test/java
這個(gè)目錄用來放單元測(cè)試的代碼~~ (暫時(shí)不涉及)
pom.xml
這個(gè)是maven 項(xiàng)目的核心配置文件,一個(gè) maven 項(xiàng)目的司令部~~
——文件是使用 xml 這種格式來組織~~
創(chuàng)建好項(xiàng)目后,如何使用?
右標(biāo)簽菜單,如果沒有,在 View-Tool Windows-Maven
這里羅列的這些內(nèi)容,其實(shí)都是可以通過 maven 來進(jìn)行操作的
咱們用的最多的打包
打包不僅僅是完成打包,會(huì)執(zhí)行上面的所有操作~~
這里的打包結(jié)果一般是一個(gè) jar
或者是一個(gè) war
2.2、maven 管理依賴
使用 maven 幫我們下載并安裝第三方庫(kù)~~
以 mysql 驅(qū)動(dòng)包為例
- 去中央倉(cāng)庫(kù)上,找到 mysql 驅(qū)動(dòng)包 Maven Repository MySQL Connector/J » 5.1.47 版本
- 把這里的 maven 標(biāo)簽頁(yè)下的這個(gè) xml 配置給復(fù)制下來~~
把這個(gè)內(nèi)容粘貼到 pom.xml
在 dependencies
標(biāo)簽中,可以放多個(gè) dependency 標(biāo)簽,一個(gè)項(xiàng)目可以引入多個(gè)依賴
初始情況下的 pom.xml
可能沒有這個(gè)標(biāo)簽,就需要手動(dòng)創(chuàng)建一下
一般來說,maven 就會(huì)自動(dòng)從中央倉(cāng)庫(kù)那里來下載依賴了~~
—般會(huì)在右下角這里顯示一個(gè)下載的狀態(tài)~~
第一次使用的時(shí)候,可能會(huì)下載比較久,一旦下載好了之后,后續(xù)就能直接用了
(第一次使用的時(shí)候,mysql 和 版本啥的這幾個(gè)字是紅色的)
如果 idea 沒有自動(dòng)觸發(fā)下載,手動(dòng)點(diǎn) maven 右上角的刷新按鈕
由于中央倉(cāng)庫(kù),服務(wù)器在國(guó)外~~ 下載速度可能會(huì)比較慢!!! 默認(rèn)的源在國(guó)外,是不太穩(wěn)定的,如果你實(shí)在不行,也可以手動(dòng)的把 maven 倉(cāng)庫(kù)給配置成使用國(guó)內(nèi)的源 (使用國(guó)內(nèi)的中央倉(cāng)庫(kù)),能用默認(rèn)的源,就用默認(rèn)的,默認(rèn)的源大部分情況下是好的
出現(xiàn)了這條: Cannot resolve plugin org.apache.maven.plugins:maven-resources-plugin:2.6,把所有的文件刪除掉,再次執(zhí)行更新就能夠解決這個(gè)問題,這次終于成功了!
如果看到了下圖這個(gè)庫(kù),說明就是引入成功了!!!
如果沒有這個(gè)庫(kù),嘗試點(diǎn)擊右上角的那個(gè)刷新按鈕,你要注意右下角的下載的進(jìn)度條~~
無論是 maven 還是其他的庫(kù),都是通過同樣的方式來引入的,只要把對(duì)應(yīng)的 xml 片段(坐標(biāo)) 拷貝到你的 pom.xml 中即可~~
到此這篇關(guān)于Tomcat 與 maven 的安裝與使用的文章就介紹到這了,更多相關(guān)Tomcat 與 maven安裝內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
![Tomcat啟動(dòng)報(bào)錯(cuò):嚴(yán)重: Unable to process Jar entry [module-info.class]](http://www.aoyou183.cn/attached/image/news/202309/1807483457.png)