标签:des style c class blog code
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<alexande2008@gmail.com> 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 }
获取输入页面:
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>
成果展示页面:
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>
这下面英文文档是关于创建web service的,在这次实验里基本没用到,但当时觉得这些说得很细,所以就存了下来,哪天让我写个web service时,就能参考了。
JAX-WS endpoints must follow these requirements:
javax.jws.WebService
or javax.jws.WebServiceProvider
annotation.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.static
or final
.javax.jws.WebMethod
.final
and must not be abstract
.finalize
method.javax.annotation.PostConstruct
or javax.annotation.PreDestroy
annotations
on its methods for lifecycle event callbacks.
很犯懒,基本都是实验报告里的东西复制粘贴过来的。。。
这个实验耗费了我整整3天时间,这个过程就是不断绕弯路,不断自己爬回来的过程,代码推倒重写三遍以上,过程中学到的东西不少,本想多些点自己这两天这里面学到的细节细活,凌晨4点了,算了=。=
标签:des style c class blog code
原文地址:http://www.cnblogs.com/alex-wood/p/3751933.html