【问题标题】:How to receive and uncompress gzip data in java?如何在java中接收和解压缩gzip数据?
【发布时间】:2012-02-16 15:40:54
【问题描述】:

我正在将数据从我的 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() 接收它吗?如果是,那么参数名称是什么,然后如何解压缩并使用电子邮件、jsonstring、密码参数。提前致谢。

【问题讨论】:

    标签: java gzip asihttprequest asiformdatarequest


    【解决方案1】:

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

    然后,您可以通过在 web.xml 中使用 <filter> 元素将此类过滤器插入您的 web 应用程序(有关如何使用 servlet 过滤器的示例,请参阅 here),从而避免您的 web 应用程序代码中的任何硬编码依赖项。

    【讨论】:

      【解决方案2】:

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

      然后您需要编写一个 Servlet,该 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");
          //...       
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 2012-09-25
        相关资源
        最近更新 更多