tomcat設置默認路徑導致項目url衝突解決方法

前言

  • tomcat做爲java容器很是出色,可是依然會有一些避之不及的小坑,在此記錄一筆.

START

問題

  • 部署多個項目後url路徑衝突

情景描述

1.webapps下有兩個項目 projectA,projectB.兩個項目除開管理信息接口,其他都有安全驗證機制.
2.projectA因爲未作先後端分離,所以靜態資源也存在java項目中.在作靜態資源中的接口請求時未寫包名,好比登陸,js代碼會拼接服務器ip+端口+當前設置的url(/login),而未在/login前加上/projectA,因此在本機上測試沒有問題,只有當部署的時候纔會存在這樣的問題.這也是個問題,下面解決.
3.projectB是運行正常的項目html

對於情景2解決辦法

  • 打開tomcat中的配置文件,在<Host>標籤裏添加上<Context>設置爲服務器的默認訪問路勁,如此便避開了包名,但此方法極不正規,不推薦使用.
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        <Context path="" docBase="/usr/tomcat8.6/webapps/sc_edu" debug="0" reloadable="true"/>

    </Host>

代碼解釋

<Context path="" docBase="/usr/tomcat8.6/webapps/sc_edu" debug="0" reloadable="true"/>
  • path和doBase一塊兒表示指定包路徑,爲了簡即可以直接卸載docBase中.
  • 重啓tomcat,測試直接ip+port能訪問到該包中的資源,然而當訪問其它包中資源時,會出現url歧義.原本是想訪問projectB,然而映射到projectA項目下.只是部分url會出現這樣的問題.

而後咱們的解決方法是再裝一個tomcat,只部署須要直接路徑映射的項目

  • 如此便回到tomcat所在目錄,cp命令拷貝
$> cp -r tomcat8.5/ tomcat8.6/

  • 而後移動tomcat8.5中的projectA到tomcat8.6中.
  • 刪除tomcat8.5中的
<Context path="" docBase="/usr/tomcat8.6/webapps/sc_edu" debug="0" reloadable="true"/>
  • 在tomcat8.6中須要對service.xml作以下改動.

改動 shutdown對應的port爲8006,只要與tomcat8.5不一樣且端口不衝突就行.java

<Server port="8006" shutdown="SHUTDOWN">

改動 請求對應的端口,原則同上web

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  • <Host>標籤中的內容複製過來的,須要修改爲對應的映射路徑.
  • 如此兩個tomcat才能同時運行,啓動與關閉互不影響.

END

相關文章
相關標籤/搜索