powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache, Tomcat, GET запросы и кодировка.
9 сообщений из 9, страница 1 из 1
Apache, Tomcat, GET запросы и кодировка.
    #33716327
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую везде кодировку Cp1251

Настройки томката:
Код: plaintext
URIEncoding="Cp1251"
Фильтр:
Код: plaintext
request.setCharacterEncoding("Cp1251")
jsp:
Код: plaintext
<%@ page contentType="text/html; charset=windows-1251" %>
jsp:
Код: plaintext
<meta http-equiv="pragma" content="no-cache" charset="windows-1251">

При гет запросе томкату типа: http://host:8180/webapp/test.jsp?test=%EA

Все работает.


При запросе апачу: http://host/webapp/test.jsp?test=%EA

не работает(получаю вопросик).

Как разрулить описанными выше настройками + настройки апача, чтобы работало и так и так.

В принципе можно переписать все ссылки на http://host:8180/webapp/test.jsp?test=%EA либо использовать mod_rewrite, но как-то не красиво получается.
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33716560
коты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
useBodyEncodingForURI="true"

?


just another freak in the Freak Kingdom
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33716623
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
котыuseBodyEncodingForURI="true"

?


just another freak in the Freak Kingdom

не. так тоже не работает.

Вот так работает:

Код: plaintext
 new  String(request.getParameter("test").getBytes("ISO8859_1"), "Cp1251") 
Но я так не хочу. Работаю со Spring MVC там все автоматически биндится. Возвращаться к ручному отлову параметров request-a не хочется.

Может кто-нибудь объяснить почему так происходит?

В случае томката без апача, работает:
Код: plaintext
request.getParameter("test")
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33716634
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так вы с самим Apache HTTP разберитесь. И, кстати, опишите, каким образом выполняется передача запросов Томкату - mod_jk или что другое?...
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33716648
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.ГоловановНу так вы с самим Apache HTTP разберитесь. И, кстати, опишите, каким образом выполняется передача запросов Томкату - mod_jk или что другое?...

Да, mod_jk передает запросы томкату.

У конектора jk2 томката стоит URIEncoding="Cp1251" это означает, что урл: ....test.jsp?test=%EA

будет декодирован в соответствии с Cp1251

Видимо, этот же урл Apache HTTP декодирует в соответствии с ISO8859_1

(т.е здесь получаем ?) а потом уже вопросик перенаправляет томкату с

помощью mod_jk

Решением вижу настройку типа URIEncoding="Cp1251" в Apache HTTP, но похоже там жестко прошита ISO8859_1
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33718066
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При использовании mod_jk Apache ничего не декодирует, он передает "сырой" запрос модулю, а тот его перенапрвляет в Tomcat, где собственно и начинаются чудеса с кодировками.

В настройках виртуального сайта или директории Apache можно указать кодировку "по умолчанию" директивой AddDefaultCharset, но это настройка для ответа!

Попробуйте добавить в JSP:
Код: plaintext
1.
<%@ page pageEncoding="windows-1251" %>
иногда помогает :(
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33718189
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovПри использовании mod_jk Apache ничего не декодирует, он передает "сырой" запрос модулю, а тот его перенапрвляет в Tomcat, где собственно и начинаются чудеса с кодировками.

В настройках виртуального сайта или директории Apache можно указать кодировку "по умолчанию" директивой AddDefaultCharset, но это настройка для ответа!

Попробуйте добавить в JSP:
Код: plaintext
1.
<%@ page pageEncoding="windows-1251" %>
иногда помогает :(

Шаманство.. не помогло.

что происходит, когда я вызываю метод request.getParameter("test") ?

Если сделать так: <%=new String(test.getBytes(),"Cp1251")%>

все работает.

Вот тестовая страничка:

<%@ page contentType="text/html; charset=windows-1251"%>
<%@ page pageEncoding="windows-1251" %>

<html>
<head>
<meta content="text/html; charset=windows-1251" http-equiv=Content-Type>
<link rel="stylesheet" type="text/css" href="/do.css">
</head>
<body>


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<%String test =  new  String(request.getParameter("test"));%>

<%=request.getCharacterEncoding()%><br>

<%=test%><br>

<%= new  String(test.getBytes(),"Cp1251")%>


</body>
</html>

Результат:

Cp1251
?
к

у меня все параметры в Spring MVC биндятся с помощью request.getParametersMap()
Если не найду, как там настроить их перелавливатель таким способом:
<%=new String(test.getBytes(),"Cp1251")%>
буду писать свой биндер.
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33719030
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TurnФильтр:
Код: plaintext
request.setCharacterEncoding("Cp1251")
jsp:
Код: plaintext
<%@ page contentType="text/html; charset=windows-1251" %>


<filter-mapping> в студию. На что этот фильтр мапится?
...
Рейтинг: 0 / 0
Apache, Tomcat, GET запросы и кодировка.
    #33719292
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На все мапится:)

<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Так и не смог ничего придумать.

Написал не большой ребиндинг:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
 public   void  reBind(HttpServletRequest request, SearchAdObject target, String characterEncoding)  throws  ReBindingException
            {
                String requestCharacterEncoding = request.getCharacterEncoding();
                Map params = request.getParameterMap();
                Iterator paramNames = params.keySet().iterator();
                 while  (paramNames.hasNext())
                    {
                        String parameterName = (String) paramNames.next();
                        String parameterValue = request.getParameter(parameterName);

                         if  (!SimpleUtils.isEmptyObject(parameterValue))
                            {
                                 try 
                                    {
                                        parameterValue =  new  String(parameterValue.getBytes(requestCharacterEncoding), characterEncoding);
                                        System.out.println(parameterValue);
                                    }
                                 catch  (Exception e)
                                    {
                                         throw   new  ReBindingException(e);
                                    }

                                 try 
                                    {
                                         Double .parseDouble(parameterValue);
                                    }
                                 catch  (Exception e)
                                    {

                                         try 
                                            {
                                                SearchAdObject. class .getMethod("set" + RttiUtils.method(parameterName),  new   Class [] { String. class  }).invoke(target,  new  Object[] { parameterValue });
                                            }
                                         catch  (Exception ex)
                                            {
                                                 throw   new  ReBindingException(ex);
                                            }
                                    }

                            }

                    }
            }

Понимаю, что кривовасто, но подругому работает только с томкатом через порт 8180.

Здесь фильтры проставляют:
---------------------------------HTML ------------WML------
Для GET запроса:---ISO-8859-1-----ISO-8859-1---
Для POST запроса:--Cp1251---------UTF-8--------
characterEncoding:--Cp1251----------UTF8;
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache, Tomcat, GET запросы и кодировка.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]