WebService
引言: ? ? ? ? WebService web服务 :跨平台远程调用技术,采用的基于http协议的soap协议,协议中通信的xml ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (soap协议:通信的信息的规格。wsdl:WebService的描述语言,描述服务的相关实现信息。) ? ? ? ? ? ? ? ? ? ? ?优点: *跨平台,采用了基于http协议的soap协议;跨越防火墙;对于项目和数据有极大复用,且将诸多项目,功能松耦合的集成。? ? ?缺点:采取的应用层的soap协议,速度慢。 webservicefu发布与调用: ? ? ? ?一、基于jdk底层机制 ? ? ? ? ? ? ? 1、发布服务 ? ? ? ? ? ? ? ? ? ?1)定制业务 //声明业务要称为一个webservice @WebService public class UserService { public String queryUser(String name){ System.out.println("name:"+name); return "c"+name; } ? ? ? ? ? ? ? ? ? ? 2) ?发布服务 ? ? ? ? ? ? ? ? ? ? ? ??Endpoint.publish("服务地址",服务实现); ? ? ? ? ? ? ?2、调用服务 ? ? ? ? ? ? ? ? ?1)生成客户端 ? ? dos窗口使用命令:【 wsimport ? -s ?. ?服务地址?wsdl】 ? ? ? ? ? ? ? ? ? 2)将生成代码复制到项目中 ? ? ? ? ? ? ? ? ? 3)写一个生成类调用业务方法 //获取服务 UserServiceService uss=new UserServiceService(); //通过服务,获取Port:可以执行功能 UserService us=uss.getUserServicePort(); //通过Port调用服务中的功能 String ret=us.queryUser("tian"); System.out.println("ret:"+ret); 二、基于webservice框架---CXF 利于将ws和现有的项目集成,技术集成。 与基于jdk底层机制的不同之处 1、导包 2、发布: <pre name="code" class="java"> JaxWsServerFactoryBean facBean=new JaxWsServerFactoryBean(); //服务地址,服务实现 facBean.setAddress("http://localhost:6969/cxf"); facBean.setServiceClass(TestService.class); facBean.setServiceBean(new TestService()); //发布 facBean.create();3、调用: <pre name="code" class="java"> JaxWsProxyFactoryBean facBean=new JaxWsProxyFactoryBean(); //设置服务的地址 facBean.setAddress("http://localhost:6969/cxf"); //设置服务 facBean.setServiceClass(TestService.class); //获取Port TestService ser=(TestService)facBean.create(); User user=ser.queryUser("tian"); System.out.println(user.getId()+" "+user.getName()); 三、cxf 和web项目集成:在web项目中管理webService. ? ? ? ? 1、导入jar包 ? ? ? ? 2、在spring的配置文件中添加配置:将web服务纳入工厂 <!-- 声明webservice的实现类 --> <bean id="uss" class="com.c.service.UserServiceImpl"></bean> <!-- 定制服务--> <jaxws:server address="/us"> <jaxws:serviceBean> <ref bean="uss"/> </jaxws:serviceBean> </jaxws:server>? ? ? ? ?3、在web.xml中添加配置 <!-- 访问项目中ws的中转 --> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- /apppname/ws/ws ==中转到 address为“/ws”的webservice --> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>? ? ? ? **至此已经将webservice集成到web项目中。 ? ?四、将webservice的客户端和web项目集成 ? ? ? ? ? ? 1.? wsimport命令生成客户端代码 ? ? ? ? ? ? 3.?通过jaxws schema 将客户端(usRemote)纳入工厂 ? ? ? ? ? ? ? <jaxws:client id="usClient" serviceClass="com.c.service.UserService" address="http://localhost:8989/ws_cxf_spring/ws/us?wsdl"> </jaxws:client>? ? ? ? ? ? 4. ?本地项目中哪里需要远程的功能,就将usRemote 注入即可。
? ? ? ? 流程: ? ? ? ? ? ? ? ? 1.导包 ? ? ? ? ? ? ? ? ?2.定制服务类 @WebService @Path("/rest52")//访问路径 public interface UserService { @GET //可以通过get请求访问此服务方法 @Path("/user/{name}")//访问路径 public User queryUser(@PathParam("name") String name); } public class xxx implements UserService{ ..... }? ? ? ? ? ? ? ? ?3.发布 ? JAXRSServerFactoryBean factoryB=new JAXRSServerFactoryBean(); factoryB.setAddress("http://localhost:4949/restful"); factoryB.setServiceClass(UserServiceI.class); factoryB.setServiceBean(new UserServiceI()); factoryB.create();? ? ? ? ? ? ? ? 4. 调用 ? ? ? ? ? ? ? ? ? ?1)浏览器直接访问(测试) 六、在项目中集成restful格式webservice ? ? ? ? ? ? ? 2、定制服务类 @WebService @Path("/rest")//访问路径 public interface UserService { @GET //可以通过get请求访问此服务方法 @Path("/user/{name}")//访问路径 public User queryUser(@PathParam("name") String name); } public class xxx implements UserService{ ..... }? ? ? ? ? ? ? 3、将服务纳入工厂:在spring的工厂配置文件中 //声明服务的实现类 <bean id="userService" class="com.romate.service.UserServiceI"/> //发布服务 <jaxrs:server address="/rest"> <jaxrs:serviceBeans> <ref bean="userService"/> </jaxrs:serviceBeans> </jaxrs:server>? ? ? ? ? ? ?4、调用服务:需要CXFServlet的中转 <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- /apppname/ws/ws1 ==中转到 address为“/ws”的webservice --> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>? ? ? ? ? ? ? ?5、?访问服务: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?访问了发布的服务,并向服务传参 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |