Как получить и распаковать данные GZIP в Java?
Я отправляю данные с моего 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 ответа
Самый простой способ (IMO) сделать это в стандартной среде J2EE - использовать фильтр сжатия GZIP. Вы можете найти некоторый пример в этом вопросе (хотя этот, насколько я вижу, только о фильтре ответов) или здесь (я полагаю, что этот может также выполнить декомпрессию запроса, о которой вы спрашивали).
Затем вы подключаете такой фильтр к своему веб-приложению, используя <filter>
элемент в вашем web.xml
(см. здесь пример использования фильтров сервлетов), таким образом, избегая любых жестко закодированных зависимостей из кода вашего веб-приложения.
Все, что вам нужно здесь, это какой-нибудь контейнер сервлетов, такой как 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");
//...
}
}