Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корявая запись в БД через web-морду 
:(
    Опции темы
initmax
Дата 11.2.2010, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



Доброго, создана таблица в UTF-8
через веб форму отправляю сервлету ТЕКСТ "в браузере выставлено UTF-8
Код



<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Main Page</title>

        <link rel="stylesheet" 
type="text/css" href="css/base_darck.css" media="all">
        <link rel="stylesheet" type="text/css" href="css/up_menu_darck.css" media="all">
        <link rel="stylesheet" type="text/css" href="css/page_darck.css" media="all">
        <link rel="stylesheet" type="text/css" href="css/photos.css" media="all">
        <link rel="stylesheet" type="text/css" href="css/left_menu_darck.css" media="all">
    </head>
    <body>

<%-- Print the up_menu column --%>
    <div class="mattblacktabs">
        <ul id="navlist">
            <c:forEach items="${up_menu}" var="listUpMenu">
                <li>
                    <A href="?upMenuUserCase=${listUpMenu.id}">  <c:out value="${listUpMenu.theme}"> </c:out> </A>
                </li>
            </c:forEach>
       </ul>
    </div>
    <div>
        <form  action="editUpMenuServlet" method="POST">
            <input type='hidden' name='selectedIdPage'  value="${upMenuUserCase.id}">
            <TEXTAREA  name="sourcePage" rows="10" wrap="10" >
            <c:out value="${upMenuUserCase.page}"> </c:out>
            </TEXTAREA>
            <input type='submit' name='editPage' value='Редактировать'>

        </form>
    </div>           
    <c:out value="${editUpMenu}"> </c:out>
    
    </body>
</html>



то что передаётся в форме отлавливается так

Код

selectedIdPage = request.getParameter("selectedIdPage");//page ID for write to database
sourcePage = request.getParameter("sourcePage");//page SOURCE for write to database



после пишется в базу таким образом:
Код

 public void writePageToDatabase(GenPageMySQL objPage) {
       try{
          Statement st = currentConnect.createStatement();
             String query = ("UPDATE up_menu SET page='"+objPage.getPage()+"' WHERE id='"+objPage.getId()+"'");
             ResultSet resultQuery = null;
             st.execute(query);
          }
       catch (SQLException e){
           e.printStackTrace();
       }
  }


Всё отрабатывает, в БД записывается вместо русских символов каракули..
на каком шаего теряется UTF-8 как сие исправить?
Спасибо за внимание.
PM MAIL   Вверх
garbuz
Дата 11.2.2010, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



В страницу добавить 
Код

<%@ page contentType="text/html; charset=UTF-8" language="java" %>

Если не поможет, то добавь фильтр.
http://tompson.wordpress.com/2007/01/29/en...b-applications/

А еще лучше поискать поиском, сто раз обсуждали.
PM MAIL   Вверх
MaxPayneC
Дата 12.2.2010, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 3
Всего: 9



Еще стоит добавить 
Код

<form enctype="multipart/form-data"  action="editUpMenuServlet" method="POST">

Если у вас СУБД MySQL, то после коннекта выполнить запрос 
Код

set names 'utf8';

Еще стоит проверить, какая кодировка указана для поля, в которое вы записываете строку - должен стоять юникод (точное значение не помню к сожалению).
PM   Вверх
initmax
Дата 12.2.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



подключаюсь к БД так 
Код

  url = "jdbc:mysql://127.0.0.1/initmax"+"?autoReconnect=true&useUnicode=true&characterEncoding=utf8"+
              "&SET NAMES utf8";


на странице в которой передаю текст прописал
Код

<%@ page contentType="text/html; charset=UTF-8" language="java" %>



форма ввода текста
  
Код

<div>
        <form  action="editUpMenuServlet" method="POST">
            <input type='hidden' name='selectedIdPage'  value="${upMenuUserCase.id}">
   
            <TEXTAREA  name="sourcePage" rows="20" wrap="10" >
            <c:out value="${upMenuUserCase.page}"> </c:out>
            </TEXTAREA>
     
            <input type='submit' name='editPage' value='Редактировать'>

        </form>
    </div>


При чём, при выводе текста в TEXTAREA  
Код

<c:out value="${upMenuUserCase.page}"> </c:out>

который читается с БД mySQL всё отображается корректно, а вот после записи в БД - каракули..





Это сообщение отредактировал(а) initmax - 12.2.2010, 12:57
PM MAIL   Вверх
garbuz
Дата 12.2.2010, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Перед тем как писать в базу, выведите значение в консоль, будет понятно где бьется кодировка от страницы к серверу или от сервера к базе.
PM MAIL   Вверх
initmax
Дата 12.2.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



Благодарю за совет, так и поступил:
1) передал текст поля TEXTAREA сервлету и сервлетом же перенаправил его в jsp.
На выходе в JSP образовались каракули.

JSP форма
Код


<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">


<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Main Page</title>
    </head>
    <body>

<%-- Print the up_menu column --%>
    <div class="mattblacktabs">
        <ul id="navlist">
            <c:forEach items="${up_menu}" var="listUpMenu">
                <li>
                    <A href="?upMenuUserCase=${listUpMenu.id}">  <c:out value="${listUpMenu.theme}"> </c:out> </A>
                </li>
            </c:forEach>
       </ul>
    </div>

    <div>
        <form  action="editUpMenuServlet" method="POST">
            <input type='hidden' name='selectedIdPage'  value="${upMenuUserCase.id}">
            <TEXTAREA  name="sourcePage" rows="20" wrap="10" >
            <c:out value="${upMenuUserCase.page}"> </c:out>
            </TEXTAREA>
            <input type='submit' name='editPage' value='Редактировать'>
        </form>
    </div>         
            
    <c:out value="${editUpMenu}"> </c:out>
   
    </body>
</html>


код Сервлета отвечаюищий за пересылку текста

Код

request.setAttribute("editUpMenu",sourcePage);
RequestDispatcher Dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/jsp/pageEditUpMenu.jsp");
Dispatcher.forward(request, response);


PM MAIL   Вверх
garbuz
Дата 12.2.2010, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



initmax, попробуй использовать фильтр. Ссылку я выше давал. Еще можно помудрить с кодировкой томката в его конфиге, если конечно на нем разворачиваешь приложение.

PM MAIL   Вверх
initmax
Дата 12.2.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



да, на томкате, только вот крутить фильтры не охота(( за ссылку БЛАГОДАРСТВУЮ
PM MAIL   Вверх
initmax
Дата 15.2.2010, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



Проблему решили всего две строчки в теле метода Post

Код

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");


касательно кода фильтра:

Код

package MySQL;

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

public class FormEncodingSetterFilter implements Filter {
  private String encoding = "utf-8";

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
      throws IOException, ServletException {

    request.setCharacterEncoding(encoding);
    filterChain.doFilter(request, response);
  }

  public void init(FilterConfig filterConfig) throws ServletException {
    String encodingParam = filterConfig.getInitParameter("encoding");
    if (encodingParam != null) {
      encoding = encodingParam;
    }
  }

  public void destroy() {
    // nothing todo
  }
}


не совсем понял что есть
Код

 FilterChain filterChain

filterChain.doFilter(request, response);


и зачем вообще крутить какие-то фильтры если достаточно задать setCharacterEncoding






PM MAIL   Вверх
serger
Дата 15.2.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 2
Всего: 5



Цитата(initmax @  15.2.2010,  13:23 Найти цитируемый пост)
и зачем вообще крутить какие-то фильтры если достаточно задать setCharacterEncoding

Чтоб в каждом сервлете ручками не прописывать...


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
garbuz
Дата 15.2.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(initmax @  15.2.2010,  11:23 Найти цитируемый пост)
не совсем понял что есть

Это цепочка фильтров, метод filterChain.doFilter вызывает следующий фильтр в цепочке.


Цитата(initmax @  15.2.2010,  11:23 Найти цитируемый пост)
и зачем вообще крутить какие-то фильтры если достаточно задать setCharacterEncoding

Фильрты досточно мощный и интересный инструмент, не стоит их недооценивать. Столкнетесь еще с ними обзательно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.