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

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
Сложный случай. jsp servlet кириллица
    #40119313
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Сложный случай. jsp servlet кириллица
    #40119330
Pcrepair
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
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
Сложный случай. jsp servlet кириллица
    #40119393
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepair
невнимательно читал
экзаменатор блин))
...
Рейтинг: 0 / 0
Сложный случай. jsp servlet кириллица
    #40119724
Pcrepair
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну вот, как всегда оказался мелкий косяк недосмотр

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

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



правильно:

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


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