![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Tirael |
|
||||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
Делаю простейшее приложение на сервлетах. Суть: Есть HTML страница с одним полем. Вводишь в поле (например) свое имя, страница обнавляется и выводится "Привет" + то, что ты ввел. Решил приделать к программе неколько фильтров.
Собственно три вопроса: №1: Хочу вводимую информацию проверять на наличие спец символов. Если таковые имеются. то заменять их на коды. Например, спецсимвол © заменяется на © Написал и задеплоил фильтр. Но не работает. Код фильтра
Как сделать так чтоб работал. Может стоит фильтровать не вводимую информацию, а выводимую? Но тогда ведь очень накладно получается. №2 Хотел сделать счетчик. Создал класс Counter
Создал и прописал фильтр
в самой программе ( в сервлете) пишу
И все вроде бы работает, но криво. А именно: Вводишь в строку адреса расположение сервлета ( http://bla-bla:8080/hello), счетчик показывает 0. Вводишь информацию в поле, кликаешь кнопку, страница обнавляется ( в адресной строке уже http://bla-bla:8080/hello?username=BLA-BLA-BLA ). Выводится 1. Все бы хорошо. Но если опять перейти по адресу http://bla-bla:8080/hello, то опять выведется 0. Вводим в поле данные, жмем кнопку, уже выводиться не 1, а 2. Как сделать по нормальному ? № 3 Если ввести в поле русские символы, то потом они выводяться криво ( каракулями), хотя вроде кодировку меняю в фильтре. CharSetEncodingFilter
Вот код самих сервлетов : GreetingServlet
ResponseServlet
--------------------
|
||||||||||||||
|
|||||||||||||||
tux |
|
||||||||||||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Обрати внимание, что получаешь ты параметр (request.getParameter()), а потом устанавливаешь атрибут (request.setAttribute()), а в сервлете получаешь опять параметр. Изменение значений параметров в Servlet API не предусмотрено, поэтому придется обходиться какими-то другими вариантами, например, получать в сервлете атрибут вместо параметра, предполагая что фильтр у тебя уже поработал.
Могу предположить, что страница сохраняется в кэше браузера и показывается без запроса к серверу. Попробуй в метаинформации html-страницы установить что-нибудь такое:
То есть у тебя в сервлете будет примерно так:
Если бы фильтр не работал у тебя бы скорее всего (не знаю какой веб-контейнер) выводились не каракули, а знаки вопроса. Попробуй проверить использование кодировок. Вот здесь:
у тебя второй раз кодировка запроса устанавливается (первый в фильтре). Попробуй ее просто убрать, а первую строку заменить на такую:
И проверь везде ли у тебя UTF-8. Кодировку для response в фильтре тоже в общем-то устанавливать не нужно. |
||||||||||||
|
|||||||||||||
Bulat |
|
||||||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
1) Могу еще посоветовать такой способ:
посмотри простейший пример использования jsp. В jsp используются либо коды html - для статической части, либо скриптлеты(коды java) - для динамической части. Чтоб при запуске сразу выводить эту страничку в методе doGet прописиываешь:
message - то, что вводит пользователь(ниже прояснится) URL - соответственно где твоя страница jsp находится На странице jsp:
Здесь URL - где находится класс сервлета А в методе doPost:
2) По поводу кодировки тебе уже отписали, но почитай может что полезное еще почерпнешь http://jug.in.ntu-kpi.kiev.ua/forum/posts/list/49.page 3) А по поводу количества посещений у самого руки еще не дошли чтоб разобраться, но попробуй как атрибуты сессии P.S. Писал в торопях, поэтому тупо не копируй коды, возможно(даже очень) где-то ошибка. Модератор: P.S.S. Как-то надо улучшать культуру письма, так ведь тебя никто не поймет. Это сообщение отредактировал(а) tux - 7.4.2006, 10:45 -------------------- менеджер по кодеврайтингу ![]() |
||||||
|
|||||||
Tirael |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
tux, спасибо
Да, действительно, я сначала не разобрался в чем отличие Parameter от Attribute. Потом почитал спецификацю, стало понятно. Сейчас в фильтре приделываю аттрибут request.setAttribute("hitCounter",userCounter); , а в основоном сервлете его считываю String username=(String)request.getAttribute("username");. Все работает.
Да, действительно, так и было. Вставил meta-данные и все стало хорошо. ![]()
Да, действительно, до того как появился фильтр кодировки показывались знаки вопроса. Но где еще можно проверить использование кодировки ? Ведь филтр по-идее все уже сделал?? Bulat, конечно JSP это хорошо. Но в данный момент меня интересуют именно сервлеты. Конкретнее - фильтры и листенеры. ))) tux, нажал было [+], а мне сказали что 16 постов это мало. Надо 100 ![]() Это сообщение отредактировал(а) Tirael - 7.4.2006, 12:21 --------------------
|
||||
|
|||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Поможем... -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Судя по тому что ты хочешь сделать, вообще, удобнее использовать jsp. Ну а если именно фильтры тебя интересуют то лучше, чем уже написали выше, вряд ли что-то посоветую. Кстати при создании сервлетов jsp играет не самую последную роль. -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
Tirael |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
И все таки, после всего сказанного не могу разобраться с кодировкой.
ВВожу в поле русские буквы, а на страницу выводятся каракули. Как ни старался. Везде вроде поставленно UTF-8. Заметил еще один глюк. Не все спец символы отображаются корректно. Так, например, символ > заменяется на > , но символ © почему-то заменяется на ©. Наверное дело тоже в кодировке. Уже полголовы сломал. Это сообщение отредактировал(а) Tirael - 9.4.2006, 12:24 --------------------
|
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
Tirael |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
--------------------
|
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Если метод в форме поменять на POST и добавить в ResponseServlet его обработку (метод doPost()), то все работает. Почему не работает GET пока не могу сказать. Будут новости, напишу.
|
|||
|
||||
Tirael |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
Н-да ....действительно ....пути господни неисповедимы
--------------------
|
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Вспомнил наконец в чем проблема, склероз отпустил.
Так вот, методы GET и POST работают по-разному. В методе POST все параметры запроса передаются отдельно от строки запроса URI и вызов request.setCharacterEncoding() влияет как раз на обработку этих отдельных параметров. В методе GET параметры передаются в самой строке запроса, а каким образом настроить декодирование запроса будет зависеть от конкретного сервера. Для JBoss (если в качестве веб-контейнера Tomcat, что скорее всего) проблема решается таким образом:
|
|||
|
||||
Tirael |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
tux, спасибо за разьеснение.
![]() ![]() Кстати, хотелось бы знать, откуда такого рода информацию можно подчерпнуть. ![]() Дабы не плодить темы, задам следующий вопрос, так же про сервлеты. Как видно выше, мое приложение состоит из двух сервлетов:
Так вот, как ограничить доступ к ResponseServlet, так чтобы, например, запросы http://bla-bla:8080/response не обрабатывались, либо шла переадресация на http://bla-bla:8080/hello Это сообщение отредактировал(а) Tirael - 11.4.2006, 22:23 --------------------
|
|||
|
||||
tux |
|
||||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Про фильтры, устанавливающие кодировку запроса, писалось много где и неоднократно, например, здесь - http://www.getinfo.ru/article296.html. А про URIEncoding не помню где читал, настолько давно, что едва вспомнил. ![]()
Можно, опять-таки, использовать фильтры. Обнаруживаешь в запросе response и переадресуешь на hello, вроде должно работать. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |