Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Сложный случай. jsp servlet кириллица / 5 сообщений из 5, страница 1 из 1
11.12.2021, 17:24
    #40119274
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный случай. jsp servlet кириллица
Добрый день. Есть следующая ситуация

1. вывод результата парсинга письма в консоль ИДЕЯ

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class MailParser {

    public static String getSubject(MimeMessage mimeMessage) {
        try {
            return mimeMessage.getSubject();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return null;
    }

public static String getPlainContent(MimeMessage message) {
        try {
            return new MimeMessageParser(message).parse().getPlainContent();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    } 
}



Код: 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.
// from org.apache.commons.mail.util.MimeMessageParser
public class MimeMessageParser {
    private final MimeMessage mimeMessage;
    private String plainContent;
    private String htmlContent;
    private boolean isMultiPart;
.... .... много кода

    protected void parse(final MimePart part) throws MessagingException, IOException {
        if (isMimeType(part, "text/plain") && plainContent == null) {
            plainContent = (String) part.getContent();
        } else {
            if (isMimeType(part, "text/html") && htmlContent == null) {
                htmlContent = (String) part.getContent();
            } else {
                if (isMimeType(part, "multipart/*")) {
                    this.isMultiPart = true;
                    final Multipart mp = (Multipart) part.getContent();
                    final int count = mp.getCount();
                    // iterate over all MimeBodyPart
                    for (int i = 0; i < count; i++) {
                        parse((MimeBodyPart) mp.getBodyPart(i));
                    }
                }
            }
        }
    }

.... ..... много кода
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class MainApp {
     public static void main(String[] args) throws Exception {
   ....
       System.out.println("Subject: " + MailParser.getSubject(mMessage));
       System.out.println("PlainContent: " + MailParser.getPlainContent(mMessage));
   ....
     }
}



при выводе результатов в консоль getSubject и getPlainContent нормально выводят киррилический текст из тела письма. все просто отлично

2. вывода частей письма в operator.jsp через сервлет

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<%--<%@ page contentType="text/html;charset=UTF-8" language="java" %>--%>
<%@page contentType="text/html" pageEncoding="UTF-8" language="java" %> //без разницы

<!DOCTYPE html>
<html lang="ru">

<body>
....
<div>
    <form action="callmailslist" class="ui-form" method="post">
        <p><input type="submit" value="Просмотр списка полученных писем"></p>
    </form>
</div>

${callmailslist}
</body>
</html>



Код: 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.
@WebServlet(urlPatterns = {"/callmailslist"})
public class CallMailsList extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    ...... .....
        try {
		        ......
                letter = AssmblMailsTable.loadTxtFile(pathToMailsDir, emlName, pathToRootDir);
                InputStream stream = new ByteArrayInputStream(letter.getBytes());
                Session session = Session.getInstance(new Properties());
                MimeMessage message = new MimeMessage(session, stream);

                letterSubject = letterParser.getSubject();
                letterPlainContent = letterParser.getPlainContent();
            

                request.setAttribute("mailslist", " Subject: " + letterSubject + " PlainContent: " + letterPlainContent);

            //request.setCharacterEncoding("cp1251");  // not helped
            //response.setContentType("text/html; charset=UTF-8"); // not helped
            request.getRequestDispatcher("WEB-INF/operator/operator.jsp").forward(request, response);

        } catch (IOException exc) {
                         //
        } catch (ServletException exc) {
                        //
        } catch (MessagingException e) {
            //
        } catch (Exception e) {
            //
        } finally {
           
        }
    }
}



далее

метод letterParser.getSubject() == MailParser.getSubject(mMessage)
метод letterParser.getPlainContent() == MailParser.getPlainContent()

все то же самое что в п.1 в том числе class MimeMessageParser
просто в начале отработка кода была на вывод результатов парсинга в консоль

при выводе результатов в operator.jsp метод getSubject выводит кириллицу нормально: "контроль вложений"
метод getPlainContent выводит: PlainContent: �������� ���� ����� ������ вместо "передача всех типов файлов", причем латиницу, цифры и всякие служебные символы выводит нормально ��� ������ ������� ������������� �������� Mail.Ru,

Вопросы:
как же правильно передать строку из сервлета в жсп-страницу?
тему https://www.sql.ru/forum/1305037/jsp-kodirovka-html-faylov читал и много прочего еще, не помогает

Заранее спасибо за ответы по ЗАДАННЫМ вопросам
...
Рейтинг: 0 / 0
11.12.2021, 20:18
    #40119313
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный случай. jsp servlet кириллица
Pcrepair,

Код: html
1.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">



Код: java
1.
resp.setContentType("text/html;charset=UTF-8");
...
Рейтинг: 0 / 0
11.12.2021, 21:34
    #40119330
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный случай. jsp servlet кириллица
вадя
Pcrepair,

Код: html
1.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">



Код: java
1.
resp.setContentType("text/html;charset=UTF-8");



невнимательно читал
...
Рейтинг: 0 / 0
12.12.2021, 11:14
    #40119393
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный случай. jsp servlet кириллица
Pcrepair
невнимательно читал
экзаменатор блин))
...
Рейтинг: 0 / 0
13.12.2021, 19:40
    #40119724
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный случай. jsp servlet кириллица
ну вот, как всегда оказался мелкий косяк недосмотр

неправильно:

Код: java
1.
InputStream stream = new ByteArrayInputStream(letter.getBytes());



правильно:

Код: java
1.
InputStream stream = new ByteArrayInputStream(letter.getBytes(StandardCharsets.UTF_8));
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сложный случай. jsp servlet кириллица / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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