Неправильно отображается кириллица через Tomcat

 
 
 
Сообщения:9
Вот простой сервлет


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloWorld extends HttpServlet {

    private String message;

    public void init() throws ServletException {
        // Do required initialization
        message = "Добрый день Олег";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // Set response content type
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        // Actual logic goes here.
        PrintWriter out = response.getWriter();
        out.println("<h1>" + message + "</h1>");
        
    }

    public void destroy() {
        // do nothing.
    }
}



Вот настройки web.xml у Tomcat

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  

<servlet>
   <servlet-name>HelloWorld</servlet-name>
   <servlet-class>HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HelloWorld</servlet-name>
   <url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>


</web-app>



Вот код коннектора из файла server.xml Tomcat :

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               useBodyEncodingForURI="UTF-8"
			   />



И все равно текст на русском в абракадабре , я уже все перепробовал, замучался


" а может да, а может нет?"
 
 
Сообщения:373
Похоже на то, что браузер открывает "utf-8", как "кириллица Windows".
Посмотрите, может у браузера кодировка страницы задана вручную?
 
 
Сообщения:9
vps:
Похоже на то, что браузер открывает "utf-8", как "кириллица Windows".
Посмотрите, может у браузера кодировка страницы задана вручную?


Проверил, везде автоматом стоит. По умолчанию как раз UTF-8 , но отображается явно не в нем.

" а может да, а может нет?"
 
 
Сообщения:373
Согласно этой статье, ключ useBodyEncodigForURI должен иметь булево значение. Там ещё в комментариях интересное написано.
Изменен:07 ноя 2019 19:18
 
 
Сообщения:9
vps:
Согласно этой статье, ключ useBodyEncodigForURI должен иметь булево значение. Там ещё в комментария интересное написано.


Исправил, но не помогло.

Я вот не знаю, что должно быть в коде самого сервлета

так или иначе?

  response.setContentType("text/html;charset=UTF-8");
    response.setCharacterEncoding("UTF-8");



В коннекторе server.xml

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
			   useBodyEncodingForURI="true"
           
			   />

" а может да, а может нет?"
 
 
Сообщения:373
У меня, на tomcat9 под windows нормально всё отображается (это с учётом того, что исходники в utf-8 и без использования useBodyEncodingForURI в настройке коннектора).
 
 
Сообщения:9
vps:
У меня, на tomcat9 под windows нормально всё отображается (это с учётом того, что исходники в utf-8 и без использования useBodyEncodingForURI в настройке коннектора).


Если не трудно скинь код сервлета, коннектора и web.xml файла. Очень интересно.



p/s у меня Tomcat 7

" а может да, а может нет?"
 
 
Сообщения:373
Попробуйте через jetty запустить.

public class HelloWorld extends HttpServlet {
    private String message;

    public void init() throws ServletException {
        message = "Добрый день Олег";
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter out = response.getWriter();
        out.println("<h1>" + message + "</h1>");
    }

}


public class JettyRunner {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);

        ServletHandler servletHandler = new ServletHandler();
        server.setHandler(servletHandler);

        servletHandler.addServletWithMapping(HelloWorld.class, "/welcome");

        server.start();
        server.join();
    }
}


В зависимостях для использования jetty добавлено:
javax.servlet-api-3.1.0.jar

jetty-http-9.4.15.v20190215.jar
jetty-io-9.4.15.v20190215.jar
jetty-server-9.4.15.v20190215.jar
jetty-servlet-9.4.15.v20190215.jar
jetty-util-9.4.15.v20190215.jar
Изменен:07 ноя 2019 13:56
 
 
Сообщения:9
vps:
Попробуйте через jetty запустить.

public class HelloWorld extends HttpServlet {
    private String message;

    public void init() throws ServletException {
        message = "Добрый день Олег";
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter out = response.getWriter();
        out.println("<h1>" + message + "</h1>");
    }

}


public class JettyRunner {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);

        ServletHandler servletHandler = new ServletHandler();
        server.setHandler(servletHandler);

        servletHandler.addServletWithMapping(HelloWorld.class, "/welcome");

        server.start();
        server.join();
    }
}


В зависимостях для использования jetty добавлено:
javax.servlet-api-3.1.0.jar

jetty-http-9.4.15.v20190215.jar
jetty-io-9.4.15.v20190215.jar
jetty-server-9.4.15.v20190215.jar
jetty-servlet-9.4.15.v20190215.jar
jetty-util-9.4.15.v20190215.jar



Я не спорю возможно через jetty и получится, даже возможно через файл JSP заработает, но мне интересно именно через Tomcat. Целый день промучался, неужели нет вариантов?

" а может да, а может нет?"
 
 
Сообщения:373
kaizersx:
мне интересно именно через Tomcat.

Попробуйте сменить версию томката на более свежую.

P/S: файл server.xml я не изменял.
 
 
Сообщения:183
Попробуйте добавить это в web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


	
	 <filter>
        <filter-name>encoding-filter</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>
    </filter>
    <filter-mapping>
        <filter-name>encoding-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет