HTTP通信--Android客户端与Servlet通信

android客户端

//设置一个handler对象(新开一个Thread需要一个handler对象发送message)
//根据发送过来的message进行相关的操作
private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    Log.i("handler",msg.obj.toString());
                    break;
            }
        }
    };

//新建一个方法负责开启新线程和HTTP通信
    public void httpcon(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                try {
                    URL url = new URL(urlpath);
                    connection = (HttpURLConnection) url.openConnection();

                    //设置post请求
                    connection.setRequestMethod("POST");
                    //如要进行POST请求下面两个必须设置
                    connection.setDoInput(true);//开启输出
                    connection.setDoOutput(true);//开启输入

                    connection.connect();

                    //传送JSON数据
                    Gson gson = new Gson();

                    OutputStream os = connection.getOutputStream();//创建输出流
                    os.write(gson.toJson(lp).getBytes());//通过流传输数据
                    os.flush();
                    os.close();

                    if (HttpURLConnection.HTTP_OK == connection.getResponseCode())
                        Log.i("flag","连接成功");

                    //读取服务端的响应信息
                    InputStream is = connection.getInputStream();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                    String read = "";
                    StringBuilder result = new StringBuilder();
                    while ((read = reader.readLine()) != null)
                        result.append(read);
                    Log.i("flag2",result.toString());

                    //创建MESSAGE
                    Message message = handler.obtainMessage();
                    message.what = 1;
                    message.obj = result;
                    handler.sendMessage(message);

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    connection.disconnect();
                }
            }
        }).start();

Servlet端

尚未解决的问题①1.


public class DataUploading extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //this.doPost(request, response);

    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //设置request,response的编码,避免出现中文乱码
        request.setCharacterEncoding("UTF-8");

        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        Connection con;

        //创建输入流,获取从客户端发送过来的信息
         InputStream is = request.getInputStream();
         BufferedReader reader = new BufferedReader
                 (new InputStreamReader(is,"utf-8"));//utf-8解决中文乱码

         String read = "";
         StringBuilder result = new StringBuilder();

         while((read = reader.readLine()) != null) {
             result.append(read);

         } 
         System.out.print(result.toString());
         response.getOutputStream().write(result.toString().getBytes("UTF-8"));;
        //使用getOutputStream.write输出响应信息给客户端
        //getOutputStream.write输出为字节,所以要用getBytes("UTF-8")避免中文乱码。

        //亦可使用PrintWriter进行字符输出
        //PrintWriter out = response.getWriter();
        //out.print();
    }
}




  1. 如果在doGet方法中使用this.dopost(),response的信息将不会打印在网页的页面上。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值