1. 程式人生 > >Tomcat訪問路徑去掉髮布專案的專案名稱

Tomcat訪問路徑去掉髮布專案的專案名稱

需求: 
把釋出到Tomcat下的web專案,訪問路徑去掉專案名稱 

問題背景: 
以前的.net些的WebService,現在改用java來寫了。已經把wsdl搞的基本一致了,但是由於原webservice釋出到iis網站的根目錄了,所以訪問的時候也就沒有虛擬目錄的名字。但是java寫的WebService,放到Tomcat下的時候,預設會帶上專案的名稱。就多了這麼一段: 
如原來的wsdl為:http://localhost:8080/SearchReqService.asmx?wsdl 
現在的wsdl為:http://localhost:8080/Interface/SearchReqService.asmx?wsdl 
而且wsdl地址事先約定好了,不能改變,不然就牽扯到第三方改動、 

實現方式及原理: 

方式一: 
原理:Tomcat的預設根目錄是ROOT,實際上ROOT這個專案在實際生產環境是沒有用的,所以我們可以用我們的專案覆蓋ROOT專案 
操作過程: 
1.刪除ROOT下所有檔案及資料夾 
2.把我們專案的war包解壓後,專案目錄下的所有檔案和子目錄都拷貝到ROOT目錄下即可 
或者有更狠的一招:直接刪掉ROOT目錄,然後把我們的專案打包名稱改成ROOT.war,放到webapps下就行 

方式二: 
原理:Tomcat本身可以配置虛擬目錄。方法就是在Server.xml中<Engine><Host>節點下加入Context資訊。如我們可以配置<Context path=”/abc” docBase=”D:\app\abc” … />,那我們可以通過地址http://localhost:8080/abc來訪問我們放在D:\app\下面的abc專案。我們可以把這個path=”/abc”修改為path=”“。意思就是把abc對映到根目錄,訪問路徑就會變成http://localhost:8080/。 
操作過程: 
按照配置虛擬目錄的方式,在<Engine><Host>下新增一個Context節點,具體配置如下: 
Xml程式碼  收藏程式碼

  1. <Engine name=”Catalina” defaultHost=”localhost”…>  
  2. …  
  3.     <Host name=”localhost”  appBase=”webapps” unpackWARs=”true” autoDeploy=”true”>  
  4.     <Context path=”“ docBase=”Interface” reloadable=”true” />  
  5. <!–注:我這裡使用的是相對路徑,Interface專案是放在Tomcat的webapps目錄下的,當然也可以改為絕對路徑–>  
  6. …  
  7.     </Host>  
  8. …  
  9. </Engine>  


訪問方式就可以用http://localhost:8080/SearchReqService.asmx?wsdl了 
如果用虛擬目錄的方式,地址http://localhost:8080/Interface/SearchReqService.asmx?wsdl也可以訪問。 
同樣的方式,我們可以為path指定不同的路徑,解決訪問路徑區別專案名稱的需要。 


其它,去掉訪問的埠號8080.就是利用了HTTP請求訪問的埠預設是80的方式實現的,iis也一樣。我們只用把Tomcat的HTTP監聽埠號改為80(修改<Connector port=”8080” protocol=”HTTP/1.1”這裡的埠號為80)即可。