博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十一)web服务与javaweb结合(2)
阅读量:6118 次
发布时间:2019-06-21

本文共 4124 字,大约阅读时间需要 13 分钟。

一、解决问题及解决方法

  • 解决问题:上章节用监听器的方式是有缺陷的:web服务的端口和web工程的端口不能一致。
  • 解决方案:将webService绑定到web工程中,使得共用一个端口。

 

二、案例

  2.1  创建一个web工程名:web_webService

  2.2  编写两个服务接口

  • 注意:
  1.   本例使用apache CXF3.2.0的框架来架构webService服务
  2.        在接口定义之前加上@WebService标注,表明这是一个WebService服务,否则在生成服务端时不能找到相应的接口;
  3.       这里@WebService标注的targetNamespace一定要填写内容,不然在生成WebService服务端的时候会报如下的错误,这个命名空间起始就是包名的倒序。
package www.shyroke.com;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;@WebService(targetNamespace="http://service.shyroke.com/")public interface IFirst {    @WebResult(name="addResult")    public int add(@WebParam(name="x")int x,@WebParam(name="y")int y);}
package www.shyroke.com;import javax.jws.WebResult;import javax.jws.WebService;/** * 锟节讹拷锟斤拷锟接口凤拷锟斤拷 * 锟斤拷锟节伙拷取锟斤拷前系统时锟斤拷 * @author Administrator * */@WebService(targetNamespace="http://service.shyroke.com/")public interface ISecond {            @WebResult(name="getSysTimeResult")    public String getSysTime();}

 

 

  2.2  编写服务接口实现类

package www.shyroke.com;import javax.jws.WebService;@WebService(endpointInterface="www.shyroke.com.IFirst")public class FirstImpl implements IFirst {    @Override    public int add(int x, int y) {        return x+y;    }}
package www.shyroke.com;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import javax.jws.WebService;@WebService(endpointInterface = "com.shyroke.service.ISecond")public class SecondImpl implements ISecond {    @Override    public String getSysTime() {        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        Date date = new Date();        return dateFormat.format(date);    }        }

 

  2.3  发布服务并把服务绑定到web工程

  • 生成webService服务  : File->New->Other->Web Services->WebService,在Service implementation中选择提供服务的实现类。
  • 上述发布了第一个服务并绑定到了web工程,第二个服务的发布也按照上面图的操作来做即可。
  • 发布完两个服务的项目结构为下图:
  •  

  • 注意:    1. 到现在为止如果开启服务器会报错,因为工具在cxf-beans.xml中生成了如下,而我们在该目录下并没有,所以要把这三行去掉:
  •  注意:    2. 在cxf-beans.xml中把<jaxws:endpoint>属性里面有serviceName的属性和endpointName和address属性去掉,如下:
  • 注意:3. 修改 firstimpl.wsdl和secondimpl.wsdl文件中的端口号,不能和tomcat工程一致(本例中的tomcat端口号为8080)
  • firstimpl.wsdl
  • secondimpl.wsdl
  • 2.4      启动服务

  •  查看web.xml ,可知webservice的端口url-pattern
web_webService
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
Apache CXF Endpoint
cxf
cxf
org.apache.cxf.transport.servlet.CXFServlet
1
cxf
/services/*
60
contextConfigLocation
WEB-INF/cxf-beans.xml
org.springframework.web.context.ContextLoaderListener

 

   2.5  生成客户端

  •  用工具生成客户端(具体步骤查看前几章)

 

  2.6  测试

 

package www.chyroke.com.test;import com.shyroke.service.IFirst;import www.shyroke.client.FirstImplService;public class TestkMain {    public static void main(String[] args) {        FirstImplService firstService=new FirstImplService();        IFirst iFirst=firstService.getFirstImplPort();        System.out.println("result==="+iFirst.add(5, 8));    }}

结果:

  •  缺陷:虽然将webservice和web项目绑定在了一起,但是还是不能共同一个端口。

转载于:https://www.cnblogs.com/shyroke/p/7668536.html

你可能感兴趣的文章
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>
设计模式(十一):FACADE外观模式 -- 结构型模式
查看>>
iOS xcodebuile 自动编译打包ipa
查看>>
程序员眼中的 SQL Server-执行计划教会我如何创建索引?
查看>>
【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
查看>>
cmake总结
查看>>
数据加密插件
查看>>