Content-type: application/soap+xml; charset=utf-8
Date: Fri,09 Oct 2015 07:54:53 GMT
<?xml version='1.0' encoding='UTF-8'?>
<S:xmlns:S="http://www.w3.org/2003/05/soap-envelope">
??????? <S:Body>
????????????????? <ns2:getWeatherByCityNameResponse xmlns:ns2="http://weather.itheima.com">
????????????????????????? <WeatherInfo>今天风很大</WeatherInfo>
????????????????? </ns2:getWeatherByCityNameResponse>
??????? </S: 2.WSDL
???? WSDL(Web Service Description Language),是一个用来描述Web服务(Web Service)和说明如何与Web服务通信的XML语言。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。
?????
(1)wsdl的阅读方法
是从下往上读。
每个wsdl有且只有一个Service节点。
1、先找Service节点
2、Service节点中找port节点。每个port对应一个PortType。
3、Port节点对应一binding节点。每个binding节点对应一个PortType
4、PortType中有operation 节点就是服务的方法。
5、operation 中有Input(参数)和output(返回值)
6、Input(参数)和output(返回值)对应message节点
7、Message对应element节点。Element节点对应complexType节点描述了参数及返回值的数据类型。
(2)使用注解规范wsdl
@WebService:?定义服务,在public class上边。
???targetNamespace:指定命名空间。
???name:portType的名称。
?? portName:port的名称。
??serviceName:服务名称。
@WebResult:定义返回值。
???name:返回结果值的名称。
@WebParam:定义参数。
???name:指定参数的名称。
@WebMethod
exclude:排除指定的方法。
默认情况下,SEI实现类中所以的public方法会发布成服务方法。
如果不想把public方法发布成服务方法,需要使用@WebMethod注解。把此方法排除。在实现类中至少有一个方法发布为服务方法。
http://127.0.0.1:12345/weather?wsdl
http://127.0.0.1:12345/weather?xsd=1
作用: 通过注解,可以更加形像的描述Web服务。对自动生成的wsdl文档进行修改,为使用者提供一个更加清晰的wsdl文档。
当修改了WebService注解之后,会影响客户端生成的代码。调用的方法名和参数名也发生了变化。
3.UDDI
???? UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。企业将自己提供的Web Service注册在UDDI,也可以使用别的企业在UDDI注册的web service服务,从而达到资源共享。
???? UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。
???? 但是使用webservice并不是必须使用UDDI,因为用户通过WSDL知道了web service的地址,可以直接通过WSDL调用webservice。
三、区域查询系统
1.需求分析
???? 创建区域查询服务系统,对外发布WebService服务,供客户端调用,根据parentid查询区域信息,返回区域信息列表,并支持分页。
?????
2.服务端
第一步:创建一java工程
第二步:导入mysql的数据库驱动。
第三步:创建一个dao。根据parentid查询区域列表。返回区域pojo的list。支持分页。
第四步:创建一个SEI
第五步:创建SEI实现类。@Webservice注解不要忘。
第六步:发布服务。
AreaDao.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
public ?
class ?
AreaDao{
???? ?
????
public ?
List<Area> getAreaList(String parentId,
int ?
page,monospace!important; min-height:auto!important'>rows){
???????? ?
//JDBC查询数据库
????????
Connection con =
null
;
;
ResultSet rs =
;
new?
ArrayList<Area>();
???????? ?
try
{
????????????
Class.forName(
"com.mysql.jdbc.Driver"
);
//创建一个连接
"jdbc:mysql://localhost:3306/webservice"
,
"root"
"123456"
);
//创建Preparement
"SELECT * FROM area WHERE PARENTID=? LIMIT ?,?"
;
ps = con.prepareStatement(sql);
1
ps.setInt(
2
) * rows);
//执行查询
//取查询结果
while
(rs.next()){
????????????????
Area a =
Area();
"AREACODE"
));
a.setAreaFullName(rs.getString(
"AREAFULLNAME"
));
"AREALEVEL"
));
a.setAreaName(rs.getString(
"AREANAME"
));
"PARENTID"
));
a.setShortName(rs.getString(
"SHORTNAME"
));
}
list;
}
catch
(Exception e){
}
{
{
ps.close();
(SQLException e){
}
list;
}
}
|
AreaInterface.java
?
interface
?
AreaInterface{
?
rows);
16
*SEI实现类
@WebService
implements?
AreaInterface{
?
@Override
rows){
//使用Dao查询区域列表
AreaDao();
List<Area> list = dao.getAreaList(parentId,page,rows);
}
?
11
|
* 区域查询服务发布
void?
main(String[] args){
Endpoint.publish(
"http://127.0.0.1:12345/area"
AreaInterfaceImpl());
3.客户端
第一步:创建一个java工程
第二步:基于wsdl生成客户端调用代码
第三步:创建服务视图
第四步:获得PortType对象
第五步:调用服务端方法。
AreaClient.java
* 客户端调用代码
AreaInterfaceImplService();
//从服务视图获取PortType
List<Area> list = port.getAreaList(
"1.1."
5
);
(Area area : list){
System.out.println(area.getAreaName());
}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|