需求:
把發布到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節點,具體配置如下:
- <Engine name="Catalina" defaultHost="localhost"...>
- ...
- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
- <Context path="" docBase="Interface" reloadable="true" />
- <!--注:我這里使用的是相對路徑,Interface項目是放在Tomcat的webapps目錄下的,當然也可以改為絕對路徑-->
- ...
- </Host>
- ...
- </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)即可。