Android与服务器通过Servlet进行双向通信

工具:
Android客户端:Android Studio
Web服务端: IDEA 或者MyEclipse【此文以IDEA为例】
其他:Tomcat

客户端代码:

    public void TestServlet(View v){
        //构建URL的格式为:    http://IP地址:监听的端口号/Servlet的路径
        final String strUrl = "http://192.168.1.104:8080/mLogin";
        final URL[] url = {null};
        Thread th=new Thread(new Runnable() {
            @Override
            public void run() {
                try{

                    //第一步:访问网站,进行连接
                    url[0] =new URL(strUrl);
                    HttpURLConnection urlConn=(HttpURLConnection) url[0].openConnection();
                    urlConn.setDoInput(true);       //setting inputstream using bytestream
                    urlConn.setDoOutput(true);
                    urlConn.setRequestMethod("POST");
                    urlConn.setUseCaches(false);
                    urlConn.setRequestProperty("Content-Type","application/x-ww-form-urlencoded");  //
                    urlConn.setRequestProperty("Charset","utf-8");
                    urlConn.connect();

                    //第二步:准备好发送的数据
                    Map<String ,String> map=new HashMap<>();
                    map.put("username","Dear lonikitave");
                    map.put("password","123456");
                    JSONArray jsonarray= JSONArray.fromObject(map);

                    //第三步:打开数据通道
                    DataOutputStream dop=new DataOutputStream(urlConn.getOutputStream());
                    dop.writeUTF(String.valueOf(jsonarray));

                    //第四步:将准备的数据发送给服务器
                    dop.flush();
                    dop.close();

                    BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
                    String result="";
                    String readLine=null;
                    while ((readLine=bufferedReader.readLine())!=null){
                        result+=readLine;
                    }
                    bufferedReader.close();
                    urlConn.disconnect();
                    //调试返回的数据
                    System.out.println("从服务端获得的返回数据为:  "+ URLDecoder.decode(result,"utf-8"));

                }catch (MalformedURLException e){
                    System.out.println("出现了异常:"+e.getMessage());
                } catch (IOException e) {
                    System.out.println("出现了异常:"+e.getMessage());
                    e.printStackTrace();
                }
            }
        });
        th.start();

    }

服务端代码:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        byte[] buffer=new byte[1024];
        InputStream inputStream=request.getInputStream();
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        int length;
        while ((length=inputStream.read(buffer))!=-1){
            byteArrayOutputStream.write(buffer,0,length);
        }
        String str= URLDecoder.decode(String.valueOf(byteArrayOutputStream),"UTF-8");
        String str_result=str.substring(3,str.length()-1);
        JSONObject jsonObject=JSONObject.fromObject(str_result);

        System.out.println("从客户端收到的消息为:\n用户名:"+jsonObject.getString("username")+"\n密码为:"+jsonObject.getString("password"));

        String str_response="服务器已经收到客户端的消息";
        response.getWriter().write(URLEncoder.encode(str_response,"UTF-8"));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    }

代码运行结果:
客户端控制台:
这里写图片描述

服务端控制台:
服务台的输出结果
注意事项:
1.在IDEA端,在web目录下需建立一个文件夹lib,并在里边加入JSON需要用到的jar包;下载地址为:点击跳转至下载界面
2.如果使用的是Tomcat来部署web项目,则还需要将这两个jar包一同复制粘贴至tomcat安装路径下面的lib文件夹,否则,项目运行时,服务端会报错;
3.访问网站属于耗时操作,应该另外开一个线程去执行它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值