加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService

发布时间:2020-12-16 22:13:01 所属栏目:安全 来源:网络整理
导读:引言: ? ? ? ? WebService web服务 :跨平台远程调用技术,采用的基于http协议的soap协议,协议中通信的xml ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (soap协议:通信的信息的规格。wsdl: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命令生成客户端代码
? ? ? ? ? ? 2. ?导包

? ? ? ? ? ? 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 注入即可。


五、RestFul规格的webservice:利用restful的传参规格,向ws传参<直接采用http协议通信,要快于soap协议>

? ? ? ? 流程:

? ? ? ? ? ? ? ? 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)浏览器直接访问(测试)
? ? ? ? ? 2)java本地的网络编程:HttpURLConnection

六、在项目中集成restful格式webservice
? ? ? ? ? ? ?1、导包

? ? ? ? ? ? ? 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、?访问服务: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?访问了发布的服务,并向服务传参

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读