最近需要实现android与部署在本地tomcat上的java web项目之间进行通信的功能,在这里总结一下。
首先,由于是与本地服务器通信,所以我是采用android模拟器实现的。常用的模拟器有夜神,海马玩等(官方模拟器用着比较卡) 但是夜神无法访问到本地tomcat,所以我
使用的海马玩,本地服务器的地址是10.0.2.2。
夜神连接androidstudio:cmd进入到Nox\bin下,nox_adb.exe connect 127.0.0.1:62001
海马玩连接androidstudio:cmd进入Droid4X 下,adb connect 127.0.0.1:26944。 当然端口号随意。
java web服务端我使用的是springmvc+mybatis+spring。
思路:
android端的话,我使用的是HttpUrlConnection与服务端进行通信,传递的是json信息。主要代码如下:
publicvoidpostRequest() {
try{
jsonHandle=newJsonHandle();
jsonObject.put("username",username);
jsonObject.put("password",password);
data=jsonObject.toString().getBytes();//这是要发送给服务端的json信息,里面有用户名以及密码。
URL url=newURL(ip);//ip是后端具体的处理登录的url,例如http://10.0.2.2:8080/xxx/mvc/login,记得加上http。
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setConnectTimeout(3000);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.connect();
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream.write(data);
outputStream.flush();//发送data
//读取服务端的返回信息。
InputStream is=httpURLConnection.getInputStream();
BufferedReader reader =newBufferedReader(newInputStreamReader(is));
StringBuilder sb =newStringBuilder();
String line =null;
try{
while((line = reader.readLine()) !=null) {
sb.append(line +"/n");
}
}catch(Exception e) {
e.printStackTrace();
}finally{
try{
is.close();
}catch(Exception e)
{e.printStackTrace();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
服务端,使用springmvc处理请求。代码如下:
@Controller
@RequestMapping(value ="/mvc")
publicclassLoginController {
@RequestMapping(value ="/login",method=RequestMethod.POST)
publicvoidlogin(HttpServletRequest req,HttpServletResponse rep)throwsIOException{
BufferedReader br =null;
try{
br = req.getReader();//接收信息
}catch(IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String line =null;
String data ="";
while((line = br.readLine()) !=null) {
data += line;
}
try{
rep.getOutputStream().write("信息".getBytes());//发送信息。
}catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
一般传递方式都是post.这样子,就达到了通信的目的,再加上一些逻辑代码,就能做到登录检测等功能啦