一小时学做网站,php 打开网站,网站无法访问的原因,怎么做展示型网站Web service是一个平台独立的#xff0c;松耦合的#xff0c;自包含的、基于可编程的web的应用程序#xff0c;可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序#xff0c;用于开发分布式的互操作的应用程序。webservice用的是soap协议。 客户通过发送请求… Web service是一个平台独立的松耦合的自包含的、基于可编程的web的应用程序可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序用于开发分布式的互操作的应用程序。webservice用的是soap协议。 客户通过发送请求(大部分是 XML消息)来召唤 WebServices 而服务则返回 XML 响应。WebServices 通过网络调用通信 HTTP作为两个框架之间的网络公认的最广泛的方法。Web 服务等效于 SOA (面向服务的体系结构) 并且从根本上依赖于度量例如 XML-RPC和 SOAP (简单对象访问协议)。 Java项目中可以使用注解 WebService 注解你可以将普通的 Java 类转换成可发布为 Web 服务的类。 WebService 是 Java API for XML Web ServicesJAX-WS中的注解用于标识一个类或接口作为一个可通过网络访问的 Web 服务。
WebService注解 WebService-定义服务有以下配置项 targetNamespace指定命名空间一般是接口的包名倒序 nameportType的名称客户端生成代码时 为接口名称 portNameport的名称 serviceName服务名称 endpointInterfaceSEI接口地址如果一个服务类实现了多个接口只需要发布一个接口的方法可通过此注解指定要发布服务的接口。 类上添加注解WebService则类中所有 非静态方法 都会被发布静态方法和 final 方法不能被发布方法上加WebMentod(excludetrue)后此方法不被发布
WebMethod注解 WebMethod-定义方法在公开方法上边 operationName方法名 exclude设置为true表示此方法不是webservice方法反之则表示webservice方法默认是false WebParam WebParam-定义参数在方法参数前边 name指定参数的名称 WebResult WebResult-定义返回值在方法返回值前边 name返回结果值的名称 首先先实现一个接口
package com.zhong.test.webservice;import java.util.List;import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;WebService(name WebServiceTest, targetNamespace http://server.webservice.example.com)
public interface WebServiceTest{WebMethodString emrService(WebParam(name name) String name,WebParam(name info) String info);WebMethodString student1111(WebParam(name name) String name,WebParam(name info) String info);WebMethodString aboutstudent(WebParam(namestudent) Student student);WebMethodString studentlist(ListStudent list1);
}
然后在想要实现的服务中实现接口
package com.zhong.test.webservice;import java.util.List;import javax.jws.WebParam;
import javax.jws.WebService;import org.springframework.stereotype.Component;Component
WebService( targetNamespace http://server.webservice.example.com,endpointInterface com.zhong.test.webservice.WebServiceTest)
public class WebServicecTestImp implements WebServiceTest{Overridepublic String emrService( String name,String info) {if(null name|| .equals(name.trim())){return 传入的参数为空;}return namenameinfoinfo;}Overridepublic String student1111(String name, String info) {return namenameinfoinfo;}Overridepublic String aboutstudent(Student student) {System.out.println(studentnull);return student.getName()student.getName();}Overridepublic String studentlist(ListStudent list1) {return list1.size()list1.size();}}
然后再配置文件中注入配置;
package com.zhong.test.webservice;import javax.xml.ws.Endpoint;import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class WebServiceConfig {Autowiredprivate WebServiceTest webServiceTest;/*** Apache CXF 核心架构是以BUS为核心整合其他组件。* Bus是CXF的主干, 为共享资源提供一个可配置的场所作用类似于Spring的ApplicationContext这些共享资源包括* WSDl管理器、绑定工厂等。通过对BUS进行扩展可以方便地容纳自己的资源或者替换现有的资源。默认Bus实现基于Spring架构* 通过依赖注入在运行时将组件串联起来。BusFactory负责Bus的创建。默认的BusFactory是SpringBusFactory对应于默认* 的Bus实现。在构造过程中SpringBusFactory会搜索META-INF/cxf包含在 CXF 的jar中下的所有bean配置文件。* 根据这些配置文件构建一个ApplicationContext。开发者也可以提供自己的配置文件来定制Bus。* 非必要项*/Bean(name Bus.DEFAULT_BUS_ID)public SpringBus springBus() {return new SpringBus();}/***** 这里需要注意 由于springmvc 的核心类 为DispatcherServlet,此处若不重命名此bean的话 原本的mvc就被覆盖了。可查看配置类DispatcherServletAutoConfiguration* 一种方法是修改方法名称 或者指定bean名称,* 这里需要注意 若beanName命名不是 cxfServletRegistration 时会创建两个CXFServlet的。具体可查看下自动配置类Declaration org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration** 也可以不设置此bean 直接通过再application中的配置项 cxf.path 来修改访问路径的* http://127.0.0.1:8080/soap/列出服务列表 或 http://127.0.0.1:8080/soap/ws/api?wsdl 查看实际的服务*/
Bean(cxfServletRegistration)
public ServletRegistrationBean dispatcherServlet() {//注册servlet 拦截/ws 开头的请求 不设置 默认为/services/*return new ServletRegistrationBean(new CXFServlet(), /ws/*);
}Beanpublic Endpoint endpoint() {EndpointImpl endpoint new EndpointImpl(springBus(), webServiceTest);endpoint.publish(/ws/api);return endpoint;}
}
测试的时候也可以使用一下方式测试
ublicstatic void main(String[] args) { /*** 参数1服务的发布地址* 参数2服务的实现者*/ Endpoint.publish(http://192.168.24.138:456/helloWord,new WebServiceTestImpl()); } EndPoint是 jdk 提供的一个专门用于发布服务的类该类的publish()方法接收两个参数一个是本地的服务地址二是提供服务的类。位于javax.xml.ws.Endpoint包中。