Как получить и распаковать данные GZIP в Java? - PullRequest
1 голос
/ 23 января 2012

Я отправляю данные с моего 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, пароля. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 января 2012

Самый простой способ (IMO) сделать это в стандартной среде J2EE - использовать фильтр сжатия GZIP. Вы можете найти некоторый пример в этом вопросе (хотя этот, насколько я вижу, только о фильтре ответов) или здесь (этот, я полагаю, может также выполнить декомпрессию запроса о котором вы спрашивали).

Затем вы подключаете такой фильтр к своему веб-приложению, используя элемент <filter> в вашем web.xml (пример использования фильтров сервлетов см. здесь ), таким образом избегая любых жестко закодированных зависимостей от код вашего веб-приложения.

0 голосов
/ 23 января 2012

Все, что вам нужно здесь, это какой-нибудь контейнер сервлетов, такой как Tomcat (я не думаю, что вам нужна целая среда Java EE, если ваши серверные приложения не являются более сложными, например, распределенными, подмножество JSP / Servet кажется достаточным).По сути, это сервер (и HTTP-сервер, и сервер в целом для любых необработанных данных), где JSP и сервлеты выполняют обработку запросов.Кстати, у Tomcat есть встроенная поддержка сжатия gzip, которая просто настраивается.Так что все должно быть просто.

Затем вам нужно написать сервлет, который извлекает все параметры, упомянутые в клиентском коде iOS, из вашего HTTP-запроса, конструирует и отправляет ответ.(Есть много статей, официальной документации и т. Д. О сервлетах.) Как они будут извлечены, не будет зависеть от того, используете ли вы 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");
    //...       
  }
}
...