上一节介绍了如何使用CXF 来发布服务,但是没有介绍使用web 容器来发布,很多项目需要用tomcat 这样的容器来发布。另外本节将介绍CXF 与spring 结合的方法。

一 目标:

1、利用sping的ioc特性,进行发布服务对象的配置

2、通过tomcat 发布服务

二、环境准备

1、利用上一节的工程源码,做少量调整

2、myeclipse2015

3、使用spring 3.0 和cxf 2.7.6

三、实践步骤

1、新建web project 工程
注意里面需要勾选的地方

建议一路next 下去,而不是直接finish,在最后一页,把web.xml 勾选上,再finish

2、新建工程后,前面2节中涉及的java 类都copy 到当前工程里面,同时建立lib库,将相关的lib 添加到build path

源码结构如下图:

添加依赖的lib,结构如下

修改源码 StudentWsImpl.java 类,主要是去掉main方法中内容,因为现在的发布在tomcat容器中

  1. package com.study.cxfws.impl;
  2. import javax.jws.WebService;
  3. import com.study.cxfws.StudentWs;
  4. import com.study.dao.StudentDAO;
  5. import com.study.dao.impl.StudentDAOImpl;
  6. @WebService
  7. public class StudentWsImpl implements  StudentWs {
  8. //Student的dao 类,负责处理student 实体类的操作
  9. private StudentDAO studentDAO;
  10. public  StudentWsImpl(){
  11. studentDAO = new StudentDAOImpl();
  12. }
  13. public boolean addStudent(String name, String sex, String birthday) {
  14. // 调用studentDAO.addStudent 方法入库
  15. System.out.println("Now put student into DB!");
  16. studentDAO.addStudent(name, sex, birthday);
  17. return true;
  18. }
  19. public String queryStudent(String studentName) {
  20. System.out.println("StudentWsImpl queryStudent->"+studentName);
  21. Object tmp = studentDAO.queryStudent(studentName);
  22. if (tmp== null) {
  23. return "null";
  24. } else {
  25. return tmp.toString();
  26. }
  27. }
  28. public static void main(String[] args) {
  29. }
  30. }

3、 在src 目录下,配置sping 的配置文件

在src 目录,新建一个sping的配置文件applicationContext-server.xml  名字可以根据自己习惯修改,内容如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  9. http://cxf.apache.org/jaxws
  10. http://cxf.apache.org/schemas/jaxws.xsd">
  11. <import resource="classpath:META-INF/cxf/cxf.xml" />
  12. <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
  13. <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
  14. <span style="color:#ff0000;"> <bean id="StudentWsImpl" class="com.study.cxfws.impl.StudentWsImpl" />
  15. <jaxws:server id="StudentSpingWs" serviceClass="com.study.cxfws.StudentWs"
  16. address="/StudentSpingWs">
  17. <jaxws:serviceBean>
  18. <ref bean="StudentWsImpl" />
  19. </jaxws:serviceBean>
  20. </jaxws:server>  </span>
  21. </beans>

这里xml 配置文件里面,  bean id 指定了web service 接口实现类,也就是调用接口后实际业务逻辑的实现类;  server id 和address 是 web service接口暴露的地址,对应的是接口类 StudentWs, 而这个服务的serviceBean 指定为接口实现类,这样就指定了运行时调用的实现类。  这个配置也就是sping核心的ioc控制反转功能,通过配置文件将依赖的对象,用配置文件来实现依赖注入,从而实现控制反转。

4、修改web.xml 文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  3. <display-name>StudyWsSpringCXF</display-name>
  4. <span style="color:#ff0000;">  <context-param>
  5. <param-name>contextConfigLocation</param-name>
  6. <param-value>
  7. classpath:applicationContext-server.xml
  8. </param-value>
  9. </context-param></span>
  10. <listener>
  11. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  12. </listener>
  13. <span style="color:#ff0000;"><servlet>
  14. <servlet-name>CXFServlet</servlet-name>
  15. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  16. <load-on-startup>1</load-on-startup>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>CXFServlet</servlet-name>
  20. <url-pattern>/services/*</url-pattern>
  21. </servlet-mapping></span>
  22. <welcome-file-list>
  23. <welcome-file>index.html</welcome-file>
  24. <welcome-file>index.htm</welcome-file>
  25. <welcome-file>index.jsp</welcome-file>
  26. <welcome-file>default.html</welcome-file>
  27. <welcome-file>default.htm</welcome-file>
  28. <welcome-file>default.jsp</welcome-file>
  29. </welcome-file-list>
  30. </web-app>

context-param里面指定了spring 配置文件

5、发布到tomcat里面

在myeclipse里面,找到server,右键  tomcat 7.0

选择Add/Remove Deployments 后,在弹出对话框里面,选择本工程进行发布

6、 运行tomcat

运行后,如果在console 窗口,出现下面内容,说明tomcat 已经运行起来

  1. 二月 04, 2017 11:24:24 上午 org.apache.coyote.AbstractProtocol start
  2. INFO: Starting ProtocolHandler ["http-bio-8080"]
  3. 二月 04, 2017 11:24:24 上午 org.apache.coyote.AbstractProtocol start
  4. INFO: Starting ProtocolHandler ["ajp-bio-8009"]
  5. 二月 04, 2017 11:24:24 上午 org.apache.catalina.startup.Catalina start
  6. INFO: Server startup in 14766 ms

7、查看发布的服务

通过下面url ,来查看发布的服务:http://localhost:8080/StudyWsSpringCXF/services   这里StudyWsSpringCXF是工程项目的名称,如果一切正常,打开的界面如下:

可以点击红框中内容获取wsdl 文档。

四、通过客户端验证

运行之前的客户端,验证一下发布的服务端能正常工作,需要注意的是,需要修改客户端类StudentWsClient.java里面调用服务端的地址,与当前发布的服务端一致

factory.setAddress("http://localhost:8080/StudyWsSpringCXF/services/StudentSpingWs");

五、总结

通过sping+tomcat+cxf 发布webservice 服务的步骤如下:

1、建立工程、编写web service 服务端相应的代码,实现业务逻辑

2、编写sping的配置文件 applicationContext.xml 文件,这个文件放在src 的根目录下

3、编写配置web.xml 文件

4、发布到tomcat中、并进行调试

附:在本机环境下,执行10000次查询,关闭掉system打印,耗时:run time=37410 毫秒,平均每秒268次

Webservice实践(七)CXF 与Spring结合+tomcat发布的更多相关文章

  1. WebService学习总结(六)--CXF 与Spring结合+tomcat发布

    该项目在上文   WebService学习总结(四)--基于CXF的服务端开发  的基础上修改为spring上发布的webservice接口 1.新建web project 工程 2.导入spring ...

  2. WebService—CXF整合Spring实现接口发布和调用过程

    一.CXF整合Spring实现接口发布 发布过程如下: 1.引入jar包(基于maven管理) <!-- cxf --> <dependency> <groupId> ...

  3. 使用Spring和Tomcat发布CXF REST WebService

    与发布SOAP WS一样, 同样需要在web.xml文件中配置CXFServlet: <!--cxf的Servlet--> <servlet> <servlet-name ...

  4. 使用Spring和Tomcat发布CXF SOAP WebService

    上一节中使用代理工厂JaxWsProxyFactoryBean来发布WebService, 这种方式必须指定运行的端口,如果端口被占用,就会发布失败. cxf的WebService也可利用Tomcat ...

  5. java的WebService实践(cxf)

    Java发布WebService,结合Spring,通过cxf的方式 难点:1.引用什么jar包: 1.创建接口 源码如下: package com.nankang; import javax.jws ...

  6. webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成

    首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...

  7. CXF整合Spring发布WebService实例

    一.说明: 上一篇简单介绍了CXF以及如何使用CXF来发布一个简单的WebService服务,并且介绍了客户端的调用. 这一篇介绍如何使用CXF与spring在Web项目中来发布WebService服 ...

  8. 【WebService】WebService之CXF和Spring整合(六)

    前面介绍了WebService与CXF的使用,项目中我们经常用到Spring,这里介绍CXF与Spring整合 步骤 1.创建一个Maven Web项目,可以参照:[Maven]Eclipse 使用M ...

  9. 【WebService】——CXF整合Spring

    相关博客: [WebService]--入门实例 [WebService]--SOAP.WSDL和UDDI 前言: 之前的几篇博客基本上都是使用jdk来实现WebService的调用,没有使用任何框架 ...

随机推荐

  1. e684. 以多种格式打印

    A Book object is used when printing pages with different page formats. This example prints the first ...

  2. e681. 基本的打印程序

    Note that (0, 0) of the Graphics object is at the top-left of the actual page, outside the printable ...

  3. (转)Tiny210v2( S5PV210 ) 平台下 FIMD 对应 的 framebuffer 驱动中,关于 video buffer 的理解

    原文:http://www.arm9home.net/read.php?tid-25938.html 管理提醒: 本帖被 xoom 执行加亮操作(2012-12-13) 如之前所说,一直想知道显示数据 ...

  4. HDU 1020:Encoding

    pid=1020">Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  5. 转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. javascript 高级选择器:querySelector 和 querySelectorAll

    querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流 ...

  7. java socket通信-传输文件图片--传输图片

    ClientTcpSend.java   client发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io ...

  8. 九度 1547 出入栈(递推DP)

    题目描述: 给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈.要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一 ...

  9. MySQL - Show Processlist 整理

    MySQL - Show Processlist 整理   原文来源:MySQL 5.5 Reference Manual 部分翻译取自:<MySQL_5.1中文参考手册> 转载请注明原文 ...

  10. 网络子系统46_ip协议数据帧的转发

    //调用路径ip_rcv->ip_rcv_finish->dst_input->(skb->dst->input) //ip_forward以回调函数的形式,保存在skb ...