如何在java中接收和解压缩gzip数据?

时间:2012-01-23 08:58:51

标签: java gzip asihttprequest asiformdatarequest

我将数据从我的iPhone发送到服务器。代码如下:

      ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:url]]; 
     [request setShouldCompressRequestBody:YES];   // gzip compression
     [request setTimeOutSeconds:60];
     [request setPostValue:emailString forKey:@"email"]; 
     [request setPostValue:jsonStr forKey:@"jsonstring"];
     [request setPostValue:pwd forKey:@"password"];
     [request setDelegate:self]; 
     [request startAsynchronous];

我试图搜索我如何在服务器中接收此数据但找不到任何帮助。我会使用req.getParameter()接收它吗?如果是,则参数名称是什么,然后如何解压缩并使用email,jsonstring,password参数。提前谢谢。

2 个答案:

答案 0 :(得分:1)

在标准J2EE环境中执行此操作的最简单方法(IMO)是使用GZIP压缩过滤器。你可以在this question中找到一些例子(尽管这个只是关于我能看到的响应过滤器)或here(我相信这个也可以请求解压缩你问的)

然后使用<filter>中的web.xml元素将此类过滤器插入到您的webapp中(有关如何使用servlet过滤器的示例,请参阅here),从而避免任何硬编码来自您的webapp代码的依赖关系。

答案 1 :(得分:0)

这里所需要的只是一些像Tomcat这样的Servlet容器(我不认为你需要一个完整的Java EE环境,除非你的服务器应用程序更复杂,例如是分布式的,JSP / Servet子集似乎就足够了)。它本质上是一个服务器(通常是HTTP服务器和服务器,对于任何原始数据),JSP和Servlet执行请求处理。顺便说一句,Tomcat有一个内置的gzip压缩支持,它是可配置的。所以应该很容易。

然后你需要编写一个Servlet,它从你的HTTP请求中提取客户端iOS代码中提到的所有参数,然后构造并发送响应。 (关于servlet有很多文章,官方文档等)如何提取它们并不取决于你是否使用GZIP,解压缩应该先由服务器完成。

<强>更新

至于参数名称,我猜(我不是iOS开发人员)他们是你的代码中'setPostValue'消息之后的字符串,如
...
[请求setPostValue: emailString forKey:@“email”];
...
所以,他们目前正在

emailString
jsonStr
pwd

总结,阅读代码应该是这样的:

public abstract class MyServlet extends HttpServlet {

  /* (non-Javadoc)
  * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
  */
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    String emailString = req.getParameter("emailString");
    String jsonStr = req.getParameter("jsonStr");
    String pwd = req.getParameter("pwd");
    //...       
  }
}