Java利用Tomcat作为服务器与Android的Http通信
16lz
2021-01-24
在android手机端写了个程序,功能是完成一个两位数的运算。这个运算过程是在java后台完成的,android端利用Http通信把相关的参数传过去,后台经过计算把结果返回给客户端。
贴出客户端部分代码
//点击按钮,把参数打包成json格式发送到后台
publicvoidsend(Viewv){Stringstr1=tv1.getText().toString();Stringstr2=tv2.getText().toString();if(str1.equals("")||str2.equals("")){Toast.makeText(MainActivity.this,"参数不能为空!",Toast.LENGTH_LONG).show();return;}finalinta=Integer.parseInt(str1);finalintb=Integer.parseInt(str2);newThread(newRunnable(){@Overridepublicvoidrun(){JSONObjectjsonObject=newJSONObject();JSONArrayjsonArray=newJSONArray();try{jsonObject.put("parm1",a+"");jsonObject.put("parm2",b+"");jsonArray.put(jsonObject);}catch(JSONExceptione){e.printStackTrace();}result=newHttpUtils().getDataFromServer(Consant.url,jsonArray.toString(),method,a,b);mHandler.sendEmptyMessage(0x0001);}}).start();}
//在这里我同时进行两种方式的参数传递
//一个是setRequestProperty(key, value);
//另一个是常用的输出流
/**
* 根据手机号从服务器获取相关信息
* 从服务器上获取指定的内容-POST
*
*/
publicStringgetDataFromServer(StringsvrUrl,StringParamStr,Stringtype,inta,intb){try{//转成指定格式byte[]requestData=ParamStr.getBytes("UTF-8");HttpURLConnectionconn=null;DataOutputStreamoutStream=null;StringMULTIPART_FORM_DATA="multipart/form-data";//构造一个post请求的http头URLurl=newURL(svrUrl);//服务器地址conn=(HttpURLConnection)url.openConnection();conn.setDoInput(true);//允许输入conn.setDoOutput(true);//允许输出conn.setUseCaches(false);//不使用cachesconn.setRequestMethod("POST");conn.setRequestProperty("Connection","Keep-Alive");conn.setRequestProperty("Content-Type",MULTIPART_FORM_DATA);conn.setRequestProperty("Content-Length",Long.toString(requestData.length));conn.setRequestProperty("method",type);conn.setRequestProperty("one",a+"");conn.setRequestProperty("two",b+"");//请求参数内容,获取输出到网络的连接流对象outStream=newDataOutputStream(conn.getOutputStream());outStream.write(requestData,0,requestData.length);outStream.flush();outStream.close();ByteArrayOutputStreamoutStream2=newByteArrayOutputStream();intcah=conn.getResponseCode();if(cah!=200){Log.v("data","服务器响应错误代码:"+cah);return"0";}elseif(cah==200){Log.v("data","服务器响应成功:"+cah);}InputStreaminputStream=conn.getInputStream();intlen=0;byte[]data=newbyte[1024];while((len=inputStream.read(data))!=-1){outStream2.write(data,0,len);}outStream2.close();inputStream.close();StringresponseStr=newString(outStream2.toByteArray());Log.v("data","data="+responseStr);returnresponseStr;}catch(Exceptione){return"";}}
接下来看看java服务端处理
//在java web项目中创建了一个Servlet用来接收客户端发送的数据
//因为客户端用的是Post方法,所以我们在Servlet的Post方法中对数据进行处理
//客户端用了两种方式传参数,在后台我们仍然用两种方式取参数
//第一种String method = request.getHeader("method").toString();
//第二种则是输出流来取值了
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{System.out.println("---------00000000----");inta;intb;intres=0;doubleres2=0;Stringresult;Stringmethod=request.getHeader("method").toString();Stringstr1=request.getHeader("one").toString();Stringstr2=request.getHeader("two").toString();System.out.println(method+"/"+str1+"/"+str2);try{a=Integer.parseInt(str1);b=Integer.parseInt(str2);}catch(Exceptione){response.getWriter().append(e.getMessage()+"");return;}if(method.equals("+")){res=newUtils().plus(a,b);}elseif(method.equals("-")){res=newUtils().minus(a,b);}elseif(method.equals("*")){res=newUtils().multy(a,b);}elseif(method.equals("/")){res2=newUtils().trad(a,b);}if(method.equals("/")){result=res2+"";}else{result=res+"";}response.setCharacterEncoding("utf-8");response.getWriter().append(result+"");getData(request);}
publicStringgetData(HttpServletRequestreq){Stringresult=null;try{//包装request的输入流BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)req.getInputStream(),"utf-8"));//缓冲字符StringBuffersb=newStringBuffer("");Stringline;while((line=br.readLine())!=null){sb.append(line);}br.close();//关闭缓冲流result=sb.toString();//转换成字符System.out.println("result="+result);}catch(Exceptione){e.printStackTrace();}returnresult;}
另外注意编码格式问题,在客户端用的是utf-8编码,我们在服务端仍然要用utf-8编码,否则出现中文乱码现象。
//电脑的ip地址
//手机和电脑处于同一个局域网内,所以可以通过ip访问内网Tomcat
public static String url = "http://192.168.1.122:8080/MathTest/action?";
更多相关文章
- Android设置TextView中部分字体颜色和点击事件
- Android异步操作总结
- swift横空出世
- android开发我的新浪微博客户端-开篇
- Android中的Sqlite数据库的简单使用
- Android绘图系列(一)——自定义View基础
- Android(安卓)访问 .net C#写的webservice
- Error:UNEXPECTED TOP-LEVEL ERROR:
- 【Android】AsyncTask源码分析