Сжатая строка ответа задается как атрибут в объекте запроса, и управление передается в JSP
Вы не должны были перенаправлять ответ JSON в JSP,Вы должны были напечатать JSON plain в ответ и иметь код JavaScript / Ajax в вашем приложении JSP Android для вызова URL сервлета, который возвращает JSON.См. Также Как использовать сервлеты и Ajax? .
Что касается сжатия GZIP, вам не следует делать это самостоятельно.Пусть сервер сделает сам.
Исправьте ваш код, чтобы удалить все попытки ручного сжатия ответа, в итоге он должен выглядеть примерно так:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String json = createItSomehow();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
Вот и все, если вы позволитеВаше приложение для Android вызовет URL-адрес сервлета, оно получит строку JSON.
Наконец, отредактируйте конфигурацию сервера, чтобы включить автоматическое сжатие GZIP.В случае, например, Tomcat, это будет вопрос добавления compression="on"
к элементу <Connector>
в файле /conf/server.xml
Tomcat:
<Connector ... compression="on">
Согласно документация , сжимаемые типы пантомимы по умолчанию text/html,text/xml,text/plain
.Вы можете настроить это так, чтобы добавить application/json
.
<Connector ... compression="on" compressableMimeType="text/html,text/xml,text/plain,application/json">
Несвязанный к конкретной проблеме, кодировка символа ответа должна быть установлена на UTF-8
что соответствует спецификации JSON.