Tomcat上如何配置虛擬主機以及如何訪問在webapps文件夾外的資源


前言

最近學習到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文件夾下,這樣方便了網站的維護和管理。

 注意:

  1. ”<Context path=“中path的路徑必須以“/”開頭 這里的path的值映射的就是:docBase中的地址
  2. 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,所以有些認識可能不是特別准確,如果有寫錯的地方,懇請各位大佬賜教。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM