Проблема с кодировкой символов в jsp при отправке почтового запроса - PullRequest
0 голосов
/ 31 августа 2018
ун-т авто -%>

У меня проблема с управлением акцентами (набор символов) при разработке моей страницы jsp / servlet. Я думаю, что проблема связана с неправильным кодированием параметров запроса после отправки.

У меня есть страница index.jsp с формой, в которой используется запрос на публикацию, подобный этому:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Initialisation des données</title>
</head>
<body>
<h3>Enquête sur les voyages</h3><hr>
 <form method="post" action="initProcess.jsp">
    <p>
        <label for="nom">Entrer votre nom de famille :</label><br>
        <input type="text" name="nom" id="nom" tabindex="10">
    </p>
    <p>
        <label for="prenom">Entrer votre prénom :</label><br>
        <input type="text" name="prenom" id="prenom" tabindex="20">
    </p>
    <p>
        <label for="pays">Dans quel(s) pays avez vous déja voyagé ? :</label><br>
        <select name="pays" id="pays" multiple="multiple" tabindex="30">
            <option value="France">France</option>
            <option value="Espagne">Espagne</option>
            <option value="Italie">Italie</option>
            <option value="Royaume-uni">Royaume-uni</option>
            <option value="Canada">Canada</option>
            <option value="Etats-unis">Etats-Unis</option>
            <option value="Chine">Chine</option>
            <option value="Japon">Japon</option>
        </select>
    </p>
    <p>
        <label for="autre">Entrer ici les autres pays que vous avez visités, 
        séparés par une virgule :</label><br>
        <textarea  name="autre" id="autre" tabindex="20" rows="2" cols="40" 
                tabindex="40" placeholder="Ex: Norvège, Chili, Nouvelle-Zélande"></textarea>
    </p>
    <input type="submit" value="Valider">
    <input type="reset" value="Remettre à zéro">
 </form>
</body>
</html>

Мы видим, что в этом jsp-файле у меня есть символы с акцентами (Enquête). Их отображение хорошо отрисовано. Это означает, что нет проблем с набором символов / кодировкой при использовании акцента непосредственно на странице.

Но когда я заполняю форму символами с ударениями (например, Бенин) и отправляю форму (в initprocess.jsp), и я хочу отобразить то, что я отправил, тогда у меня есть набор символов / кодировка problème. Бенин показывает Бенен. Это означает, что это проблема набора символов / кодировки с параметрами запроса, отправляемыми через почтовый запрос.

Но когда в начале страницы initprocess.jsp я поместил скриптлет

<% request.setCharacterEncoding("UTF-8"); %>

, проблема исправлена. Моя единственная проблема в том, что я не хочу использовать скриптлет на своей странице jsp.

Как я могу решить эту проблему, не используя скриптлет на мой взгляд.

вот страница initprocess.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Récupération des données</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8"); %>
<h3>Fiche de résultat</h3><hr>
<p>
    <b>Vous avez renseigné les informations suivantes :</b>
</p>
<%-- parcours de l'objet implicite paramValues qui souvenons nous est une map
pour traiter chaque paramètres de ma requête --%>
<c:forEach var="parametre" items="${paramValues}">
    <ul>
        <%-- Affiche la clé de la Map paramValues --%>
        <li><b><c:out value="${parametre.key}"></c:out></b>:</li>
        <%-- parcourt le tableau de String[] associé à la clé traitée --%>
        <c:forEach var="value" items="${parametre.value}">
            <%-- afficher chacune des valeurs de la clé donnée --%>
            <c:out value="${value}"></c:out>
        </c:forEach>
    </ul>
</c:forEach>

<p>
    <b>Vous vous nommez :</b>
</p>
<p>
<%-- Affiche les valeurs des paramètres nom et prénom en y accédant directement
via l'objet implicite (une map) param. On sait en effet qu'il n'y a qu'une seule
valeur associée à chacun de ces deux paramètres. Pas besoin d'utiliser paramValues! --%>
<c:out value="${ param.prenom }"></c:out> <c:out value="${ param.nom }"></c:out>
</p>

<p>
    <b>Vous avez visité les pays suivants:</b>
</p>
<p>
<%-- teste l'existence du parametre pays. S'il existe on le traite, 
sinon on affiche un message par defaut --%>
<c:choose>
    <c:when test="${ !empty paramValues.pays }">
    <%-- parcourt le tableau des valeurs associées au parametre pays de la requête,
    en utilisant l'objet implicite paramValues. En effet c'est necessaire puisque 
    le select permet de renvoyer plusieurs pour le seul paramètre nommé pays.--%>
    <c:forEach var="pays" items="${ paramValues.pays }">
        <c:out value="${ pays }"></c:out>
    </c:forEach>
    </c:when>
    <c:otherwise>
    Vous n'avez visité de pays dans la liste proposée
    </c:otherwise>
</c:choose>

<%-- Test l'existence du paramètre autre. Si des données existe 
on les traite sinon on affiche un message par defaut  --%>
<c:choose>
    <c:when test="${ !empty param.autre }">
    <%-- parcourt les valeurs associées au paramètre autre de la requête,
    en utilisant l'objet implicite param. En effet toutes les valeurs sont
    ici concatenées et transmise dans une seule chaine de caractères qu'on
    parcourt via la boucle forTokens --%>
    <c:forTokens items="${ param.autre }" delims="," var="pays">
        <c:out value="${ pays }"></c:out>
    </c:forTokens>
    </c:when>
    <c:otherwise>
        Vous n'avez pas visité d'autres pays.
    </c:otherwise>
</c:choose>
</p>
</body>
</html>

Пожалуйста, помогите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...