WebService学习之旅(1):基于Socket通信

WebService,顾名思义,就是Web服务,表示应用程序之间的远程调用。调用应该是跨语言的。

首先回顾一下,应用程序调用另一应用程序的方式:

  • Socket:传输层协议。不支持http协议
  • HTTP: 传输层协议。传输的只能是字符串,参数多则不利于维护。
  • WebService:可以在一个应用程序调用另一应用程序的Java Bean

一、基于Socket调用

客户端和服务器是不能直接通信的,这里借助于Socket通信。通信过程如下图:

1.socket通信示例

接着分别创建两个Java Project,模拟socket通信,项目结构如下图:

代码清单:

SocketClient.java

/**
 * Socket客户端,用于发送请求
 */
public class SocketClient {

    public static void main(String[] args) throws IOException {

        Scanner scanner = new Scanner(System.in);

        Socket socket = new Socket("127.0.0.1", 8088);

        System.out.println("请输入要转化的字母:");
        String data = scanner.next();

        // 获取输出流,发送数据
        OutputStream out = socket.getOutputStream();
        out.write(data.getBytes());

        System.out.println("等待服务器返回数据~~~");

        InputStream in = socket.getInputStream();
        byte[] b = new byte[1024];
        int len = in.read(b);
        System.out.println("返回数据为:" + new String(b, 0, len));

        // 释放资源
        in.close();
        out.close();
        socket.close();
    }

}

SocketServer.java:

/**
 * Socket服务端,用于接收客户端请求,将小写转换为大写
 */
public class SocketServer {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8088);

        while (true) {
            System.out.println("等待客户端请求~~~");

            Socket socket = serverSocket.accept();
            System.out.println("--连接成功--");

            // 通过输入流获取数据
            InputStream in = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int len = in.read(bytes);
            String data = new String(bytes, 0, len);
            System.out.println("客户端请求数据为:" + data);

            OutputStream out = socket.getOutputStream();
            out.write(data.toUpperCase().getBytes());

            // 释放资源
            out.close();
            in.close();
        }
    }
}

接下来,我们首先启动服务端:

启动客户端,发送请求:

2.web程序调用socket

接下来在MyClient中添加webapp模块:

勾选Web Application:

在web目录下添加index.jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title></title>
  </head>
  <body>
        <form action="http://127.0.0.1:8088" method="get">
            姓名:<input type="text" name="username"><br>

            密码:<input type="text" name="password"><br>
            <input type="submit" value="提交">
        </form>
  </body>
</html>

将它发布到tomcat上,通过浏览器访问(需要先启动服务端哦):

服务器端输出:

通过上面的对比,我们发现并没有返回response格式,而只是将结果转换成了大写。web程序可以调用socket请求,但是由于协议不同,在处理的时候要过滤http的协议格式,返回的时候还需要添加http返回的格式。

posted @ 2016-11-01 16:35  萧萧弈寒  阅读(726)  评论(0编辑  收藏  举报