什么是web service
web service其实是一组API,将服务器上的功能暴露出来以供客户端访问.
Client1---------------------soap,xml----->WEB SERVICE
Client2---------------------wsdl----------->WEB SERVICE

什么是SOAP
http + xml
HEADER

RPC--------------> WEB SERVICE

-xml format-
---------SOAP---------
---------------HTTP----------------

第一章:web service实践

生成一个sdk,一个server,可以被调用的服务。发布服务

step 1.1写一个sdk

package com.qf.webservice;
/*** define a service of weather query* @Author JennieChen */public interface IWeatherService {public String query(String cityName);
}
package com.qf.webservice;import javax.jws.WebService;@WebService
public class WeatherServiceImpl implements IWeatherService{@Overridepublic String query(String cityName) {System.out.println("query"+cityName);return "sunny day";}
}
package com.qf.webservice;import javax.xml.ws.Endpoint;public class Main {public static void main(String[] args) {Endpoint.publish("http://localhost:8080/weatherService",new WeatherServiceImpl());System.out.println("public success!");}
}

public success!

步骤:
1.接口
2.实现类+@WebService
3.main中发布服务
Endpoint.publish(Address,Implementator); 发布地址,实现类

有了这项WebService,就生成了wsdl

查看:

http://localhost:8083/weatherService?wsdl

http://localhost:8083/weatherService?xsd=1

step1.2 publish service

另一种实现方法:

package com.qf.webservice.client;import com.qf.webservice.WeatherServiceImpl;import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;public class Client {public static void main(String[]args) throws MalformedURLException {//WeatherServiceImplService service = new WeatherServiceImplService();URL url=new URL("http://localhost/8080/webService?wsdl");QName qName=new QName("http://webservice.qf.com/","WeatherServiceImplService");Service service= Service.create(url,qName);WeatherServiceImpl port=service.getPort(WeatherServiceImpl.class);String query=port.query("beijing");System.out.println(query);}
}

多写两步:
URL url=new URL(“http://localhost/8080/webService?wsdl”);
QName qName=new QName(“http://webservice.qf.com/”,“WeatherServiceImplService”);
得到service

实践:java 访问服务

1.生成客户端代码

check wsdl 服务说明书
(web service description language)

cmd:
step1:
cd 进去\IdeaProjects\webservice_client_1项目路径:

C:\Users\45058>cd C:\Users\45058\IdeaProjects\webservice_client_1
C:\Users\45058\IdeaProjects\webservice_client_1>wsimport -s . http://localhost/8080/webService?wsdl
parsing WSDL...Generating code...Compiling code...C:\Users\45058\IdeaProjects\webservice_client_1>

step2:
wsimport(web service import命令+wsdl)操作,可以根据wsdl说明书
在idea中逆向生成代码

step3:
编写一个Client:
从wsdl中查询三个值:
–WeatherServiceImplService
–WeatherServiceImpl
–一开始,在webservice_server_jdk接口中定义好的方法query

进一步实践:访问网络的服务

例子1: 获取手机号码信息

通过这个例子,
巩固调用web service的概念。
拿到网络上的wsdl

step1:调用一个网站上的信息:
http://www.webxml.com.cn/zh_cn/web_services.aspx

选择并点击wsdl接口
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

step2:新建一个java project、module
webservice_network_client_3
cd 进去

C:\Users\45058\IdeaProjects\webservice_network_client_3\src
C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_3\src>wsimport -s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
parsing WSDL...[WARNING] Ignoring SOAP port "MobileCodeWSSoap12": it uses non-standard SOAP 1.2 binding.
You must specify the "-extension" option to use this binding.line 199 of http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl[WARNING] ignoring port "MobileCodeWSHttpGet": no SOAP address specified. try running wsimport with -extension switch.line 202 of http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl[WARNING] ignoring port "MobileCodeWSHttpPost": no SOAP address specified. try running wsimport with -extension switch.line 205 of http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdlGenerating code...Compiling code...C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_3\src>

逆向生成代码
step3:添加一个client-main入口

3.1
先从wsdl文件http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl中
找到service,portType,operation三项:

<wsdl:service name=“MobileCodeWS”>

<wsdl:portType name=“MobileCodeWSSoap”>
<wsdl:operation name=“getMobileCodeInfo”>

<wsdl:portType name=“MobileCodeWSHttpGet”>
<wsdl:operation name=“getMobileCodeInfo”>

<wsdl:portType name=“MobileCodeWSHttpPost”>
<wsdl:operation name=“getMobileCodeInfo”>

package cn.com.webxml;public class Client {public static void main(String[] args) {MobileCodeWS service = new MobileCodeWS();MobileCodeWSSoap port=service.getPort(MobileCodeWSSoap.class);String query=port.getMobileCodeInfo("159****0532",null);System.out.println(query);}
}

output:

159****0532:福建 福州 福建移动全球通卡

进一步实践:

例子2 获取天气信息:

step1:新建项目,webservice_network_client_4
拷贝项目src的路径:C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_4
step2:
点击天气预报的wsdl
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
step3:重复wsimport的步骤
C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_4\src>wsimport -s . http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

发现报错。
修复:
3.1在wsdl页面右键,查看source code

3.2拷贝source code并保存到client4-src下面
命名为weather.wsdl
即,改成从本地wsdl说明书读取信息。
CMD再跑wsimport,改成本地来源的wsdl:

C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_4\src>wsimport -s . C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_4\weather.wsdl

但wsimport仍然报错
修改多处下面这行:

 <s:element ref="s:schema"/><s:any/>

改成:

<!--  <s:element ref="s:schema"/>-->
<s:any minOccurs="2" maxOccurs="2"/>

再跑:

C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_4\src>wsimport -s . C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_4\weather.wsdl

查看src文件夹,成功了。
从wsdl文件中读取:

<wsdl:service name=“WeatherWS”>
<wsdl:portType name=“WeatherWSSoap”>
<wsdl:operation name=“getRegionDataset”>

添加一个client-main方法
三部曲:

package cn.com.webxml.client;import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;import java.util.Arrays;
import java.util.List;/***<wsdl:service name="WeatherWS">*     <wsdl:portType name="WeatherWSSoap">*<wsdl:operation name="getRegionDataset">*/
public class Client {public static void main(String[] args) {WeatherWS service=new WeatherWS();WeatherWSSoap port = service.getPort(WeatherWSSoap.class);//System.out.println(port.getWeather("北京", null).getString());List<String> list = port.getWeather("福州", null).getString();for(String l:list){System.out.println(l);}}
}

福建 福州
福州
2210
2021/06/26 22:12:34
今日天气实况:气温:27℃;风向/风力:南风 1级;湿度:92%
紫外线强度:最弱。
中国人民保险感冒指数:少发,感冒机率较低,避免长期处于空调屋中。
健臻·血糖指数:易波动,气温多变,血糖易波动,请注意监测。
穿衣指数:炎热,建议穿短衫、短裤等清凉夏季服装。
洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。
紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。
6月26日 小雨转多云
26℃/33℃
无持续风向小于3级
7.gif
1.gif
6月27日 小雨转多云
27℃/33℃
无持续风向小于3级
7.gif
1.gif
6月28日 小雨转多云
27℃/33℃
南风3-4级转无持续风向小于3级
7.gif
1.gif
6月29日 小雨转多云
27℃/32℃
西南风3-4级转无持续风向小于3级
7.gif
1.gif
6月30日 中雨转多云
27℃/31℃
南风3-4级转无持续风向小于3级
8.gif
1.gif

实践:中英文翻译

step1:新建一个client5
拷贝src文件夹路径。
step2:
打开网页,
查看
http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl说明书
(由于无法wsimport)
右键点source page
拷贝到项目文件夹中
保存成translate.wsdl

step3:修改wsdl中
3.1修改

                                <s:any minOccurs="2" maxOccurs="2"/>

3.2并且第一行空行删除

step4:
wsimport


C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_5\src>wsimport -s . C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_5\translate.wsdl
parsing WSDL...[WARNING] Ignoring SOAP port "EnglishChineseSoap12": it uses non-standard SOAP 1.2 binding.
You must specify the "-extension" option to use this binding.line 553 of file:/C:/Users/45058/IdeaProjects/webservice_client_1/webservice_network_client_5/translate.wsdl[WARNING] ignoring port "EnglishChineseHttpGet": no SOAP address specified. try running wsimport with -extension switch.line 556 of file:/C:/Users/45058/IdeaProjects/webservice_client_1/webservice_network_client_5/translate.wsdl[WARNING] ignoring port "EnglishChineseHttpPost": no SOAP address specified. try running wsimport with -extension switch.line 559 of file:/C:/Users/45058/IdeaProjects/webservice_client_1/webservice_network_client_5/translate.wsdlGenerating code...Compiling code...C:\Users\45058\IdeaProjects\webservice_client_1\webservice_network_client_5\src>

step5:

package cn.com.webxml.client;import cn.com.webxml.EnglishChinese;
import cn.com.webxml.EnglishChineseSoap;
import cn.com.webxml.TranslatorResponse;import java.util.Arrays;/***  <wsdl:service name="EnglishChinese">*   <wsdl:portType name="EnglishChineseSoap">*     <wsdl:operation name="Translator">*/
public class Client {public static void main(String[] args) {EnglishChinese service=new EnglishChinese();EnglishChineseSoap port = service.getPort(EnglishChineseSoap.class);System.out.println((port.translatorString("china").getString()));}
}

[China, 'tʃainə, , n. 中国,瓷器, 3211.mp3]

自己发送符合soap格式的请求数据

eclipse提供的webservice网页

测试接口是否正常:
https://www.bilibili.com/video/BV1W4411M7c3?p=8

从eclipse中打开
地球右侧:lauch the web service explorer:

输入地址:
可以看到查询结果:打印: sunny day!

https://www.bilibili.com/video/BV1W4411M7c3?p=10&spm_id_from=pageDriver
@WebService
@WebParam
@WebResult
@WebMethod (exclude=true) ----- not published to the outside

summary:
https://www.bilibili.com/video/BV1W4411M7c3?p=11

第二章:webservice框架:

CXF
https://www.bilibili.com/video/BV1W4411M7c3?p=12
spring整合CXF
开发SSM项目

setup:
1.download cxf package
2.set env variables “CXF_HOME”, put it into path
3.copy lib from cxf package-lib
4。test cxf using factory pattern
/**
* factory pattern: address, interface, implementor class
*/

package webservice_cxf_server;
import javax.jws.WebService;
@WebService
public interface IWeatherService {public String query(String cityName);
}
package webservice_cxf_server;
public class WeatherServiceImpl implements IWeatherService{@Overridepublic String query(String cityName) {System.out.println("query"+cityName);return "it is sunny day, if you are happy.";}
}
package webservice_cxf_server.client;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import webservice_cxf_server.IWeatherService;
import webservice_cxf_server.WeatherServiceImpl;public class Client {public static void main(String[] args) {/*** factory pattern: address, interface, implementor class*/JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();factoryBean.setAddress("http://localhost:8888/weatherService"); //addressfactoryBean.setServiceClass(IWeatherService.class); //interfacefactoryBean.setServiceBean(new WeatherServiceImpl()); // implementor classfactoryBean.create();System.out.println("publish success!");}
}

C:\Users\45058\IdeaProjects\webservice_client_1\webservice_cxf_server\src\webservice_cxf_server>wsdl2java -d . http://localhost:8888/weatherService?wsdl

wsdl2java 生成代码
-d 生成dir放代码

proxy代理的方式:

https://www.bilibili.com/video/BV1W4411M7c3?p=13

C:\Users\45058\IdeaProjects\webservice_client_1\webservice_cxf_server\src\webservice_cxf_server>wsdl2java -d . http://localhost:8888/weatherService?wsdlWSDLToJava Error: org.apache.cxf.wsdl11.WSDLRuntimeException: Fail to create wsdl definition http://localhost:8888/weatherService?wsdl: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'http://localhost:8888/weatherService?wsdl'.: java.net.ConnectException: Connection refused: connect
package client;import cn.com.webxml.MobileCodeWSSoap;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class Client {public static void main(String[] args) {/*** factory pattern: address, interface, implementor class*/JaxWsProxyFactoryBean factoryBean=new JaxWsProxyFactoryBean();factoryBean.setAddress("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx"); //addressfactoryBean.setServiceClass(MobileCodeWSSoap.class); //interface// implementor classMobileCodeWSSoap mobileService= factoryBean.create(MobileCodeWSSoap.class);System.out.println(mobileService.getMobileCodeInfo("159****0532", null));}
}

INFO: Creating Service {http://WebXml.com.cn/}MobileCodeWSSoapService from class cn.com.webxml.MobileCodeWSSoap
159****0532:福建 福州 福建移动全球通卡
why???
为什么我wsdl2javam没有生成成功,单独写这个client,可以成功呢?

spring整合cxf

cxf中有spring包,本身依赖spring
现在将代码转为–>配置文件
JaxWsServerFactoryBean -->jaxws:server
JaxWsProxyFactoryBean -->jaxws:client
–>都是bean,交给spring管理

CXFServlet负责监听服务,

DreamService案例-创建一个server

第1步: create a new web project
new a Dynamic Web Project in eclipse
import/copy cxf jars

第2步: create SEI(webservice Endpoint interface)
interface +@WebService

第3步:
implematator class +@WebService

第4步:
applicationContext.xml

第5步:
web.xml

第6步:启动tomcat
部署web工程到tomcat

第7步:RUN—see successful


第1步: create a new web project
new a Dynamic Web Project in eclipse
import/copy cxf jars

第2步: create SEI(webservice Endpoint interface)
interface +@WebService

package com.qf.webservice;import javax.jws.WebService;@WebService
public interface IDreamService {public String query(String name);
}

第3步:
implematator class +@WebService

package com.qf.webservice;public class DreamServiceImpl implements IDreamService {@Overridepublic String query(String name) {System.out.println(name);return "be a SDE";}
}

第4步:
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!--    implementator class--><bean id="dreamServiceImpl" class="com.qf.webservice.DreamServiceImpl"/><!--    address, interface --><jaxws:server address="/DreamService" serviceClass="com.qf.webservice.IDreamService"><jaxws:serviceBean><!--                take in implementator class--><ref bean="dreamServiceImpl"/></jaxws:serviceBean></jaxws:server>
</beans>

第5步:
web.xml
start spring container / context -->
create CXF servlet, handle request to service -->

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
<!--start spring container / context --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<!--create CXF servlet, handle request to service --><servlet><servlet-name>cxf</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>cxf</servlet-name><url-pattern>/ws/*</url-pattern></servlet-mapping>
</web-app>

第6步:启动tomcat
部署web工程到tomcat

第7步:RUN on Tomserver
—see successful
check
service
name=“IDreamServiceService”
portType name=“IDreamService”
operation name=“query”

[https://www.bilibili.com/video/BV1W4411M7c3?p=15]

DreamService案例-创建客户端代码

step1:生成Client project的代码
step2:根据wsdl说明书逆向生成代码
step3:修改applicationContext.xml内容
step4:写一个unitest,跑起来。


(https://www.bilibili.com/video/BV1W4411M7c3?p=15)
spring + CXF -----Client
step1:生成Client project的代码
ctrl C+ctrl v
复制原来server的代码,改成client代码
记得修改client项目的projet properties
删除里面的源代码

step2:根据wsdl说明书逆向生成代码
拷贝路径
wsdl2java生成代码

C:\Users\45058\eclipse-workspace\webservice_cxf_spring_client\src>wsdl2java -d . http://localhost:8080/webservice_cxf_spring_server/ws/DreamService?wsdl

step3:修改applicationContext.xml内容,
官方模板:http://cxf.apache.org/docs/schemas-and-namespaces.html


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><jaxws:client id="dreamClient" serviceClass="com.qf.webservice.IDreamService"address="http://localhost:8080/webservice_cxf_spring_server/ws/DreamService?wsdl" ></jaxws:client>
</beans>

3.1 客户端bean名字
id=“dreamClient”

3.2 客户端接口interface位置serviceClass=“com.qf.webservice.IDreamService”
3.3 服务地址:利用wsdl的说明书, address=“http://localhost:8080/webservice_cxf_spring_server/ws/DreamService?wsdl” >

(写服务的第二种方式中,就用到了"http://localhost:8080/**地址。)

step4:写一个unitest,跑起来。
4.1项目下创建source folder -test
4.2创建 com.qf.webservice
创建DreamServiceTest.java
通过xml文件位置,获取

public class DreamServiceTest {@Testpublic void dreamTest() {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");IDreamService dreamService=context.getBean(IDreamService.class);String dream=dreamService.query("me");System.out.print(dream);         }
}

翻译服务-SpringMVC+Spring+CXF:

https://www.bilibili.com/video/BV1W4411M7c3?p=16

SSM framework, usually refers to the integration of spring mvc+spring+mybatis

这里暂时不用mybatis数据库:
先整合spring mvc+spring + cxf+web service


step1:导入jar包,spring-test,
step2:applicationContext.xml:::jaxws:client + scan service package
step3:web.xml
1spring Context
2cxf servlet
3springMVC前端控制器 - 核心控制器,指定dispatcherServlet
4encodingFilter过滤器

step4:spring-mvc.xml :::scan controller package, responsebody media type + jspViewResolver
step5:test测试web service是否可用
step6:test测试web service是否可用

step7:js,jQuery script,+ translate.jsp page +ajax方法

step8:写controller,service,实现后端translate的逻辑。


step1:导入jar包,spring-test,
step2:applicationContext.xml:::jaxws:client + scan service package

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context = "http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!--    implementator class HERE++++ deleted--><!--    scan services --><context:component-scan base-package = "com.qf.translate.service" /><!--    address, interface cn/com/webxml/EnglishChineseSoap.java--><jaxws:client id="translateClient" serviceClass="cn.com.webxml.EnglishChineseSoap" address="http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl"></jaxws:client>
</beans>

step3:web.xml

1spring Context
2cxf servlet
3springMVC前端控制器 - 核心控制器,指定dispatcherServlet
4encodingFilter过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
<!--启动spring容器start spring container / context配置spring环境 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<!--创建CXF提供的servlet 用于处理关于服务的请求 create CXF servlet, handle request to service --><servlet><servlet-name>cxf</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>cxf</servlet-name><url-pattern>/ws/*</url-pattern></servlet-mapping><!-- springMVC前端控制器 - 核心控制器 spring MVC frontend - core - dispatcherServlet--><servlet><servlet-name>example</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>example</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--配置编码过滤器 encoding --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

step4:spring-mvc.xml :::scan controller package, responsebody media type + jspViewResolver

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"xmlns:context = "http://www.springframework.org/schema/context"xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation = "http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- deal with responseBody --><mvc:annotation-driven conversion-service="conversionService"><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/></bean></mvc:message-converters></mvc:annotation-driven><context:component-scan base-package = "com.qf.translate.controller" /><bean id="jspViewResolver"class = "org.springframework.web.servlet.view.InternalResourceViewResolver"><property name = "viewClass" value = "org.springframework.web.servlet.view.JstlView" /><property name = "prefix" value = "/" /><property name = "suffix" value = ".jsp" /></bean><mvc:resources location="/js/" mapping="/js/*"></mvc:resources></beans>

step5:wsdl逆向生成代码。

C:\Users\45058\eclipse-workspace\webservice_ssc_translate\src>wsdl2java -d . C:\Users\45058\eclipse-workspace\webservice_ssc_translate\translate.wsdl

step6:test测试web service是否可用

package com.qf.translate;import java.util.List;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;import cn.com.webxml.EnglishChineseSoap;@RunWith(JUnit4.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class TranslateTest {@Autowiredprivate EnglishChineseSoap translate;@Testpublic void translateTest() {List<String> list = translate.translatorString("me").getString();//NPE?for(int i=0;i<list.size();i++) {System.out.println(i+"->"+list.get(i));}}
}

step7:js,jQuery script,+ translate.jsp page +ajax方法
jQuery文本download:
https://way2tutorial.com/jquery/jquery_download.php
静态页面:

<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-type" content="text/html; charset=UTF-8"><title>千度翻译</title><script type="text/javascript" src="js/jquery-3.3.1.js"></script><script type="text/javascript">$(function() {$("#translate").click(function(){var sourcef=$("#source").val();$.ajax({url:"translate",data:"source="+source,success:function(data){$("#target").val(data);}});})})</script>
</head>
<body><div style="width: 300px,height: 100px; color: blue; float:left;"><textarea row="10" cols="30" id="source"></textarea></div><div style=“float:left;padding: 20px”><input type="button" value="translate" /></div><div style="width: 300px,height: 100px; color: blue;float:left;"><textarea row="10" cols="30" id="target"></textarea></div></body>
</html>

step8:写controller,service,实现后端translate的逻辑。

package com.qf.translate.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.qf.translate.service.ITranslateService;
@Controller
public class TranslateController {@Autowiredprivate ITranslateService translateService;@RequestMapping("/translate")@ResponseBodypublic String translate(String source) {return translateService.translate(source);}
}
package com.qf.translate.service;
public interface ITranslateService {String translate(String source);
}
package com.qf.translate.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.com.webxml.EnglishChineseSoap;@Service
public class TranslateServiceImpl implements ITranslateService{@AutowiredEnglishChineseSoap data;@Overridepublic String translate(String source) {// TODO Auto-generated method stubList<String> list = data.translatorString(source).getString();return list.get(list.size()-2);}
}

[CXF整合spring官方指南](https://cxf.apache.org/docs/writing-a-service-with-spring.html)
教你如何设置server
client
如何加入spring context
cxf servlet处理请求
interceptor拦截请求

https://www.bilibili.com/video/BV1W4411M7c3?p=18
spring监听器,负责启动spring容器
spring编码过滤器,处理post乱码问题
springMVC前端控制器,负责接收客户端请求
webservice处理器Servlet,负责处理服务的请求

After create the LogMapper.java interface
we create a LogMapper.xml file that defines the queries used by our mapper.
https://kodejava.org/how-do-i-create-mybatis-mapper/

总结:::::

发布服务设置三要素:
CXF 提供的 Schema 标签配置 jaxws:server

serviceClass 的值是我们的接口类的名称,
address 为将要暴露出去的 Web Service 访问地址。
比如:/DeramService,那么客户端消费 Web Service 的地址就会成为 http://host:port/WebAPPName/DeramService ,与之相应的 WSDL 地址则为: http://host:port/WebAPPName/DeramService?wsdl 。

访问服务设置两要素:


CXF 提供的 Schema 标签配置 jaxws:clientr

id 为 Spring 定义的 id,用来在程序里进行获取它的标识,serviceClass 仍是为服务端定义的接口类,address 为完整的 Web Service 地址,这个与服务端的定义不一样。

本课程内容需要重点掌握:

一。
写一个server,发布服务。Endpoint.publish
------wsimport <-----wsdl根据wsdl说明书逆向生成代码
写一个client,访问服务。

java代码拿到元素。

二。
利用网络webservice
找到wsdl
------wsimport <-----wsdl根据wsdl说明书逆向生成代码
写一个client,从wsdl中拿到service名字,port名字,operation名字访问服务。

三。
spring整合cxf
------wsdl2java <-----wsdl根据wsdl说明书逆向生成代码
3.1
写一个server,发布服务
写一个client,访问服务。

3.2整合网络webservice
写client访问服务

四。
spring整合cxf整合mybatis数据库mapper
------wsdl2java <-----wsdl根据wsdl说明书逆向生成代码

4.1
写一个server,发布服务
写一个client,访问服务。

4.2
整合网络webservice
写client访问服务 【难点:多个配置文件。
applicationContext-tx.mxl,
applicationContext-service.mxl,
applicationContext-dao.mxl,
applicationContext-cxf.mxl
spring-mvc.xml
mybatis-config.xml
web.mxl

分工是什么?职责是什么?】

结合博客理清思路:
https://www.cnblogs.com/hoojjack/p/6724659.html

2021/6/25 SOAP学习-WebService全套实战教程相关推荐

  1. 基于TensorRT的深度学习模型部署实战教程!

    应用背景介绍 早在遥远的1989年,一家叫做ALVIVN的公司首次将神经网络用在汽车上,进行车道线检测和地面分割.时至今日,深度学习已经应用在自动驾驶系统的多个分支领域.首先是感知领域,常用的传感器有 ...

  2. 小程序云开发全套实战教程(最全)

    ####前言: 在学习云开发的时候将自己的学习过程记录下来了,放在了网上,收获了一波好评,今天下午在办公室没有事情,也发现之前有人在博客里面评论,你这个教程还有一半哩,可能是csdn的自动搬运功能出来 ...

  3. 公众号内容拓展学习笔记(2021.3.25)

    公众号内容拓展学习笔记(2021.3.25)

  4. 基于python的科技论文_实地科研 | 上海财经大学 | 金融科技、商业分析、人工智能:机器学习、人工智能及其在金融科技中的应用(2021.1.25开课)...

      课题名称   = 机器学习.人工智能及其在金融科技中的应用 =  项目背景   随着云时代的到来,机器学习.人工智能.大数据技术具有越来越重要的战略意义,并逐渐渗透到每一个行业和业务职能领域,成为 ...

  5. 2021年全新Java学习路线图

    第一阶段:Java语言入门到精通 学前导读: 学习任何一门编程语言,首先要学习的是基础语法,开启Java学习的第一步,当然就是深入掌握计算机基础.编程基础语法,面向对象,集合.IO流.线程.并发.异常 ...

  6. 成为Java高手的25个学习要点

    成为Java高手的25个学习要点 想要精通Java,成为Java高手,需要不断的学习和积累.本文给出了Java学习过程中需要注意的25个学习目标,希望可以给您带来帮助. AD: 2013大数据全球技术 ...

  7. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

  8. 25个学习要点帮助你从java菜鸟成为Java高手

    想要精通Java,成为Java高手,需要不断的学习和积累.本文给出了Java学习过程中需要注意的25个学习目标,希望可以给您带来帮助. 1. 你需要精通面向对象分析与设计(OOA/OOD).涉及模式( ...

  9. 2021 PyTorch官方实战教程(一)Tensor 详解

    点击上方"AI算法与图像处理",选择加"星标"或"置顶"重磅干货,第一时间送达 这个系列时pytorch官方实战教程,后续会继续更新.. 一 ...

最新文章

  1. ros 消息队列与缓冲区_[ROS] [笔记(1)] 一个最简单的例子:Hello Robot(消息、发布者与订阅者)...
  2. 最小代价生成树Prim/Kruskal(c/c++)
  3. mysql后台修改表_mysql之约束以及修改数据表
  4. Opencv学习笔记之OpenCV介绍
  5. Method.invoke 异常捕获
  6. 【推荐】飞鸽传书2013官方下载
  7. C++设计模式之Template Method(模板方法模式)
  8. windows server 2008配置之AD域服务器 2
  9. 汉字字符集编码查询 unicode编码查询
  10. Java原生http请求调用企业微信api,获取打卡记录
  11. 求解带时间窗的车辆路径问题(matlab实现)
  12. Cypress 前端测试工具的基本使用和相关命令总结
  13. 白光LED焊接技术要求
  14. 【Luat-esp32c3】4.3 文件系统——加载jpeg图片并拆包
  15. Redis学习笔记(实战篇)(自用)
  16. Django Swagger文档库drf-spectacular
  17. 仿热血江湖游戏NpcClass_自动攻击事件 刀反伤
  18. DNS欺骗与钓鱼网站
  19. 糖友低碳水、高蛋白饮食可行吗
  20. pycharm设置显示返回工具箭头菜单和显示哪个文件左侧目录树显示到哪个文件

热门文章

  1. python opencv模板匹配多目标_[python-opencv]模板匹配
  2. js打印复选框不勾选
  3. 《JavaScript程序设计》第2课:JS类型系统
  4. Counterfeit Dollar 模拟-枚举
  5. 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)
  6. 运动蓝牙耳机如何挑选?四款运动蓝牙耳机,总有一款适合你!
  7. 解决高度塌陷问题(非BFC解决方式)
  8. 基于KT6368A的车载OBD蓝牙芯片模块解决方案低成本国产替代
  9. 浙江高中计算机课学什么,浙江高中学什么课程
  10. [UWP]使用Writeable?Bitmap创建HSV色轮