无缺格式见:https://www.zybuluo.com/Spancymath/note/1623555java
什么是WebService?web
基于web的服务,使用Web(HTTP)方式,接收和响应外部系统的某种请求,从而实现远程调用。ajax
//一、添加注解 @WebService public class OneService { //二、至少包含一个能够对外公开的服务 public String sayHello(String name){ System.err.println("invoke "+name); return "Hello "+name; } public static void main(String[] args) { //三、第一个参数称为Binding即绑定地址, //第二个参数是实现者,即谁提供服务 Endpoint.publish("http://localhost:9999/one", new OneService()); } } //4.在IE地址栏输入如下地址访问说明文件: http://localhost:9999/one?wsdl
经过wsimport生成本地代码spring
经常使用参数为:
-d <目录> - 将生成.class文件。默认参数。
-s <目录> - 将生成.java文件。
-p <生成的新包名> -将生成的类,放于指定的包下。
(wsdlurl) - http://server:port/service?wsdl,必须的参数。
示例:
C:/> wsimport –s . http://192.168.0.100/one?wsdl apache
总结
WebService和Web服务器的区别:WebService是Web服务器的应用,Web服务器是WebService运行所必须的容器。
WebService其内部是经过Socket实现的。编程
WebService的特色:服务器
var xhr = new XMLHttpRequest(); function sedAjax() { var url = "http://localhost:8081/hello"; var nameText = document.getElementById("name").value; var request = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<soap:Body><ns2:sayHi xmlns:ns2=\"http://server/\">" + "<arg0>" + nameText + "</arg0></ns2:sayHi></soap:Body></soap:Envelope>"; $.ajax({ url: url, type: "post", contentType: "application/soap+xml;charset=utf-8", data: request, success: function (data) { alert($(data).find("return").text()); } }) }
SOAP请求过程分析app
public class CxfServer1 implements ICxfServer1 { public String sayHi(String name) { return "Hello " + name; } public static void main(String[] args) { //声明实例,使用ServerFactoryBean发布服务 //使用CXF发布一个服务,与JDK6发布一个服务彻底不一样 //* 即便是不使用@WebService注解,同样能够发布成功 //* 即便此类没有对外公布的方法同样能够发布成功 ServerFactoryBean bean = new ServerFactoryBean(); //绑定到发布地址的端口 bean.setAddress("http://localhost:8080/cxf"); //设置服务接口,若是没有接口,则为本类 bean.setServiceClass(ICxfServer1.class); //设置接口实现类,即服务类 bean.setServiceBean(new CxfServer1()); //发布服务 bean.create(); System.err.println("启动成功"); } }
public class HelloImpl implements IHello { @Override public String sayHi(String name) { System.out.println("syaHi called"); return "Hello2 " + name; } public static void main(String[] args) { //使用jaxWs对其进行发布 JaxWsServerFactoryBean bean = new JaxWsServerFactoryBean(); //设置访问地址 bean.setAddress("http://localhost:8081/hello"); //注册服务接口 bean.setServiceClass(IHello.class); //注册服务实现类 bean.setServiceBean(new HelloImpl()); //添加消息拦截器 bean.getInInterceptors().add(new LoggingInInterceptor()); bean.getOutInterceptors().add(new LoggingOutInterceptor()); //启动 bean.create(); System.out.println("服务启动完成..."); }
<servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <!--<init-param> <param-name>config-location</param-name> <param-value>classpath:cxf-servlet.xml</param-value> </init-param>--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- 引入CXF Bean定义以下,早期的版本中使用 --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- 简单发布,没有接口 --> <jaxws:endpoint id="helloService" address="/hello" implementor="com.zhang.server1.HelloImpl"> <!--客户端请求的消息拦截器--> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxws:inInterceptors> <!--服务端响应的消息拦截器--> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxws:outInterceptors> </jaxws:endpoint>