Webservice实验报告.docx

上传人:b****5 文档编号:6488224 上传时间:2023-01-07 格式:DOCX 页数:19 大小:333.89KB
下载 相关 举报
Webservice实验报告.docx_第1页
第1页 / 共19页
Webservice实验报告.docx_第2页
第2页 / 共19页
Webservice实验报告.docx_第3页
第3页 / 共19页
Webservice实验报告.docx_第4页
第4页 / 共19页
Webservice实验报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Webservice实验报告.docx

《Webservice实验报告.docx》由会员分享,可在线阅读,更多相关《Webservice实验报告.docx(19页珍藏版)》请在冰豆网上搜索。

Webservice实验报告.docx

Webservice实验报告

题目:

WebServices实验报告

 

所属学院:

专业班级:

姓名:

学号:

 

题目一:

调用第三方webService的接口实现便民信息的查询,例如天气预报或者火车信息。

一.实验要求

编写客户端,调用第三方WebService提供的接口,实现对基本信息的查询。

二.运行环境

Windows8+Eclipse(JDK8.0)

三.实验原理及过程

1.新建JavaProject,项目名称为“天气查询”,新建包com.soap(放置跟webservice服务调用相关的类)和包com.ui(放置跟UI界面编程相关的类)。

2.在com.soap包下新建类名为WeatherServices的Java文件。

该类的作用调用中国天气网提供的免费接口"

中间用到的方法主要有:

(1)getSoapRequest(Stringcity).这个方法的作用是得到一个Soap请求。

项目结构如图:

 

(2)getSoapInputStream(Stringcity)。

这个方法是通过调用上述免费接口获得

URLConnection连接对象,并对Soap

输入流进行相关的设置,包括编码格式等。

(3)getWeather(Stringcity)。

解析xml,获取相应的信息。

由于查询后返回的原始结果是一个xml文档,因此需要对该文档进行DOM解析,从而获得我们需要的信息。

3.在com.soap包下新建MobileService.java文件,用来实现对手机号码基本信息的查询。

使用的接口是:

x?

wsdl

4.在com.soap包下新建EmailService.java,实现对邮箱地址的验证。

采用的接口是:

5.在com.ui包下新建类名为MainFrame的Java文件。

实现客户端的可视化布局。

里面设计的主要函数包括:

(1)MainFrame(Stringstring)。

这是一个构造方法,对窗体进行简单的初始化,以及为相应的控件添加事件监听及响应。

四.运行效果

题目二

自定义webservice,并将其发布,然后编写客户端,调用该webservice。

一.实验要求

编写客户端,调用第三方WebService提供的接口,实现对基本信息的查询。

二.运行环境

Windows7旗舰版+Eclipse(JDK8.0)

三.实验原理及过程

该实验需要自己编写相应的服务器端和客户端。

而我要实现的功能是在客户端窗体输入学号,然后通过调用webservice来返回学号对应的学生的姓名。

实现服务的发布的方式有很多种,例如用Axis2来实现。

其实,JDK本身就提供了WebService服务发布的方法,就是jax-ws。

具体实现的过程如下:

1.服务器端

(1)新建JavaProject,项目名称为:

webServervices_student_server。

在该项下新建包com.webservice.server。

(2)在包中新建一个接口StudentInterface,在接口中声明一个查询的方法studentQuery(intnumber);

(3)新建StudentInterface接口的实现类StudentInterfaceImp,在类中实现StudentInterface接口中的查询方法studentQuery(intnumber)。

Main方法中的Endpoint.publish("http:

//127.0.0.1:

54321/student",newStudentInterfaceImp())方法是发布服务。

其中http:

//127.0.0.1:

54321/student是在本地自定义的RUL,54321是服务的端口号。

(4)运行该程序,会看到会打印以下提示信息,说明该服务已经启动:

(5)接下来要做的就是要生成WSDL文件。

在浏览器地址栏中输入http:

//127.0.0.1:

54321/student?

wsdl,回车,会看到以下所示界面,说明已经将服务发布成功。

2.客户端

(1)为了模拟远程调用,新建JavaProject,项目名称为:

webServervices_student_client。

在该项下新建包com.webservice.client。

由于采用的是jax-ws,所以在客户端还需要用到按照上述的wsdl规格约束编译的.java文件。

具体的实现如下:

1)新建一个java项目wsimport,该项目可以用来专门放置其他项目的编译文件。

找到该项目的src的绝对目录F:

\Eclipseforjavaee\wsipport\src.

2)在cmd命令窗口运行cdF:

\Eclipseforjavaee\wsipport\src,进入该目录下;

3)接着输入命令:

wsimport–s.http:

//127.0.0.1:

54321/student?

wsdl。

注意中间的空格,回车后,结果如:

(2)返回wsimport项目,右键刷新,会看到多出来一个包,这个包的名字和之前的服务器端的包名一致。

将该包原封不动复制到该客户端的src目录下。

(3)新建Client窗体类,实现客户端的编程。

整个客户端的项目结构如下:

 

四.运行效果

实验感想

第一次接触WebService这个概念,感觉还是挺陌生的。

之前有听说过便民查询服务,而且也亲身用过。

查阅了很多资料,才知道这些功能就是用WebService来实现的。

大概了解了相关的知识和调用第三方的服务接口的流程后,才知道,一个服务的发布和调用,也是很简单的。

当然在整个过程中,还遇到过多次的失败,虽然不是很难的程序,但是如果其中某一步没有按照正确的顺序来执行,会很容易出错的。

以下就来说说遇到的有一些问题:

1.在发布服务的时候,未能成功的生成wsdl文件。

分析原因主要有URL的端口没有设置好,或者服务端的程序编写有误。

当服务开启后,也就是服务端程序成功执行后,再在浏览器的地址栏里输入url+?

wsdl,会成功生成。

2.在解析命令窗口解析wsdl的时候,不会生成.java文件,或者生成的.java文件所在的包名和原先的服务程序的包名不一致,说明解析有误,需要重新解析。

在输入命令的时候,wsimport–s.http:

//127.0.0.1:

54321?

wsdl中间的空格不能少。

虽然这次的实验实现的功能比较简单,但是它却涵盖了一个完整的webservice的发布和调用的全过程,有了这次的实践。

那么以后再做比较复杂的服务的时候也就不用担心没有头绪了。

附录:

源代码(天气查询+自定义服务)

1.天气查询:

(1)WeatherService.java

packagecom.soap;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.io.OutputStreamWriter;

import.URL;

import.URLConnection;

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importorg.w3c.dom.Document;

importorg.w3c.dom.Node;

importorg.w3c.dom.NodeList;

publicclassWeatherServices{

privatestaticStringgetSoapRequest(Stringcity){

StringBuilderbuilder=newStringBuilder();

builder.append("

xmlversion=\"1.0\"encoding=\"utf-8\"?

>"

+"

Envelopexmlns:

xsi=\"http:

//www.w3.org/2001/XMLSchema-instance\""

+"xmlns:

xsd=\"http:

//www.w3.org/2001/XMLSchema\""

+"xmlns:

soap=\"http:

//schemas.xmlsoap.org/soap/envelope/\">"

+"

Body>

//WebX

+""+city+""

+"

Body>

Envelope>");

returnbuilder.toString();

}

privatestaticInputStreamgetSoapInputStream(Stringcity)throwsException{

try{

Stringsoap=getSoapRequest(city);

if(soap==null){

returnnull;

}

URLurl=newURL(

"

URLConnectionconnection=url.openConnection();

connection.setUseCaches(false);

connection.setDoInput(true);

connection.setDoOutput(true);

connection.setRequestProperty("Content-Length",Integer.toString(soap.length()));

connection.setRequestProperty("Content-Type","text/xml;charset=utf-8");

connection.setRequestProperty("SoapAction",

"http:

//WebX

OutputStreamout=connection.getOutputStream();

OutputStreamWriterwriter=newOutputStreamWriter(out,"utf-8");

writer.write(soap);

writer.flush();

writer.close();

out.close();

InputStreamin=connection.getInputStream();

returnin;

}catch(Exceptione){

e.printStackTrace();

returnnull;

}

}

publicstaticStringgetWeather(Stringcity){

try{

DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

factory.setNamespaceAware(true);

DocumentBuilderbuilder=factory.newDocumentBuilder();

InputStreamis=getSoapInputStream(city);

Documentdoc=builder.parse(is);

//因为webservices调用后返回的xml的每个元素都是string

NodeListlist=doc.getElementsByTagName("string");

StringBufferbuffer=newStringBuffer();

for(inti=0;i

Nodenode=list.item(i);

if(node.getLastChild().getNodeValue().equals("查询结果为空!

")){

buffer=newStringBuffer();

}

buffer.append(node.getFirstChild().getNodeValue());

}

is.close();

returnbuffer.toString();

}catch(Exceptione){

e.printStackTrace();

returnnull;

}

}

}

(2)MobileService.java

packagecom.soap;

import.webxml.MobileCodeWS;

import.webxml.MobileCodeWSSoap;

publicclassMobileService{

publicstaticStringgetMobileCodeInfo(Stringtele,StringuserID){

MobileCodeWScodeWS=newMobileCodeWS();

MobileCodeWSSoapcodeWSSoap=codeWS.getMobileCodeWSSoap();

StringcodeInfo=codeWSSoap.getMobileCodeInfo(tele,null);

System.out.println(codeInfo);

returncodeInfo;

}

}

(3)EmailService.java

packagecom.soap;

import.webxml.ValidateEmailWebService;

import.webxml.ValidateEmailWebServiceSoap;

publicclassEmailService{

publicstaticStringchekEmailAddress(Stringemail){

ValidateEmailWebServiceemailWebService=newValidateEmailWebService();

ValidateEmailWebServiceSoapserviceSoap=emailWebService.getValidateEmailWebServiceSoap();

shortresult=serviceSoap.validateEmailAddress(email);

Stringinfo="";

switch(result){

case0:

info="请重新验证";break;

case1:

info="邮件地址合法";break;

case2:

info="只是域名正确";break;

case3:

info="一个未知错误";break;

case4:

info="邮件服务器没有找到";break;

case5:

info="电子邮件地址错误";break;

case6:

info="免费用户验证超过数量(50次/24小时";break;

case7:

info="商业用户不能通过验证";break;

}

returninfo;

}

}

(4)MainFrame.java

packagecom.ui;

importjava.awt.BorderLayout;

importjava.awt.Button;

importjava.awt.FlowLayout;

importjava.awt.Label;

importjava.awt.TextArea;

importjava.awt.TextField;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowEvent;

importjavax.swing.Box;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

importjavax.swing.JScrollPane;

importjavax.swing.border.EmptyBorder;

importcom.soap.WeatherServices;

publicclassMainFrameextendsJFrameimplementsActionListener

{

staticStringinfo="";

TextFieldtf1;

Buttonbt1,bt2;

Labellabel;

JPanelcontentPane;

JScrollPanescrollPane;

TextAreatextArea;

Boxbox1,box2;

publicMainFrame(Stringstring){

super(string);

setLayout(newFlowLayout());

label=newLabel("输入城市名:

");

label.setVisible(true);

tf1=newTextField(5);tf1.setVisible(true);tf1.setEditable(true);

bt1=newButton("查询");

bt1.addActionListener(this);bt1.setVisible(true);

contentPane=newJPanel();

contentPane.setBorder(newEmptyBorder(5,5,5,5));

contentPane.setLayout(newBorderLayout(120,120));

this.setContentPane(contentPane);

box1=Box.createHorizontalBox();

box1.add(label);

box1.add(tf1);

box1.add(bt1);

contentPane.add(box1,BorderLayout.NORTH);

scrollPane=newJScrollPane();

scrollPane.setEnabled(true);

contentPane.add(scrollPane,BorderLayout.CENTER);

textArea=newTextArea();

scrollPane.setViewportView(textArea);

setBounds(500,200,400,450);

setVisible(true);

validate();//确保组件具有有效的布局

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==bt1){

Stringcity=tf1.getText().toString();

info=WeatherServices.getWeather(city);

textArea.setText(info);

}

if(e.getID()==WindowEvent.WINDOW_CLOSING){

System.exit(0);

}

}

publicstaticvoidmain(String[]args){

newMainFrame("天气查询");

}

}

2.自定义服务(学生查询)

(1)服务端

1)StudentInterfaceImp

packagecom.webservice.server;

importjavax.jws.WebService;

importjavax.xml.ws.Endpoint;

/**

*@author张波

*StudentInterfaceImp.java

*2015年5月28日

*/

@WebService

publicclassStudentInterfaceImpimplementsStudentInterface{

Stringname[]={

"姜倩云","张丽梅","吴美庆","张忠敏","王雅蓉","葛红敏","赵斌灿","王严鑫",

"莫可宏","王猛","侯勇军","马铸辉","易鹏","罗路辉","闫治鹏","孙磊","李佳玲",

"王勃博","康尧","张波","邓雷","陈佳鑫","唐炜宁","葛龙","倪赛杰","陈成",

"刘浩浩","周子轩","宫蕊","文云丽","沈雪","刘冬媛","褚蓉","钱苑","董樟裕",

"马凌杰","王京源","陈辉云","罗建兴","陈晨","赵文宇","宗玮雯","赵贝贝",

"黄豪琛","娄宽","任上海","王康","沈楠","蒋宇","吕阳","王刚","王扬","吕中剑",

"张军","卢惺鑫","姚礼宗"

};

@Override

publicStringstudentQuery(intnumber){

System.out.println("fromclient..."+"学号:

"+number);

Stringresult=name[number];

System.out.println("toclient..."+"姓名:

"+result);

ret

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1