初探webService
2021-06-08 01:03
标签:request ima 地址 throws mon 方式 target blank close webService提供了一种规范,可以用于不同语言或者不同平台之间数据传输。 复习socket通信以便更好的理解ws。 socket通信图示: 平台a与平台b无法进行直接通信,通过socket进行通信。 socket通信举例(回复相同的字符串): 客户端 服务端 先开启服务端的程序,然后等待,一旦客户端向服务端发送消息,握手成功则该socket通信成功。 由于我们的项目大多是web项目,于是通过浏览器发起请求的方式访问socket服务。 服务端不变。 客户端采用jsp 运行结果: 显然这么一大串是不要的,我们只需要的是sname的信息。 以下记录如何调用已经封装好的ws。 http://www.webxml.com.cn,该站点提供了很多ws服务,请求ws服务的方式大致有以下几种(get,post,soap) 输入xml。 还有一种利用命令行生成接口的方式: 使用wsimport: 每个ws都会有一个WSDL,WSDL即WebService Description Language – Web服务描述语言。它是通过XML形式说明服务在什么地方-地址。通过XML形式说明服务提供什么样的方法 – 如何调用。 目前只需要复制一下那个url即可,然后打开命令提示符窗口,随便进入一个目录下(该目录要保存等会生成的和ws相关的文件,自己事先建一个即可),运行 初探webService 标签:request ima 地址 throws mon 方式 target blank close 原文地址:http://www.cnblogs.com/popcornya/p/7302447.htmlpackage com.bxw.client;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
private Socket socket;
private OutputStream os;//输出流,获取用户输入的信息
private InputStream is;//输入流,接受来自服务器的数据
public SocketClient() {
}
/**
* 构造方法
* @param url
* @param port
*/
public SocketClient(String url,int port) {
try {
socket = new Socket(url, port);
is = socket.getInputStream();
os = socket.getOutputStream();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
public OutputStream getOs() {
return os;
}
public void setOs(OutputStream os) {
this.os = os;
}
public InputStream getIs() {
return is;
}
public void setIs(InputStream is) {
this.is = is;
}
public void close(){
try {
os.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SocketClient sc = new SocketClient("127.0.0.1", 9999);//创建客户端
Scanner scan = new Scanner(System.in);//控制台接受用户输入
OutputStream os = sc.getOs();//获得输出流,到服务端
InputStream is = sc.getIs();//获得输入流,用户输入
String data="";
while(!data.equals("bye")){
System.out.println("------请输入要转化的字母------");
data = scan.next();//获取控制台输入
//写入到输出流
try {
os.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
sc.close();
}
}
package com.bxw.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
private ServerSocket ss;
private OutputStream os;//输出流,输出到客户端处理过后的信息
private InputStream is;//输入流,接受客户端的信息
public SocketServer() {
}
public SocketServer(int port){
try {
ss = new ServerSocket(port);
System.out.println("--------空闲中,等待请求--------");
Socket socket = ss.accept();
System.out.println("--------握手成功--------");
while(true){
is = socket.getInputStream();
os = socket.getOutputStream();
byte[] b = new byte[1024];
int len = is.read(b);
String data = new String(b, 0, len);
System.out.println("客户端发来的数据为:"+data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public ServerSocket getSs() {
return ss;
}
public void setSs(ServerSocket ss) {
this.ss = ss;
}
public OutputStream getOs() {
return os;
}
public void setOs(OutputStream os) {
this.os = os;
}
public InputStream getIs() {
return is;
}
public void setIs(InputStream is) {
this.is = is;
}
public void close(){
try {
is.close();
os.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new SocketServer(9999);
}
}
@ page language="java" 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=ISO-8859-1">
title>sockie客户端title>
head>
body>
form name="form" action="http://localhost:9999" method="post">
input type="text" name="vname">
input type="submit" value="提交">
form>
body>
html>
package com.bxw.client;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
public class TranslateClient {
/**
* get请求
* @param number
* @throws HttpException
* @throws IOException
*/
private void get(String number) throws HttpException, IOException {
HttpClient hc = new HttpClient();//创建一个浏览器对象
//填写数据,指定发送get请求
GetMethod gm = new GetMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx"
+ "/getMobileCodeInfo?mobileCode=" + number + "&userID=");
gm.setRequestHeader("Content-Type", "text/xml; charset=utf-8");//指定传输格式
int code = hc.executeMethod(gm);//发送请求
System.out.println("该请求的状态码"+code);
String result = gm.getResponseBodyAsString();
System.out.println("返回的结果:"+result);
}
/**
* post请求
* @param number
* @throws IOException
* @throws HttpException
*/
private void post(String number) throws HttpException, IOException {
//HttpClient模拟http请求
HttpClient hc = new HttpClient();//浏览器对象
//post请求
PostMethod pm = new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");
//指定post传输格式
pm.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//传输参数
pm.setParameter("mobileCode", number);
pm.setParameter("userId", "");
//发送请求
int code = hc.executeMethod(pm);
System.out.println("状态码"+code);
String result = pm.getResponseBodyAsString();
System.out.println("结果"+result);
}
/**
* soap方式(有1.1和1.2两个版本,jdk1.7以上才可以使用soap1.2)
* @param number
* @throws IOException
* @throws HttpException
*/
private void soap(String number) throws HttpException, IOException {
HttpClient hc = new HttpClient();//浏览器对象
PostMethod pm = new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");//post提交
//指定传输格式为xml格式
pm.setRequestHeader("Content-Type", "application/soap+xml;charset=utf-8");
//传输xml
pm.setRequestBody(new FileInputStream("C:/Users/Admin/Desktop/service.xml"));
//发送post请求
int code = hc.executeMethod(pm);
System.out.println("状态码"+code);
String result = pm.getResponseBodyAsString();
System.out.println("结果"+result);
}
public static void main(String[] args) {
TranslateClient tl = new TranslateClient();
try {
//tl.get("18819465153");
//tl.post("18819465153");
tl.soap("18819465153");
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
xml version="1.0" encoding="utf-8"?>
soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
soap12:Body>
getMobileCodeInfo xmlns="http://WebXml.com.cn/">
mobileCode>18312345678mobileCode>
userID>userID>
getMobileCodeInfo>
soap12:Body>
soap12:Envelope>
wsimport http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
就会生成相应的javabean,当然了,是.class文件,但是我们不想要class文件,我们想要java文件,所以可以使用如下命令: wsimport -s http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
这样不仅生成了class文件,还生成了java文件,如果我们想要在固定的包下生成这些文件,等会方便直接拷贝到项目里,可以使用下面的命令: wsimport -s . -p ws.client.c http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
这样就会在目录ws/client/c/下生成所需要的class和java代码,然后我们删掉class文件,直接拷贝ws目录到工程中即可。