一、客户端因为获取不到request对象,因此只能通过conn得到流信息。
例子:
String requestUrl = "http://10.10.136.85:8080/highcharts-export-convert/MyServletEchart";
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置应用程序要从网络连接读取数据
conn.setRequestMethod("POST");
conn.setDoOutput(true);
上面是获取到HttpURLConnection 对象并对其内容进行相关设置。
// 表单参数
StringBuffer params = new StringBuffer();
params.append(chartTPL);
byte[] bypes = params.toString().getBytes();
上面是对参数进行相关处理,方便后面作为流写到服务端。
conn.getOutputStream().write(bypes);// 这里可以看出,客户端是通过conn获取输出流的。
int responseCode = conn.getResponseCode();//响应码如果是200,表示访问成功。
以上就是客户端访问服务端的过程,如果服务端还会返回流信息,则还是可以通过conn来获取,如下所示:
InputStream inputStream = null;
if (responseCode == 200) {
// 从服务器返回一个输入流
inputStream = conn.getInputStream();// 这里可以看出,客户端是通过conn获取输入流的。
log.info("inputStream="+inputStream);
}
得到输入流之后可以进行相关处理,如写入文件:
byte[] data = new byte[1024];
int len = 0;
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(photoPath);
while ((len = inputStream.read(data)) != -1) {//这里:由于数据都在inputStream里面,因此有这个方 法:inputStream.read(data):意思是从inputStream读取1024字节。
fileOutputStream.write(data, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
总结:从以上可以看出,客户端获取流的方式是通过 HttpURLConnection 对象。
OutputStream outputStream =conn.getOutputStream();
InputStream inputStream = conn.getInputStream();
===================================================================
二、服务端由于是接收的http请求,因此可以通过HttpServletRequest对象获取用户的请求参数,然后可以通过HttpServletResponse对象对客户端进行相应。
BufferedReader reader = request.getReader();
String input = null;
StringBuffer requestBody = new StringBuffer();
while((input = reader.readLine()) != null) {
requestBody.append(input);
}
input = requestBody.toString();//这样就得到了客户端的请求参数。
服务端相关处理这里就不做阐述了,假设已经处理好,并得到一个文件,并将文件内容作为流写到客户端:
//生成图片后将图片流写到客户端
OutputStream outputStream = response.getOutputStream();
BufferedImage br = null;
try {
br = ImageIO.read(new File(photoPath));
ImageIO.write(br, "png", outputStream);
} catch (IOException e) {
e.printStackTrace();
}