對於提供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應用程序發生衝突,這些應用程序必須使用特定版本的必需圖書館。
感謝您的閱讀。