Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
POSTAL5532
2 / 2 / 3
Регистрация: 11.03.2017
Сообщений: 36
1

Apache2 Tomcat Java и кириллические символы

07.08.2018, 12:53. Просмотров 870. Ответов 7

Доброго времени суток. В первый раз настроил удаленный сервер и задеплоил свой небольшой проект.
Связка весьма стандартная:
Ubuntu 16.04.5 x64
Apache 2
Tomcat 8
phpMyAdmin
MySQL

WebApp:
Java 8
Maven
SpringWeb
SpringMVC
JSP
Hibernate

Столкнулся со след проблемой - от клиента Ajax-ом передаю картинку и несколько текстовых полей, данные заполняются зачастую на русском языке. В контроллере достаю из HttpServletRequest текстовые поля и файл, файл сохраняю, затем заношу данные в БД.
На моем компе Windows 7 + Tomcat 8 + MySQL проблем никаких не было с кодировкой, а вот с переходом на удаленный сервер - все данные на кириллице в БД заносятся как ????? ?????? - ????? и т.д. Проверил - дело не в базе, System.out.println уже в контроллере перед обработкой выводит вопросительные знаки.

Облазил гугл, но так нифига и не вкурил
Может вы чего подскажите? Буду очень благодарен

Ajax-запрос:
Javascript
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function setAd() {
    if (!setAdValidation()) {
        return;
    }
 
    var formData = new FormData();
    formData.append('file', $("#imageChooser")[0].files[0]);
    formData.append('btnStyle', $("#btnStyle").val());
    formData.append('borderColor', $("#borderColor").val());
    formData.append('cardColor', $("#cardColor").val());
    formData.append('linkUrl', $("#linkUrl").val());
    formData.append('btnTittle', $("#btnTittle").val());
    formData.append('adTitle', $("#adTitle").val());
    formData.append('adText', $("#adText").val());
    formData.append('adid', $("#adid").val());
 
    console.log("form data " + formData);
    $.ajax({
        url: 'setAd',
        data: formData,
        processData: false,
        contentType: false,
        type: 'POST',
        success: function (data) {
            if (data.setStatus == "success") {
                $("#setterController").toggleClass("text-center", true);
                $("#setterController").html('<h2 class="text-color-road"><i class="fas fa-check text-success"></i> Рекламная карта успешно размещена!</h2><br><a class="link" href="index">Перейти на главную страницу</a>')
            } else {
                $("#message").html('<p id="message" class="text-danger">' + data.errmessage + '</p>');
                $("#warningInformer").modal("show");
 
                $("#imageChooser").removeAttr("disabled");
                $("#linkUrl").removeAttr("disabled");
                $("#btnTittle").removeAttr("disabled");
                $("#adTitle").removeAttr("disabled");
                $("#adText").removeAttr("disabled");
                $("#saveBtn").removeAttr("disabled");
 
                $("#loader").attr("hidden", "");
            }
        },
        error: function (err) {
            $("#message").html('<p id="message" class="text-danger">Что-то пошло не так!<br>Попробуйте перезагрузить страницу</p>');
            $("#warningInformer").modal("show");
 
            $("#imageChooser").removeAttr("disabled");
            $("#linkUrl").removeAttr("disabled");
            $("#btnTittle").removeAttr("disabled");
            $("#adTitle").removeAttr("disabled");
            $("#adText").removeAttr("disabled");
            $("#saveBtn").removeAttr("disabled");
 
            $("#loader").attr("hidden", "");
        }
    });
}
Мой контроллер:
Java
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
@Controller
public class SetAdController {
    @RequestMapping(value = "/setAd", method = RequestMethod.POST)
    public void doUpload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json");
 
        //Этот перебор всех полей выводит кириллицу как "?????????? ??????? ???? ?? ???????" и т.д.
        List<String> list = Collections.list(request.getParameterNames());
        for (String name : list){
            System.out.println(name + ": " + request.getParameter(name));
        }
 
        PrintWriter out = response.getWriter();
        JSONObject job = new JSONObject();
 
        SetAdValidator sav = new SetAdValidator(request);
 
        if (!sav.getStatus()) {
            job.put("setStatus", "failed");
            job.put("errmessage", sav.getMessage());
            out.print(job);
            out.close();
            return;
        }
 
        String[] nameArr = multipartFile.getOriginalFilename().split("\\.");
 
        String name = "img_" + request.getParameter("adid") + "." + nameArr[nameArr.length - 1];
        String path = request.getServletContext().getRealPath("/") + "images" + File.separator + name;
 
        multipartFile.transferTo(new File(path));
        DaoAdData dad = new DaoAdData();
        dad.update(new AdData(request, name));
 
        request.getSession().setAttribute("setAdTimeStamp", LocalDateTime.now().plusMinutes(60L));
 
        job.put("setStatus", "success");
        out.print(job);
        out.close();
    }
web.xml:
XML
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
43
44
45
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         id="WebApp_ID" version="3.1">
 
    <display-name>Archetype Created Web Application</display-name>
 
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:dispatcher-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 
    <session-config>
        <session-timeout>120</session-timeout>
    </session-config>
</web-app>
Конектор в server.xml (tomcat):
XML
1
2
3
4
<Connector port="8080" protocol="HTTP/1.1"
               URIEncoding="UTF-8"
               connectionTimeout="20000"
               redirectPort="8443" />
Добавлено через 11 часов 44 минуты
Неужели прям ни кто не сталкивался с траблами кодировки кириллицы после деплоя?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2018, 12:53
Ответы с готовыми решениями:

Не проходят кириллические символы из формы (Tomcat, Spring, Hibernate)
Здравстуйте. изучаю java EE создавая свой сайт, на котором есть форма отпавляющая данные на...

Кодировка и кириллические символы
Знаю может показаться репостом, но секундочку внимания. Ситуация следующая: Есть FreeBSD на нем...

Tomcat + Java + Selenium
Доброе время суток. Имеется проект Java. В нем с использованием Selenium автоматизируются кое-какие...

Web-app Java Tomcat
Доброго времени суток. Не уверен что пишу в соответствующий раздел, но все же Имеется веб...

Java, Сервлеты, Apache Tomcat
Нужно указать в файле web.xml путь не к скомпилированному классу Java, а к файлу JSP. В Apache...

7
JIeIIIa
954 / 573 / 136
Регистрация: 23.05.2012
Сообщений: 7,370
07.08.2018, 15:48 2
Цитата Сообщение от POSTAL5532 Посмотреть сообщение
System.out.println уже в контроллере перед обработкой выводит вопросительные знаки
Это не показатель.
0
POSTAL5532
2 / 2 / 3
Регистрация: 11.03.2017
Сообщений: 36
07.08.2018, 15:53  [ТС] 3
JIeIIIa, ну по крайней мере так я определил, что косяк с кодировкой начинается еще до занесения данных в бд.
0
JIeIIIa
954 / 573 / 136
Регистрация: 23.05.2012
Сообщений: 7,370
07.08.2018, 15:57 4
POSTAL5532, так Вы определили, что косяк с кодировкой есть в БД и в консоле.
0
07.08.2018, 15:57
POSTAL5532
2 / 2 / 3
Регистрация: 11.03.2017
Сообщений: 36
07.08.2018, 16:06  [ТС] 5
JIeIIIa, вообще-то да. блин. Менял кодировку в БД на utf8_general_ci - безрезультатно. На моем локалхосте с виндой я настройки и кодировку MySQL не менял никогда - как поставил так все и работает что с кириллицей что с англ.
0
JIeIIIa
954 / 573 / 136
Регистрация: 23.05.2012
Сообщений: 7,370
07.08.2018, 16:22 6
Лучший ответ Сообщение было отмечено POSTAL5532 как решение

Решение

POSTAL5532, я бы для начала дебагом посмотрел что приходит в request'е (в 5-ой строке) в методе.
1
POSTAL5532
2 / 2 / 3
Регистрация: 11.03.2017
Сообщений: 36
07.08.2018, 19:11  [ТС] 7
JIeIIIa, не делал этого с удаленным серваком, но сегодня попробую. спс за направление
0
POSTAL5532
2 / 2 / 3
Регистрация: 11.03.2017
Сообщений: 36
08.08.2018, 18:43  [ТС] 8
JIeIIIa, Сегодня настроил Remote debug на IntelliJ IDEA. Поставил брейкпоинт на
Java
1
request.setCharacterEncoding("UTF-8");
Все данные с кириллицей хранятся в реквесте нормально (по крайней мере в консоли IDEA). Дебагом проследил все вплоть до закрытия сессии - кириллица отображалась. И только в самой базе уже оказывались вопросительные знаки. В настройках самого MySQL уже был utf8_general_ci. Пошерстив по настройкам Hibernate в гугле нашел пропертю
XML
1
<property name="hibernate.connection.characterEncoding">utf8</property>
добавил и все заработало. В консоли (catalina.out) все так и осталось - "????? ?? ?????? ?", для работы это не столь важно, но все же - может есть рецепт?)
А так спасибо за направление!
0
08.08.2018, 18:43
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2018, 18:43

Что такое Java Tomcat ?
Vopshem ja vovenki v java. i esli mojno objasnite chto talkoe Java Tomcat,s chem ego edjat. I...

Проблема кодировоки Tomcat и Java
Здравствуйте Не работал с Tomcat и Java. Работал с Apache и технологиями типа Perl php итп ....

Linux apache tomcat 7 java 8
Здравствуйте! Пытаясь пофиксить баг, подобный этому полез в /etc/tomcat7/conf.. и обнаружил, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.