1

我正在将数据从我的 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、密码参数。提前致谢。

4

2 回答 2

1

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

<filter>然后,您可以使用您的元素中的一个元素将这样的过滤器插入到您的 webapp中web.xml(有关如何使用 servlet 过滤器的示例,请参见此处),从而避免您的 webapp 代码中的任何硬编码依赖项。

于 2012-01-23T09:14:17.660 回答
0

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

然后,您需要编写一个 Servlet,它从您的 HTTP 请求中提取客户端 iOS 代码中提到的所有参数,并构造并发送响应。(有很多关于servlet的文章、官方文档等) 解压方式与是否使用GZIP无关,解压前应由服务器解压。

更新

至于参数名称,我猜(我不是 iOS 开发人员)它们是代码中 'setPostValue' 消息之后的字符串,例如
...
[request 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");
    //...       
  }
}
于 2012-01-23T09:35:20.233 回答