对于提供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应用程序发生冲突,这些应用程序必须使用特定版本的必需图书馆。
感谢您的阅读。