【功能设计】
1. 完成简单的两个整数相加、相减、相乘、相除;
2. 重点是学会用JAX-WS发布WebService,并调用该WebService;
3. 了解JAX-WS的工作机制;
【流程设计】
1. 建立WebServiceProject(IntegerCalculator);
2. 创建普通的JavaClass(IntegerCalculator.java),实现WebService的业务逻辑;
3. 创建一个WebService;
1) NewèMyEclipseèWebServicesèWebSerivce;
2) 选择“jax-ws”,在“Strategy”中选择“CreateWebServiceFromJavaBean”(因为上面已经建立了实现业务逻辑的类了,现在只是将其发布为WebService);
3) 选择上面建立的Java Class(IntegerCalculator.java);
4) 点Finish,向导会自动生成:
(1) IntegerCalculatorDelegate.java,作用:IntegerCalculator的接口,生成该类的事例并调用该类的方法;
(2) 在WEB-INF中生成Web.xml,作用:配置监听器以及Servlet的实现类;
(3) 在WEB-INF中生成sun-jaxws.xml,作用:配置WebServicePort的实现类(IntegerCalculatorDelegate.java)
(4) 在WEB-INF中生成WSDL,作用:描述该WebService的信息;
4. 发布WebService;
1) 直接利用右击项目名称èRunAsèMyEclipseServerApplication,就默认为将其部署到MyEclipse默认的服务器(Tomcat)上,并运行服务器了;
2) 目前只有MyEclipse6.5以上的版本自带的Tomcat上加入了jax-ws的架包,如果我们采用其他的Server,还需要我们在项目中采用“buildPathèMyEclipseLibrariesèJAX-WS的两个包”的方式,在项目中加入需要的包,或者将用到得包直接放到Server上去;
5. 通过WebServiceExplorer来访问WebService;
1) 访问地址:http://localhost:8080/ProjectName/PortName?WSDL(本例中为:
http://localhost:8080/IntegerCalculator/IntegerCalculatorPort?WSDL)
2) 在“WebServiceExplorer”中选“WSDLMain”,输入访问地址即可;
4. 生成Client来访问WebService;(IntegerCalculatorClient项目中)
1) 新建一个JavaProject(IntegerCalculatorClient);
2) 加入jax-ws的两个架包;
3) 建立WebServiceClient:NewèMyEclipseèWebServiceClient;
3) 输入“WSDLURL”:http://localhost:8080/ProjectName/PortName?WSDL,或者
如果WSDLFile在本地也可以导入该File所在位置;这样会在你们指定的文件夹中自动生成很多类;
4) 再建立一个文件夹,在其中写调用WebService的Client类,并在其中写main()方法:
(1) 创建该WebService实例;
(2) 通过该实例得到服务的Port(即在本地生成了一个该WebService的代理);
(3) 通过该代理来调用服务中的方法;
【小结】
1. JAX-WS的工作机制;
1) 其为每个WebService都配置了一个Servlet;
2) 为一个或多个WebService设置了监听器(LIstener),时刻监听对于“<url-patern/>”的访问,当遇到对其的访问时就交给相应的Servlet的实现类来处理;
3) PortName:是和WebService绑定在一起的。
4) 调用jax-ws发布的WebService流程(如截图00):
原理:
Server端:Listener一直在8080端口上监听着,只要有“/IntegerCalculatorPort”的Soap消息就调用相应的Servlet(一个WebService对应着一个Servlet)来处理(这些都在Web.xml中设定好),对应的Servlet实现类会做如下处理:
(1) 找到给WebService对应的Port(Port和WebService是Binding在一起的);
(2) 在“sun-jaxws.xml”中找到给Port的实现类,即为XXXDelegate;
(3) 该Delegate的实现就是调用WebService的实现类;
SP会发布出WebService的WSDL,Client主要是通过得到它来调用WebService;
Client端:(1) 在本地得到WSDL文档(或得到WSDL文档的URL);
(2) 通过XML解析来为该WebService设定本地代理;
(3) 通过创建的WebService的本地代理来调用该WebService