模拟客户端与服务器端交互--包含字符流向字节流转型的使用

    技术2022-05-20  59

    1.首先我们建立一个Web工程,TestDemoProject

     

    2.在com.test.chapter01包下创建一个Servlet,ServerDemo.java,并且在web.xml中配置如下:

             <servlet>

                       <servlet-name>ServerDemo</servlet-name>

                       <servlet-class>com.test.chapter01.ServerDemo</servlet-class>

             </servlet>

             <servlet-mapping>

                       <servlet-name>ServerDemo</servlet-name>

                       <url-pattern>/helloServlet</url-pattern>

             </servlet-mapping>

    该Servlet中代码如下:

    package com.test.chapter01;

     

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.io.PrintWriter;

     

    import javax.servlet.Servlet;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    /**

     * 服务器端接收数据并返回数据给客户端

     * <数据之间一般用XML进行交互>

     * @author  XXX

     * @version  XXX

     * @see  [相关类/方法]

     * @since  [产品/模块版本]

     */

     public class ServerDemo extends HttpServlet implements Servlet

    {

         private static final long serialVersionUID = 1L;

         //通讯换行符。

         private final static String NEW_LINE = "/r/n";

         /**

          * doGet()方法

          */

         protected void doGet(HttpServletRequest request, HttpServletResponse response)

         throws ServletException, IOException

         {

             this.doPost(request, response);

         }

     

         /**

          * doGet()方法

          */

         protected void doPost(HttpServletRequest request, HttpServletResponse response)

             throws ServletException, IOException

         {

             InputStream is = null;

             BufferedReader reader = null;

             PrintWriter out = null;

             try

             {

                 is = request.getInputStream();

                 reader = new BufferedReader(new InputStreamReader(is));

     

                 StringBuffer sb = new StringBuffer();

                 String content = reader.readLine();

                 while (null != content)

                 {

                     sb.append(content + NEW_LINE);

                     content = reader.readLine();

                 }

     

                 System.out.println("request message is: " + sb.toString());

     

                 out = response.getWriter();

                 out.write("Hello World!");

             }

             catch (Exception e)

             {

                 e.printStackTrace();

             }

            finally

            {

                if (null != out)

                {

                    out.flush();

                    out.close();

                }

                if (null != reader)

                {

                    reader.close();

                }

                if (null != is)

                {

                    is.close();

                }

            }

     

         }

    }

     

    3.编写客户端与服务器端交互的工具类

    package com.test.chapter01;

     

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import java.io.Writer;

    import java.net.HttpURLConnection;

    import java.net.MalformedURLException;

    import java.net.URL;

    import java.net.URLConnection;

     

    /**

     * 客户端访问服务器端的工具类

     *

     * @author  XXX

     * @version  XXX

     * @see  [相关类/方法]

     * @since  [产品/模块版本]

     */

    public class ServerTools

    {

        //通讯换行符。

        private final static String NEW_LINE = "/r/n";

        /**

         * 访问服务器端的URL

         */

        private String url;

     

        public String getUrl()

        {

            return url;

        }

     

        public void setUrl(String url)

        {

            this.url = url;

        }

     

        /**

         * 校验URL是否合理

         * @return URL是否合理

         * @see [类、类#方法、类#成员]

         */

        public boolean isValidURL()

        {

            try

            {

                URL url = new URL(this.getUrl());

                if (null != url)

                {

                    return true;

                }

            }

            catch (MalformedURLException e)

            {

                e.printStackTrace();

     

            }

            return false;

        }

     

        /**

         * 发送消息到服务器端,并且接受服务端响应的消息(如果有)

         * @param message 需要发送的消息

         * @return String 服务器端响应的消息

         * @see [类、类#方法、类#成员]

         */

        public String sendAndReceiveMessage(String message)

        {

            StringBuffer sb = new StringBuffer();

     

            URL url = null;

            Writer writer = null;

            BufferedReader reader = null;

            HttpURLConnection urlConnection = null;

            try

            {

                url = new URL(this.getUrl());

                //打开URL链接

                URLConnection connection = url.openConnection();

                //设置连接超时最大的毫秒数,这里设置超时时间为2分钟

                connection.setConnectTimeout(1000 * 60 * 2);

                //需要写入数据

                connection.setDoOutput(true);

                //需要从URL连接中读取数据

                connection.setDoInput(true);

     

                //URL中写入数据,需要将字符流转换成字节流

                writer = new OutputStreamWriter(connection.getOutputStream());

                writer.write(message);

                writer.flush();

     

                //写完数据之后,需要从连接中读取服务器返回的数据

                reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

     

                String content = reader.readLine();

                while (null != content)

                {

                    sb.append(content + NEW_LINE);

                    content = reader.readLine();

                }

     

                //检查通信结果

                urlConnection = (HttpURLConnection)connection;

                if (HttpURLConnection.HTTP_OK != urlConnection.getResponseCode())

                {

                    throw new IllegalStateException("response code error --> " + urlConnection.getResponseCode());

                }

     

                System.out.println("response message is: " + sb.toString());

            }

            catch (MalformedURLException e)

            {

                e.printStackTrace();

            }

            catch (IOException e)

            {

                e.printStackTrace();

            }

            finally

            {

                if (null != writer)

                {

                    try

                    {

                        writer.flush();

                        writer.close();

                    }

                    catch (IOException e)

                    {

                        e.printStackTrace();

                    }

                }

                if (null != reader)

                {

                    try

                    {

                        reader.close();

                    }

                    catch (IOException e)

                    {

                        e.printStackTrace();

                    }

                }

                //断开连接

                if (null != urlConnection)

                {

                    urlConnection.disconnect();

                }

            }

     

            return sb.toString();

        }

    }

     

    4.编写测试数据类

    package com.test.chapter01;

     

    /**

     * 测试类

     *

     * @author  XXX

     * @version  XXX

     * @see  [相关类/方法]

     * @since  [产品/模块版本]

     */

    public class Test

    {

        public static void main(String[] args)

        {

            String requestUrl = "http://localhost:8081/TestDemoProject/helloServlet";

            ServerTools tools = new ServerTools();

            tools.setUrl(requestUrl);

            boolean isValidUrl = tools.isValidURL();

            if (isValidUrl)

            {

                String receiveMessage = tools.sendAndReceiveMessage("lenbo");

                System.out.println(receiveMessage);

            }

        }

    }

     

    5.将TestDemoProject发布到Tomcat中,启动Tomcat(我本地端口号为8081),执行main方法就可以模拟到从服务器端返回的数据了,这个例子模拟了客户端访问服务器的整个过程,同时结合了字符流向字节流转换的应用,简化了数据的操作。

    response message is: Hello World!

     

    Hello World!

     

     


    最新回复(0)