Enumeration<String> headers=request.getHeaderNames();
String repStr="";
byte[] result=null;
while(headers.hasMoreElements()){
String head=headers.nextElement();
log.debug(head+":"+request.getHeader(head));
}
try{
if(json==null || json.equals("")) {
repStr = getResponse("500", "报文格式错误");
}
Map map = (Map) JSON.parse(json);
List<Product> productList=productService.queryAllProduct();
StringBuffer data=new StringBuffer();
data.append( "\"productAmout\":"+productList.size()+","+"\"productList\":"+JSON.toJSONString(productList));
repStr = getResponse("200", "查询所有产品信息成功",data.toString() );
//压缩
result = repStr.getBytes("UTF-8");
response.setHeader("Content-Length", result.length+"");
if(request.getHeader("Accept-Encoding").equalsIgnoreCase("gzip")){
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gout = new GZIPOutputStream(out);
gout.write(result);
gout.close();
result = out.toByteArray();
response.setHeader("Content-Encoding", "gzip");
}
//解压缩
ByteArrayInputStream bis = new ByteArrayInputStream(result);
GZIPInputStream gis =new GZIPInputStream(bis);
int len = -1;
byte [] b1 =new byte[1024];
StringBuilder sb = new StringBuilder();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = gis.read(b1)) != -1){
bos.write(b1, 0, len);
}
bos.close();
return;
}catch (Exception e) {
repStr=getResponse("500", "异常错误!");
log.info("程序出错:"+e.getMessage());
}
sendJSONToClient(result.toString(), response);
}
private String getResponse(String errorCode, String errorMsg, String data) {
String json = "{" +
"\"returnFlag\":\""+errorCode+"\"," +
"\"returnMsg\":\"" +errorMsg+"\"";
if(data!=null) {
json += ",";
json += data;
}
json += "}";
return json;
}
private void sendJSONToClient(String data,HttpServletResponse response){
response.setContentType("application/json;charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("Access-Control-Allow-Origin","*");
try {
response.getWriter().write(data);
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
e.printStackTrace();
}
}
现在的问题是,客户端解压出现readyfully异常,或者是unknown formart magic number异常
,客户端是android的,解压的代码是以前上线用的,怀疑是服务器压缩的有问题,或者是传输的字节编码问题,本地解压是可以的
5 个解决方案
#1
编码的可能性比较大,你先获取Content-Encoding看看。
#2
#3
java自带的zip压缩貌似对中文支持的不太好,用ant压缩试试。。。。。
#4
我也碰到这样的问题,请问现在你解决了吗
#5
内容不要自己做压缩,把原始的信息写入response,http服务器会根据客户端上传的参数,和自身支持的压缩方法,自动进行:
客户端请求中加入 Accept-Encoding:gzip, deflate, sdch,服务端响应中 包括 Content-Encoding:gzip
就实现了数据压缩,几种压缩方法主流服务器都能支持,可能需要配置参数
客户端请求中加入 Accept-Encoding:gzip, deflate, sdch,服务端响应中 包括 Content-Encoding:gzip
就实现了数据压缩,几种压缩方法主流服务器都能支持,可能需要配置参数
#1
编码的可能性比较大,你先获取Content-Encoding看看。
#2
#3
java自带的zip压缩貌似对中文支持的不太好,用ant压缩试试。。。。。
#4
我也碰到这样的问题,请问现在你解决了吗
#5
内容不要自己做压缩,把原始的信息写入response,http服务器会根据客户端上传的参数,和自身支持的压缩方法,自动进行:
客户端请求中加入 Accept-Encoding:gzip, deflate, sdch,服务端响应中 包括 Content-Encoding:gzip
就实现了数据压缩,几种压缩方法主流服务器都能支持,可能需要配置参数
客户端请求中加入 Accept-Encoding:gzip, deflate, sdch,服务端响应中 包括 Content-Encoding:gzip
就实现了数据压缩,几种压缩方法主流服务器都能支持,可能需要配置参数