2016-03-08 126 views
2

對於提供Web服務的普通JSP Web應用程序,應該在哪裏放置JAX-WS庫jar文件?Tomcat 8上的JAX-WS Web服務 - JAX-WS庫文件位置?

<tomcat-home>/lib 

<web-app>/WEB-INF/lib 

,爲什麼?

通常,庫文件何時被視爲容器基礎結構的一部分或Web應用程序的一部分?

詳情

我已經實現以下等等,這些指南各種JAX-WS Web服務:

https://jax-ws.java.net/2.2.10/docs

https://jaxenter.com/creating-soap-web-services-using-jax-ws-117689.html

http://www.mkyong.com/webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat/

http://examples.javacodegeeks.com/enterprise-java/jws/jax-ws-web-services-on-tomcat/

http://www.java2blog.com/2013/03/jaxws-webservice-deployement-on-tomcat.html

雖然上述指南是有用的,有兩個必需的JAX-WS庫JAR文件,並在JAX-WS庫JAR文件應該駐留方面的差異。

通過反覆試驗,對JDK 1.8,Tomcat的8.0.30 & JAS-WS 2.2.10,這是似乎是必需的JAX-WS的jar包的列表:

gmbal-api-only.jar 
ha-api.jar 
jaxb-core.jar 
jaxb-impl.jar 
jaxws-api.jar 
jaxws-rt.jar 
management-api.jar 
policy.jar 
stax-ex.jar 
streambuffer.jar 

我瞭解JDK包含一些JAX-WS類,但這些似乎是用於獨立Java應用程序 即上述所有jar文件似乎都需要避免ClassNotFoundException等。

我已閱讀Tomcat 8 class-loader how-to

和欣賞,有一個父樹,分層類加載器和在jar文件:

<web-app>/WEB-INF/lib 
  • 只適用於Web應用程序即是隱藏其他網絡應用程序
  • 導致應用程序戰爭文件臃腫,因爲每個Web應用程序都有自己的副本

,並在jar文件:

<tomcat-home>/lib 
  • 可用來和所有的網絡應用程序共享
  • 強制所有的網絡應用程序使用的庫相同的版本
  • 庫必須是跨網-app可共享即沒有靜態,線程安全等
  • 啓用通過JNDI資源工廠查找,例如JDBC,郵件等
  • 抑制DriverManager的內存泄漏,例如JDBC

當JAX-WS庫jar文件位於任一位置時,Web服務似乎工作。

望着Metro JAX-WS project, 在JAX-WS的jar包必須從以下地址下載,現在,我已經把這些變成< Tomcat的家>/lib中,因爲這是一致的螞蟻的「安裝」選項文件。

作爲一般規則,我儘量不使用不必要的庫jar文件污染web容器/應用程序服務器,因爲這可能導致其他web應用程序發生衝突,這些應用程序必須使用特定版本的必需圖書館。

感謝您的閱讀。

回答