web service实验

web service算是软件或者网页里的功能外包了吧,实现过程看起来蛮简单的,但实际挺琐屑的

【实验原理和步骤】

1.实验原理

技术路线:查找并调用股票行情接口,获取股票行情数据,并实现股票行情的图形展示。

2.实现步骤:

(1) 查找和熟悉公开的股票行情数据接口;

(2)基于 Eclipse 开发 Webservice 调用程序;

(3)搭建 WEB 应用框架,开发股票行情的 WEB 图形展示网页;

(4) 部署系统;

(5) 测试系统。

【方案设计】

1) 编写web网页,构建查询页面;

2) 编写client程序,在eclipse上运行,开启一个ServerSocket在端口1234上监听,从web端获取请求后,根据SOAP协议,调用服务器端的web service;

3)处理服务器端返回的数据,生成图表;

4)编写web网页对结果进行展示。

Talk is cheap, give me your code.

客户端程序:


  1 import java.io.BufferedReader;
2 import java.io.DataOutputStream;
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.InputStreamReader;
9 import java.net.ServerSocket;
10 import java.net.Socket;
11 import java.nio.channels.Channels;
12 import java.nio.channels.FileChannel;
13 import java.nio.channels.WritableByteChannel;
14 import org.w3c.dom.NodeList;
15
16 import javax.xml.bind.DatatypeConverter;
17 import javax.xml.soap.MessageFactory;
18 import javax.xml.soap.MimeHeaders;
19 import javax.xml.soap.SOAPBody;
20 import javax.xml.soap.SOAPConnection;
21 import javax.xml.soap.SOAPConnectionFactory;
22 import javax.xml.soap.SOAPElement;
23 import javax.xml.soap.SOAPEnvelope;
24 import javax.xml.soap.SOAPMessage;
25 import javax.xml.soap.SOAPPart;
26 import javax.xml.transform.Source;
27 import javax.xml.transform.Transformer;
28 import javax.xml.transform.TransformerFactory;
29 import javax.xml.transform.stream.StreamResult;
30
31 /*
32 * A client to call web service on http://www.webxml.com.cn:80/WebServices/ChinaStockWebService.asmx/ to get the
33 * information of the stock given by code, and return the web browser with a graph show the information
34 *
35 * @Author alex<[email protected]>
36 */
37 public class stock_web_client extends Thread{
38
39 private InputStream fin;
40 private int PortNum;
41 private ServerSocket ss;
42 private Socket soc;
43 InputStream dis;
44 DataOutputStream dos;
45 BufferedReader br;
46 File f=new File("/home/alex/Documents/abc.html"); //the html to get input
47 File f2=new File("/home/alex/Documents/aaa.html"); //the html to display the result
48 File f3=new File("/home/alex/Documents/result.gif"); //the result image
49 boolean doo=true;
50 String Server_URI="http://WebXml.com.cn/";
51 String URL="http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx";
52
53 public stock_web_client(int port) throws IOException{
54 System.out.print("Enter the port number: ");
55 PortNum=port;
56 ss=new ServerSocket(PortNum);
57 System.out.println("Client get ready at port "+PortNum+"\nWaiting for connection");
58
59
60 }
61 /**
62 * Get the file name
63 */
64 String getFile(String url){
65 String file_name;
66 int a;
67 a=url.indexOf("/");
68 file_name=url.substring(a);
69 a=file_name.indexOf("?");
70 if(a!=-1)
71 return "No File";
72 a=file_name.indexOf(" ");
73 file_name=file_name.substring(0,a);
74 return file_name;
75 }
76 /*
77 * Get the what method should call
78 */
79 String getAction(String url){
80 String act;
81 if(url==null)return "nothing to do";
82 int a;
83 a=url.indexOf("/");
84 act=url.substring(a);
85 if(a==-1)return "nothing to do";
86 a=act.indexOf("?");
87 if(a==-1)return "nothing to do";
88 act=act.substring(0,a);
89 return act;
90 }
91 /*
92 * Get parameter in request, the format of returned string like that,
93 * ParName=Value&ParName=Value&...&parName=Value
94 */
95 String getParameter(String url){
96 String pa;
97 int a;
98 a=url.indexOf("?");
99 if(a==-1)return "no parameter";
100 url=url.substring(a+1);
101 a=url.indexOf(" ");
102 pa=url.substring(0,a);
103 return pa;
104 }
105 public boolean getStockImageByteByCode(String code) throws Exception{
106 MessageFactory mf = MessageFactory.newInstance();;
107 SOAPMessage sm=mf.createMessage();
108 SOAPPart sp=sm.getSOAPPart();
109 SOAPEnvelope se=sp.getEnvelope();
110 se.addNamespaceDeclaration("Server", Server_URI);
111
112 //Construct SOAP body
113 SOAPBody sb=se.getBody();
114 SOAPElement sbe1=sb.addChildElement("getStockImageByteByCode","Server");
115 sbe1.setAttribute("xmlns", Server_URI);
116 SOAPElement sbe2=sbe1.addChildElement("theStockCode","Server");
117 sbe2.addTextNode(code);
118
119 //Construst SOAP head
120 MimeHeaders mh=sm.getMimeHeaders();
121 mh.addHeader("SOAPAction", Server_URI+"getStockImageByteByCode");
122
123 sm.saveChanges();
124
125 System.out.println("SOAP REQUEST Message: ");
126 sm.writeTo(System.out);
127
128 get_SOAP_Response(sm);
129
130 return true;
131 }
132
133 public void get_SOAP_Response(SOAPMessage sm) throws Exception{
134 SOAPConnectionFactory scf=SOAPConnectionFactory.newInstance();
135 SOAPConnection sc= scf.createConnection();
136 SOAPMessage smr=sc.call(sm,URL);
137 //print the content of the returned message
138 TransformerFactory tf=TransformerFactory.newInstance();
139 Transformer tr=tf.newTransformer();
140 Source sourceContent=smr.getSOAPPart().getContent();
141 System.out.println("\nSOAP RESPONSE Message: ");
142 tr.transform(sourceContent, new StreamResult(System.out));
143
144 //fetch the imagine content from the message
145 NodeList jpg=smr.getSOAPBody().getElementsByTagName("getStockImageByteByCodeResult");
146 String abc=jpg.item(0).getTextContent().trim();
147 System.out.print("\n"+abc);
148
149 //convert byte array to image
150 File image_file=new File("/home/alex/Documents/result.gif");
151 FileOutputStream fos=new FileOutputStream(image_file);
152 byte[] pic=DatatypeConverter.parseBase64Binary(abc);
153 fos.write(pic);
154 fos.close();
155 //ByteArrayInputStream bais = new ByteArrayInputStream(pic_bytes);
156 //BufferedImage bi = ImageIO.read((InputStream) bais);
157 //ImageIO.write(bi, "GIF", image_file);
158 /*
159 Iterator<ImageReader> reads=ImageIO.getImageReadersByFormatName("gif");
160 ByteArrayInputStream bis=new ByteArrayInputStream(temp);
161 ImageReader img_re=reads.next();
162 Object source=bis;
163 ImageInputStream iis=ImageIO.createImageInputStream(source);
164 img_re.setInput(iis,true);
165 ImageReadParam irp=img_re.getDefaultReadParam();
166
167 Image image=img_re.read(0,irp);
168 BufferedImage bfi=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
169
170 Graphics2D gra=bfi.createGraphics();
171 gra.drawImage(image, null, null);
172
173 ImageIO.write(bfi, "gif", image_file);
174 */
175 //return smr;
176
177 }
178
179 public void run(){
180
181 try {
182
183 while(true){
184 soc=ss.accept();
185 dis=soc.getInputStream();
186 dos=new DataOutputStream(soc.getOutputStream());
187 BufferedReader brr=new BufferedReader(new InputStreamReader(dis));
188 //byte[] ch=new byte[(int)f.length()];
189 fin=new FileInputStream(f);
190 String write=brr.readLine();
191 //int k=0;
192 //while(!write.endsWith("</html>")&&k<7){
193 //k++;
194 //if(write.startsWith("POST /abc.aa")){
195 //while(true){
196 //System.out.println(String.valueOf(write));
197 //write=brr.readLine();
198 //}
199 //}
200 System.out.println("\ncomes from the web: "+write);
201 String act=getAction(write);
202 System.out.println(act);
203 String pa=getParameter(write);
204 System.out.println(pa);
205 String fn=getFile(write);
206 System.out.println(fn);
207
208 //write=brr.readLine();
209 //if(fn.equalsIgnoreCase("/result.gif")){
210 //FileInputStream ffin=new FileInputStream(f2);
211 //BufferedReader bbr=new BufferedReader(new InputStreamReader(ffin));
212 // return the html to display the image
213 /*byte[] img_bytes=Files.readAllBytes(f2.toPath());
214 dos.write(img_bytes);
215 dos.flush();
216 //ffin.close();
217 soc.close();
218 dos.close();
219 //bbr.close();*/
220 /* FileChannel in=new FileInputStream (f2).getChannel();
221 WritableByteChannel out=Channels.newChannel(soc.getOutputStream());
222 in.transferTo(0, f2.length(), out);
223 //stop the client process
224 break;
225 }*/
226 //Once got the input from user, then process the reques
227 if(act.equalsIgnoreCase("/getStockImageByteByCode"))
228 if(getStockImageByteByCode(pa.substring(pa.indexOf("=")+1))){
229 FileInputStream ffin=new FileInputStream(f2);
230 BufferedReader bbr=new BufferedReader(new InputStreamReader(ffin));
231 dos.writeBytes("HTTP/1.1 200 OK \r\nConnection: close\r\nServer: Alex‘s Server \r\nContent-Type: text/html\r\n\r\n");
232
233 // return the html to display the image
234 do{
235 write=bbr.readLine();
236 dos.writeBytes(write+"\r\n");
237 }while(!write.equalsIgnoreCase("</html>"));
238
239 //this.sleep(40000);
240 dos.flush();
241 ffin.close();
242 //soc.close();
243 //dos.close();
244 bbr.close();
245 //stop the client process
246 break;
247 }
248
249 //System.out.println(String.valueOf(write));
250 //}
251 //ch=fin.read();
252 dos.writeBytes("HTTP/1.1 200 OK \r\nConnection: close\r\nServer: Alex‘s Server \r\nContent-Type: text/html\r\n\r\n");
253 InputStreamReader is=new InputStreamReader(fin);
254 br=new BufferedReader(is);
255 do{
256 write=br.readLine();
257 dos.writeBytes(write+"\r\n");
258 //System.out.println(write);
259 //aaa++;
260 //System.out.print(aaa);
261 }while(!write.equalsIgnoreCase("</html>"));
262 if(doo==true)doo=false;
263 //System.out.println(brr.readLine());
264 //dos.write(ch, 0, ch.length);
265 //}while(ch!=-1);
266 dos.flush();
267
268 fin.close();
269 soc.close();
270 dos.close();
271 //*/
272 }
273
274
275
276 } catch (Exception e) {
277 e.printStackTrace();
278 }
279
280
281 }
282
283 public static void main(String[] args){
284 //HttpServer hs=HttpServer.create(new InetSocketAddress(1234), 1);
285 try {
286 stock_web_client swc=new stock_web_client(1234);
287 swc.start();
288 } catch (IOException e) {
289 e.printStackTrace();
290 }
291 }
292 }

stock_web_client

获取输入页面:


 1 <html>
2 <head>
3 <title>get Stock Image By Code</title>
4 <head>
5
6 <body>
7 <h1>This is the post page.</h1>
8 <form target="_blank" action=‘getStockImageByteByCode‘ method="GET">
9
10 <label> enter the stock code and the client will return a image of this stock </label>
11 <p>
12
13 <span>
14 <input class="frmInput" type="text" size="30" name="theStockCode">
15 </span>
16
17 <span>
18 <input type="submit" value="submit" class="button">
19 </span>
20
21 </p>
22
23 </form>
24
25 </body>
26 </html>

abc.html

成果展示页面:


1 <html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK">
2 <title> image of the search result </title>
3 <h1>This is the image returned by the search on the server</h1>
4 <img src="file://localhost/home/alex/Documents/result.gif" alt="result"></img>
5 </html>

aaa.html

这下面英文文档是关于创建web
service的,在这次实验里基本没用到,但当时觉得这些说得很细,所以就存了下来,哪天让我写个web service时,就能参考了。

Requirements of a JAX-WS Endpoint

JAX-WS endpoints must follow these requirements:

  • The implementing class must be annotated with either the javax.jws.WebService or javax.jws.WebServiceProvider annotation.

  • The implementing class may explicitly reference an SEI through
    the endpointInterface element of
    the @WebService annotation, but is not
    required to do so. If no endpointInterface is not specified in @WebService, an SEI is implicityly defined for the
    implementing class.

  • The business methods of the implementing class must be public, and must
    not be declared static or final.

  • Business methods that are exposed to web service clients must be annotated
    with javax.jws.WebMethod.

  • Business methods that are exposed to web service clients must have
    JAX-B-compatible parameters and return types. See Default
    Data Type Bindings
    .

  • The implementing class must not be declared final and must not be abstract.

  • The implementing class must have a default public constructor.

  • The implementing class must not define the finalize method.

  • The implementing class may use the javax.annotation.PostConstruct or javax.annotation.PreDestroy annotations
    on its methods for lifecycle event callbacks.

很犯懒,基本都是实验报告里的东西复制粘贴过来的。。。

这个实验耗费了我整整3天时间,这个过程就是不断绕弯路,不断自己爬回来的过程,代码推倒重写三遍以上,过程中学到的东西不少,本想多些点自己这两天这里面学到的细节细活,凌晨4点了,算了=。=

web service实验,布布扣,bubuko.com

时间: 2024-10-24 21:00:00

web service实验的相关文章

Web Service 性能测试:soapUI还是Jmeter?

经常有人问我web service的性能测试是用JMeter好还是SoapUI好.说句实话这两款都是非常优秀的开源Web Service性能测试工具,简单地说哪个更好真不太容易.影响Web Service性能测试的因素太多到底谁的结果更准确一些很多时候并不主要取决于测试工具.在soapUI官方网站上有一个文章比较了这两款工具,我将要 点抽出来加以分析希望能反映它们的特点. JMeter在整个负载测试的优越性是毋庸置疑的,它覆盖了常见的各种测试类型,如HTTP, JDBC, JMS 和SOAP.单

Win Form + ASP.NET Web Service 文件上传下载--HYAppFrame

本章节主要讲解HYAppFrame服务器端如何ASP.NET Web Service实现文件(含大文件)上传,WinForm客户端如何下载文件. 1    服务器端文件上传 1.1 上传文件 函数FileUpload(stringfileFullPath, byte[] file)用于上传文件,生成文件前检查文件路径所在文件夹是否存在,不存在则首先创建文件夹. [WebMethod(EnableSession = true,Description = "上传文件")] public i

开发Web Service的几种方式

本文作者在学习使用Java开发Web Service(不包括Restful)时,由于不知道Java有这么多框架支持开发Web Service一度陷入迷惘,不知道这些框架各有 什么不同,各有什么优缺点.经过几天的查资料.实验.失败.再查资料.再实验的过程,终于有了一个大概的了解,也把自己的学习成果跟大家分享一下: 用Java开发Web Service一般有三种方式,本文在Idea下分别使用三种方式并结合Spring容器实现了三个Demo,下面为大家一一介绍. 1.Axis.XFire和CXF方式

你会在C#的类库中添加web service引用吗?

本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008,之所以没有选择现在热门的WCF,本人有如下原因: 1:负责开发Web Service的小组对于vs2008应用不多,更不能奢望令人垂涎的WCF.     2:项目开发时间有限,根本不许你去拿项目做实验.     3:项目改动不大,web service足够对付需求.       由于我们的项目是从

Web Service 小练习

对于网站与网站之间数据互动,这是我的说法,不是专家说的,不要相信.应该有专业的说法. 从他人的网站通过一个接口获取数据,这一直是我感到神奇的事,怎么实现的,一直萦绕于心,想要弄过究竟,怎么是实现的啊!不止一次在群里听到同样的提问.可惜每次我都没有深入探究,自己太懒惰了,不想动手实践,想找现成的,可惜也没有去找. 还是要工作压力驱使,不然也许这个一直对我来说是一个疑惑.工作中有这么一个任务就是通过接口去获取供应商的数据,还好已经有现成的了,我只要看懂,然后模仿做一个就可以了,不过也费了我不少时间.

Spring学习(七)——开发Web Service的几种方式

本文作者在学习使用Java开发Web Service(不包括Restful)时,由于不知道Java有这么多框架支持开发Web Service一度陷入迷惘,不知道这些框架各有 什么不同,各有什么优缺点.经过几天的查资料.实验.失败.再查资料.再实验的过程,终于有了一个大概的了解,也把自己的学习成果跟大家分享一下: 用Java开发Web Service一般有三种方式,本文在Idea下分别使用三种方式并结合Spring容器实现了三个Demo,下面为大家一一介绍. 1.Axis.XFire和CXF方式

Time Aware and Data Sparsity Tolerant Web Service Recommendation Based on Improved Collaborative Filtering

论文原文:https://pan.baidu.com/s/1D1xjySQD25qaQXKMdJp7eA 1 introduction面向服务计算(Service-Oriented Computing,SOC)在进几年广泛使用,其中web服务就是其中的基石,因为面向服务计算需要web服务封装应用功能以及提供标准接口. 一个web应有意味着需要满足用户的一系列任务,而每一个任务就可以对应到一个web服务上边,所以,在实际应用中就产生了一个不得不面对的问题,为了需要在一堆功能相当的web服务当中找到

在GlassFish应用服务器上创建并运行你的第一个Restful Web Service【翻译】

前言 本人一直开发Android应用,目前Android就业形势恶劣,甚至会一路下滑,因此决定学习服务器开发.采用的语言是java,IDE是Intellij,在下载Intellij的同时看到官网很多优秀的guide文章,于是按照guide成功完成了一个RESTful的demo.官方文档非常简洁,给我带来了很大的帮助,于是翻译之,希望对其他不愿意看原文的人有所帮助.由于水平有限,读者发现错误请指正,谢谢. 原文地址: https://www.jetbrains.com/help/idea/2016

Axis实现 web service接口开发 + 客户端调用

看到网上挺多人找webservice axis开发案例,但是网上较多的都是有点乱,初学者不太容易看得懂,所以最近看到自己终于有了点空闲时间,就上传了一份比较简单的webservice axis的完整案例. 只适用于初学者. 一.新建一个web项目 导入lib包. 2.配置 web.xml <!-- axis 配置 -->   <servlet>         <display-name>Apache-Axis Servlet</display-name>