web筆記二:Tomcat的使用

大多數情況下我們都是使用Tomcat開發web應用,所以,我們需要對Tomcat的配置有一定的瞭解,如端口配置、應用根目錄、多Tomcat配置時需要更改哪些端口等。
下載解壓Tomcat後,打開/conf/serve.xml,我們一般都能看到一下內容:

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <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" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

問題1:修改默認端口(8080)

<!-- 將8080端口改爲8888 -->
<Connector port="8888" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

問題2:如何自定義虛擬目錄

<!-- 方法1:將虛擬目錄改爲D盤的projects目錄下,webapps目錄下的應用不再可用-->
<Host name="localhost"  appBase="D:\projects"
            unpackWARs="true" autoDeploy="true">
<!-- webapps和D盤projects目錄下的應用都可用 -->
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <!-- 不要忽略path屬性 -->
        <Context path="/" docBase="D:\projects"/>
      </Host>

這裏可能會涉及到一個資源重複的問題,到最後講。。。。

問題3:同一個機器部署多個Tomcat的問題
同一臺機器部署多個Tomcat可能會引起端口占用的問題,所以部署多個Tomcat需要修改三個端口,分別是兩個Connector.port和一個Server.port

<!-- 將默認的8005改爲8006 -->
<Server port="8006" shutdown="SHUTDOWN">
<!-- 將默認的8080改爲8081-->
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<!-- 將默認的8009改爲8010-->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<!-- 省略其他部分 -->
</Server>

問題4:我希望使用指定的域名訪問我的應用而不是localhost
第一步:

<!-- 將localhost改爲你想要的域名,例如www.hxl.com -->
 <Host name="www.hxl.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

第二步:
打開C:\Windows\System32\drivers\etc\hosts文件,添加下面一行即可

127.0.0.1       www.hxl.com

說明,當我們瀏覽器去請求帶有域名的url時,例如www.baidu.com/xxx,瀏覽器會依次執行下面的操作
1、查找本地hosts文件是否配置www.baidu.com映射的IP信息,找到則跳到第四步,否則執行下一步
2、查找路由器DNS配置信息,找到則跳到第四步,否則執行下一步
3、去互聯網DNS服務器上查找IP,如果還找不到,則返回404找不到資源
4、根據IP和端口信息查找相應的資源信息,如果域名沒有顯式地標明使用哪個端口,則使用的是80端口


現在,我們回到第二點:

<!-- webapps和D盤projects目錄下的應用都可用 -->
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <!-- 不要忽略path屬性 -->
        <Context path="/" docBase="D:\projects"/>
      </Host>

如果webapps和D:\projects都存在名爲myweb的應用,那麼我訪問localhost:8080/myweb/xxx的時候,會去請求哪個目錄下的web應用?結論是只會請求webapps下的web應用
但是,如果webapps和D:\projects都存在一個靜態資源文件,如index.jsp,當請求localhost:8080/index.jsp時,會優先請求D:\projects的靜態文件

如果配置的是

<Context path="/myweb" docBase="D:\projects"/>

那麼,webapps下的myweb應用將失效

以上結論都基於tomcat-8.5.15測試得到的結論,當然,一般情況下,我們都不會做一些有歧義的配置信息,而且,一個tomcat一般只會部署一個web應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章