客户端HttpClient处理 Servlet Gzip
服务端采用gzip对文本内容进行压缩处理,客户端使用HttpClient获取数据并进行gzip解压缩。
一: 服务端
public class GzipTestServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/html;charset=UTF-8");
String str = "中文测试this is a test!";
if (isGzipSupport(request)) {//支持gzip
response.setHeader("Content-Encoding", "gzip");
OutputStream os = response.getOutputStream();
GZIPOutputStream gs = new GZIPOutputStream(os);
gs.write(str.getBytes("UTF-8"));//解决中文乱码问题
gs.finish();
gs.close();
os.close();
} else {
PrintWriter out = response.getWriter();
out.write(str);
out.flush();
out.close();
}
}
/**
* 判断客户端是否要求进行gzip压缩处理
* @param request
* @return
*/
private boolean isGzipSupport(HttpServletRequest request) {
String headEncoding = request.getHeader("accept-encoding");
return (headEncoding != null && (headEncoding.indexOf("gzip") != -1));
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
二:客户端
采用HttpClient3.1。
(1)UngzipPostMethod.java
/**
* 继承PostMethod重写getResponseBodyAsString方法支持Gzip解压缩*/
public class UngzipPostMethod extends org.apache.commons.httpclient.methods.PostMethod{
public UngzipPostMethod(String uri){
super(uri);
} @Override
public String getResponseBodyAsString() throws IOException {
GZIPInputStream gzin;
if(getResponseBody()!=null ||getResponseStream() != null ){
if(getResponseHeader("Content-Encoding") != null && getResponseHeader("Content-Encoding").getValue().toLowerCase().indexOf("gzip") != -1) {
InputStream is = getResponseBodyAsStream();
gzin = new GZIPInputStream(is); InputStreamReader isr = new InputStreamReader(gzin,getResponseCharSet()); BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String tmp;
while((tmp = br.readLine())!=null){
sb.append(tmp);
sb.append("\r\n");
}
br.close();
isr.close();
return sb.toString();
}else{
//否则正常返回
return super.getResponseBodyAsString();
}
}else{
return null;
}
}
}
(2)HttpUtil.java
public class HttpUtil {
/**
* 获取到解压缩的内容
* @param url
* @param list
* @return
*/
public String postGzipRequest(String url, List<NameValuePair> list){
HttpClient client = new HttpClient();
UngzipPostMethod post = new UngzipPostMethod(url);
post.setRequestHeader("Accept-Encoding", "gzip, deflate");
post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
StringBuilder sb = new StringBuilder();
if(list!=null){
int len = list.size();
NameValuePair[] params = new NameValuePair[len];
for(int i=0; i<len; i++){
params[i] = list.get(i);
}
post.setRequestBody(params);
}
try {
//执行post
int statusCode = client.executeMethod(post);
if (statusCode == HttpStatus.SC_OK) {
sb.append(post.getResponseBodyAsString());
}
} catch (IOException ex) {
java.util.logging.Logger.getLogger(HttpUtil.class.getName()).log(Level.SEVERE, null, ex);
}
return sb.toString();
}
}
(3)Test.java
public class Test {
public static void main(String args[]){
HttpUtil httpUtil = new HttpUtil();
String url = "http://localhost:8080/tsmanager/GzipTestServlet.do";
System.out.println("内容:"+httpUtil.postGzipRequest(url, null));
}
}
客户端HttpClient处理 Servlet Gzip的更多相关文章
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- android之HttpClient
Apache包是对android联网访问封装的很好的一个包,也是android访问网络最常用的类. 下面分别讲一下怎么用HttpClient实现get,post请求. 1.Get 请求 HttpGet ...
- android HTTPclient
Apache包是对android联网访问封装的很好的一个包,也是android访问网络最常用的类. 下面分别讲一下怎么用HttpClient实现get,post请求. 1.Get 请求 1 2 3 4 ...
- HttpClient与APS.NET Web API:请求内容的压缩与解压
首先说明一下,这里的压缩与解压不是通常所说的http compression——那是响应内容在服务端压缩.在客户端解压,而这里是请求内容在客户端压缩.在服务端解压. 对于响应内容的压缩,一般Web服务 ...
- java apache commons HttpClient发送get和post请求的学习整理(转)
文章转自:http://blog.csdn.net/ambitiontan/archive/2006/01/06/572171.aspx HttpClient 是我最近想研究的东西,以前想过的一些应用 ...
- httpclient模拟浏览器get\post
一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等.所访问的这些页面有的仅 仅是一些普通的页面,有的需要用户登录后方可使用,或者需 ...
- HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象
1 HTTP协议特点 1)客户端->服务端(请求request)有三部份 a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...
- Android中利用httpclient进行网络通信的方法(以用户登录为例说明)
http://www.android100.org/html/201406/09/22915.html 1.服务器端 服务器端和android没有太大关系,对J2EE比较熟悉的话写起来应该很容易,这里 ...
- HttpClient使用详解
http://itindex.net/detail/52566-httpclient HttpClient使用详解 标签: httpclient | 发表时间:2015-01-22 12:07 | 作 ...
随机推荐
- s3c2416裸跑环境配置
最近刚刚开始学习ARM-linux,上周买了块tq2416的板子,给的Linux资料太复杂太深奥不愿看,等不及想要把2416跑起来.于是到处找相关裸跑资料,可是用2416的人实在少,网上的资料更少,裸 ...
- Android开源库
http://blog.csdn.net/xiaanming/article/details/9470223 一.兼容类库 ActionBarSherlock : Action Bar是Android ...
- BZOJ3144 切糕
http://www.lydsy.com/JudgeOnline/problem.php?id=3144 思路:如果没有D的限制,那一个竖轴都是一个最小割,每个点向更高的点引一条流量为自己权值的边,那 ...
- XJOI网上同步训练DAY3 T1
思路:看来我真是思博了,这么简单的题目居然没想到,而且我对复杂度的判定也有点问题.. 首先我们选了一个位置i的b,那一定只对i和以后的位置造成改变,因此我们可以这样看: 我们从前往后选,发现一个位置的 ...
- 分析统计<第三篇>
统计是一组存储为柱状图的信息.柱状图是显示数据落入不通分类中的频率的一种统计结构.SQL Server存储的柱状图包括多大200行的列和索引键(或多列索引键的第一列)的数据分布采样.在两个连续采样值之 ...
- PowerShell官方的MSDN
https://msdn.microsoft.com/en-us/powershell/mt173057.aspx 官方还咋github上放置了 扩展模块. 比如 web iis部署.sqlserv ...
- linux find详解
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> - < ...
- jQuery ajax - getScript() 方法和getJSON方法
实例 使用 AJAX 请求来获得 JSON 数据,并输出结果: $("button").click(function(){ $.getJSON("demo_ajax_js ...
- Nexus 刷机
@echo offfastboot flash bootloader bootloader-hammerhead-hhz12k.imgfastboot flash radio radio-hammer ...
- Linux系统守护进程详解ntsysv 可以关掉那些服务
acpid, haldaemon, messagebus, klogd,network, syslogd 以上几个服务必须开启!其他的分析如下: 1.NetworkManager,NetworkMa ...