前言
最近學習到Java web技術,然后接觸到Tomcat服務器。(記得配置好java jdk的環境變量哦)下載完畢,解壓后,進入bin目錄下,找到starup.bat文件,雙擊它即可啟動Tomcat服務器;雙擊shutdown.bat文件即可關閉Tomcat服務器。當然,粗暴點直接關閉cmd命令框或者按住ctrl+c也是可以關閉Tomcat服務器的。如下圖所示:
上圖是我安裝版本的目錄,可能因為版本不同,目錄會不一樣,但是那些都是不重要的文件,功能還是一樣的。
啟動的命令框如圖所示:
啟動之后,不要關閉這個窗口,打開瀏覽器(最好打開谷歌瀏覽器),在瀏覽器地址欄中輸入:http://localhost:8080/index.jsp,就可以訪問tomca服務器上的資源了,當然了你輸入localhost:8080也是可以的,因為這個地址直接映射了上面那個,就直接找index.jsp了。如下圖所示:
好吧,好像廢話太多了,下面正式進入正題。
Tomcat 配置虛擬主機
上面講到的localhost,從英文翻譯過來就是:本地主機。Tomcat服務器可以將當前主機虛擬成多個主機,稱為虛擬主機,每個虛擬主機下可以部署多個web應用。虛擬主機及其web應用在:conf/server.xml文件中進行配置。server.xml是Tomcat中一個非常重要的配置文件,Tomcat啟動時要讀取該文件定義的配置。
打開這個文件,這里我用的是:Editplus打開的:
至於這個文件中各個標簽的作用,可以參考地址:https://www.cnblogs.com/LinkinPark/p/5233086.html 這里面講的很詳細
一開始我們在瀏覽器地址欄中輸入的地址是localhost,代表本機,也就是127.0.0.1這是代表本機的ip地址,當然了如果你的電腦聯網了,那就會有一個ip地址,在cmd中輸入:ipconfig就能查看,然后用聯網的ip代替localhost也是可以的,始終代表的是你這台電腦。如果你想訪問局域網中另外一台服務器,那就要換成那台服務器的ip地址進行訪問。
那么為何localhost是可以代表本機呢,打開:C:\Windows\System32\drivers\etc 下有個hosts文件 這是電腦的配置文件,如下圖:
文件開頭也為這個文件的作用做了說明,主要是說這個文件是電腦ip地址的配置,可以看到127.0.0.1 映射的正是:localhost,也就是兩者是相等的關系。那么在這里,我復制,然后添加了一個,將127.0.0.1 映射為:ljf 然后保存。(記得要去掉前面的#號哦,不然就是注釋了) 這是配置虛擬主機的第一步,更改hosts文件。
第二步,往server.xml配置文件中添加<Host></Host>,xml文件是嚴格區分大小寫的,最好復制上面的進行改動會好一點。如下圖:
我這里直接復制了上面的localhost的過來,然后更改name為:ljf即可,然后保存,重啟Tomcat,更改為配置文件都要重啟服務器哦,這是為了讓配置生效,雖然<Host>中有個屬性:reloadable:true(如果為true,說明改動文件后會重新加載;如果為false,改動后不重新加載)但是為了保險起見還是重啟一下吧。然后用localhost:8080訪問,當然是沒問題的,將其換成ljf:8080也是沒有問題的:
這樣虛擬主機就完成了,雖然是不同的名字,但是映射的都是同一台主機,那么這樣做的意義是什么呢?有些公司啊,需要多個域名,便於消費者訪問,但是又沒錢開多台服務器,只能共用一台咯,可能就是減少開支吧。
如何配置訪問webapps文件夾以外的資源?
在瀏覽器中輸入:localhost:8080/index.jsp訪問的是webapps文件夾下的ROOT文件夾的index.jsp文件,那如果我想訪問webapps文件夾以外的資源,可以嗎?當然是沒問題的!
在<Host>中appBase所定義目錄下的每一個目錄都會自動映射為一個web應用,其url根路徑就是目錄名,如圖:
appBase定義的是webapps目錄,Tomcat默認將webapps目錄下的ROOT目錄設置為了其默認的目錄,所以我們這里沒有看到<context path=>的設置,並且在CatalinaHome/conf/web.xml全局配置文件中,配置了歡迎頁面為index/html/index.htm/index.jsp(位置靠前,優先訪問,找不到再往下找)這也是為什么輸入localhost:8080/index.jsp就能訪問webapps目錄下的ROOT文件夾中的index.jsp文件的原因。
接下來,我們手動設置一個web目錄映射。
首先在E盤下,新建一個文件夾,名為:nihao,然后在該文件夾中放入一個名為:index.html文件以及一個名為:inde.jsp的文件
接下來,在<Host></Host>中加入:<Context path="/ljfsm" docBase="E:\nihao"/>
然后保存,重啟服務器,打開瀏覽器,輸入:http://ljf:8080/ljfsm/index.html是可以訪問到資源的
為了說明上圖訪問的不是webapps文件夾下的文件,可以再在瀏覽器中輸入:http://ljf:8080/ljfsm/inde.jsp(inde.jsp是E盤nihao文件夾獨有的文件)
如上圖,可以訪問到資源,說明配置成功了。ljfsm映射的就是:E:\nihao文件夾下的資源。這樣的好處是:可以將web應用源程序放在服務器上任一磁盤、任一目錄下,而不僅僅是webapps文件夾下,這樣方便了網站的維護和管理。
注意:
- ”<Context path=“中path的路徑必須以“/”開頭 這里的path的值映射的就是:docBase中的地址
- appBase和docBase都是指明訪問資源的所在位置,如果其中一個寫全了,另一個不用寫也可以,如上圖就是這種情況,也可以分開寫,例如:appBase="E:\" docBase="/nihao"也是可以的 ,反正其中一個的路徑正確即可
那如果docBase與appBase的路徑發生沖突了呢?我將nihao文件夾復制到D盤下,然后更改里面文件的名字:
下圖是E盤的文件的名字:
server.xml配置如下:
然后保存,重啟服務器,在瀏覽器欄中輸入:http://ljf:8080/ljfsm/inde.jsp(inde.jsp是E盤中的文件),是可以顯示頁面的,說明可以訪問E盤中的資源,如下圖:
輸入:http://ljf:8080/ljfsm/in.jsp(in.jsp是D盤中的文件),提示找不到,報404錯誤:
說明如果兩者地址沖突的話,是以:docBase中的路徑為准的。
關於appBase和docBase目錄之間的關系,可以參考這個地址:https://blog.csdn.net/liuxuejin/article/details/9104055
因為剛開始學習Tomcat,所以有些認識可能不是特別准確,如果有寫錯的地方,懇請各位大佬賜教。