Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > не отображаются html-параметры в кирилице


Автор: Pawl 9.1.2014, 20:20
Сделал простейший сервлет LoginServlet, который генерит страничку, куда пользователь добавляет свое имя. По сабмиту делаю редирект на html-страничку view.htm. К url-у странички добавляю параметр - имя пользователя. На view.htm извлекаю имя при помощи javascript. Если имя в латинице (допустим, Wasya), параметр передается прекрасно (в адресной строке браузера вижу http://localhost:8080/view.htm?userName=Wasya). А если в кирилице (Вася), то параметр не добавляется совсем (в адресной строке браузера вижу http://localhost:8080/view.htm?userName=) Как это исправить? Привожу код:
LoginServlet.java:
Код

package app;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("utf8");
        PrintWriter pw = response.getWriter();
        pw.println("<html><head><title>Ввод</title>" +
                "<meta http-equiv='Content-Type' content='text/html; " +
                "charset=utf-8'/></head>");
        pw.println("<form action='login.do' method='post'>Введите имя:" +
                "<input type='text' name='name'>" +
                "<input type='submit' value='Войти'>");
        pw.println("</form></body></html>");
    }

    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");
        if (name != null || !"".equals(name)) {
            response.setCharacterEncoding("UTF-8");
            response.sendRedirect(response.encodeRedirectURL("view.htm?userName=" +
                    name));
        }
    }
}

view.htm:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>title</title>
    <script language="JavaScript" type="text/javascript">
        function getRequestParam(name) {
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(window.location.href);
            if (results == null)
                return "";
            else
                return results[1];
        }
    </script>
</head>
<body>
<script language="JavaScript" type="text/javascript">
    document.write(getRequestParam("userName"));
</script>
</body>
</html>

web.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <welcome-file-list>
        <welcome-file>login.do</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>app.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login.do</url-pattern>
    </servlet-mapping>
</web-app>

Спасибо за помощь!

Автор: Pawl 10.1.2014, 06:40
Проблему решил путем добавления оператора
Код

name = new String(name.getBytes("UTF-8"), "ISO-8859-1");
 перед редиректом

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)