2016-03-08 75 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应用程序发生冲突,这些应用程序必须使用特定版本的必需图书馆。

感谢您的阅读。

回答