1.笔记内容
1. 便民网站分析;2. java开发webservice;3. webservice和socket区别;4. 什么是webservice;5. Soap1.1和soap1.2区别;6. wsdl;7. 客户端开发的第二种方式;8. soap;9. 通过http发送soap协议体;10. webservice客户端开发总结;
2.便民网站分析
2.1:通过便民网站,查询日常信息
分析:
Tcp: 是一种传输层协议,是一种面向连接的协议,经过三次握手客户端和服务端建立一个连接(通道)。Tcp传输数据时稳定。
Udp:是一种传输层协议,是一种数据报协议,速度快但不稳定。它是面向非连接的协议,它不与对方建立连接,而且直接就把数据报发送过去。
2.2:Socket实现天气查询
企业开发后台服务常使用socket。socket开发时注意:1.服务端要有可持续运行能力,保证线程一直在运行。2.并发处理能力,要使用多线程。
分析:
实现:
//创建服务端
public class WeatherServer {
public static void main(String[] args) throws Exception {
/**
* 创建socket服务端 应用服务的端口建议10000以上,主要目的避免端口被占用问题
*/
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("启动天气查询服务!");
while (true) {
try {
/**
* 接受客户端连接 阻塞方法
*/
Socket socket = serverSocket.accept();
Thread.sleep(1000);
/**
* 开启一个新线程 新线程处理内容就是:接受客户端的请求,向客户端发送数据
* 可以使用线程池 ThreadPoolExecutor
*/
new Thread(new WeatherRunable(socket)).start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//加入多线程测试
public class WeatherRunable implements Runnable {
private Socket socket;
public WeatherRunable(Socket socket) {
this.socket = socket;
}
public void run() {
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
try {
/**
* 接受客户端请求数据
*/
dataInputStream = new DataInputStream(socket.getInputStream());
String cityName = dataInputStream.readUTF();
System.out.println("from client..." + cityName);
/**
* 向客户端发送数据
*/
dataOutputStream = new DataOutputStream(socket.getOutputStream());
String result = "晴";
dataOutputStream.writeUTF(result);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
dataInputStream.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//创建客户端
/**
* 天气查询socket客户
* @author zhaojd
*/
public class WeatherClient {
public static void main(String[] args) throws Exception, IOException {
/**
* 创建socket链接
*/
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
while (true) {
try {
socket = new Socket("127.0.0.1", 12345);
/**
* 向服务器发送数据
*/
dataOutputStream = new DataOutputStream(socket.getOutputStream());
String cityName = "广州";
dataOutputStream.writeUTF(cityName);
System.out.println("to server..." + cityName);
/**
* 接受服务器数据
*/
dataInputStream = new DataInputStream(socket.getInputStream());
String result = dataInputStream.readUTF();
System.out.println("from server..." + result);
} catch (Exception e) {
e.printStackTrace();
} finally {
dataInputStream.close();
dataOutputStream.close();
socket.close();
}
}
}
}
小结:
使用socket传输数据需要关注如何解析数据流。
如果可以面向对象开发,直接传输Java对象,既可减轻开发的复杂度。
3. java开发webservice
java中共有三种webservice规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。
3.1 Jaxws
JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2