和android交互总结篇
模拟和android交互,可以在一个测试类中写:
1.首先通过url获取web项目要访问的action路径。
String httpUrl="http://localhost;8080/MicAtt/login/LoginAction/login.action";
2.创建URL,通过HttpURLConnection 连接。
Url url=new URL(httpUrl);
HttpUrlConnection urlConn=(HttpUrlConnection)url.openConnection();//此处只是创建一个实例,并未真正连接
3.设置URLConnection一些参数类型,并连接。
urlConn.setDoInput(true);//设置允许输入
urlConn.setDoOutput(true);//设置允许输出
urlConn.setUseCaches(false)//设置不使用缓存
urlConn.setRequestMethod("POST");//设置post方式发送
urlConn.setRequestProperty("Connection","Keep-Alive");//设置一直连接
urlConn.setRequestProperty("Content-length",String.valueOf(length));//设置文件长度
urlConn.setRequestProperty("Content-type","text/xml;charset=UTF-8");//设置文件类型text/xml
urlConn.connect();
4.使用outputStream 输入流。//与正常思维正好相反,输入流使用OutputStream 向地址传流信息。
OutputStream out = urlConn.getOutputStream(); //获取输出流,
BufferedOutputStream bos = new BufferedOutputStream(out); //缓冲流
OutputStreamWriter osw = new OutputStreamWriter(bos,"UTF-8"); //使用writer写入
osw.write(xxx); //可以传文件流,json
osw.flush();
osw.close();
5.使用InputStream 接受返回的json。
InputStream input = urlConn.getInputStream();
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader reader = new BufferedReader(inputReader);
StringBuffer sb = new StringBuffer();
String inputLine= null;
while((inputLine = reader.readLine())!=null){
sb.append(inputLine).append("\n");
}
reader.close();
inputReader.close();
input.close();
urlConn.disconnection();//不允许其他连接
syso(sb.toString());
至此,模拟android已经完成,然后在action中,接受用户传进来的流。
1.如果用户传参方式,是通过路径+?方式,那么用request就可以获取该参数。
2.然后执行一系列数据库操作,封装json。
3.在第一步之前,首先应该获取request和response,HttpServletRequest和HttpServletResponse,然后用response输出要返回给android的输出
流。对应android的第5步。
response.setContentType("text/json;charset=UTF-8");
response.setCharactorEncoding("UTF-8");
response.write(json.toString().getBytes("utf-8"));
response.flush();
response.close();
在此将android上传图片代码贴上:
android使用的是通过form上传图片和相关信息,和struts2上传相似,在action内,定义File类型的变量,接受图片。
1.定义文件。
File f=form.getImage(); //form里面有File类型的image变量
2.还是使用输入流输出流的方式,将图片保存到相应的地址。
String path = ServletActionContext().getServletContext().getRealPath("/upload");//项目根目录下upload文件夹
String time = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());//文件名是当前时间,精确到秒
FileInputStream fis = new FileInputStream(f);//输入流
FileOutputStream fos = new FileOutputStream(path + File.seprator + time + ".jpg");//输出流,保存的位置
BufferedOutputStream bos = new BufferedOutputStream(fos,1024); //缓冲流
byte[] b = new byte[1024];
int len = 0;
while((len = fis.read(b))!=-1){
bos.write(b); //输出文件
}
bos.flush();
bos.close();