![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Доброго времени суток!
Может кто подскажет как правильней запрашивать xml-данные хранящиеся в БД через xpath-выражения при помощи сервлетов и jsp? Это надо будет в форме <FORM> задавать уже готовые xpath-выражения и передавать их в сервлет, а сервлет уже будет коннектится к БД и доставать согласно этим выражениям нужные данные? Это сообщение отредактировал(а) azalia - 19.5.2015, 22:15 |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Я бы сделал через отправку XPAth в сервлет, который уже ходил бы в базу, доставал данные и вызывал JSP, которая все это рисовала и выводила бы форму для ввода нового выражения.
|
|||
|
||||
azalia |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Не могу отправить данные формы... Что-то видимо насочиняла не то....
Выкладываю что есть на данный момент: JSP:
Хотя, я такой формы ни разу за всю свою жизнь не видела ![]() Сервлет:
Вывод браузера:
Это сообщение отредактировал(а) azalia - 19.5.2015, 22:16 |
||||||
|
|||||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Честно говоря я не понял вот это:
<select name="/books/book[@id]"> <option value="/books/book[@id='1']">Книга 1</option> <option value="/books/book[@id='2']">Книга 2</option> </select> В качестве имени такое выражение "/books/book[@id]" - это что такое ? Сервлет просит просто параметр name - а в форме фигня какая-то. Вы бы почитали HTML и HTTP на досуге - там много важного и нужного есть. |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Ну во-первых не
response.setContentType("text/html"); а response.setContentType("text/html,UTF-8"); чтобы текст на кириллице увидеть в ответе |
|||
|
||||
azalia |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
не помогает... JSP:
Сервлет:
server.xml
этот код тоже не помогает:
Может ли быть проблема в старом ПО? IE6, Windows XP... Установила браузер Chrome 43 - в нем такая же беда... Может все перевести в windows-1251? или как там... Это сообщение отредактировал(а) azalia - 20.5.2015, 20:42 |
||||||||
|
|||||||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Чему не помогает?
В случае response.setContentType ("text/html; charset=utf-8"); текст на кириллице должен выводиться. А поводу получения значения параметра, гсп. Сабуров писал же, что надо запрашивать не "name", а по видимому: String inputName=request.getParameter("/books/book[@id]"); Кстати, А зачем Вы дали параметру такое странное имя? Это сообщение отредактировал(а) mbasil - 20.5.2015, 20:42 |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Да, я поменяла name (перепутала раньше), теперь выводится... Оно такое странное, потому что мне надо как-то сохранить путь xpath в какую-нибудь переменную и потом ее подставлять в запрос к БД. На оригинальность не претендую, я новичок в этом деле. |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Имя переменной связано с ее значением не буквально, а мнемонически, а посему должно как имя любой переменной соответствовать смыслу значения, а не содержимому. Просто имена переменным надо давать пристойные.
|
|||
|
||||
azalia |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Не помогает замена кода response.setContentType ("text/html") на response.setContentType ("text/html; charset=utf-8"); или на response.setContentType("text/html,UTF-8"); сейчас картина в браузере такая:
перевожу: привет ghjg = привет ghjg код:
интернет весь уже обшарила, советуют еще фильтры применять, но этого мне не хочется как-то делать... Добавлено через 14 минут и 53 секунды хорошо, я поняла, спасибо ![]() обзову по-другому, только теперь не знаю как выбранное значение обрабатывать дальше в сервлете. Это сообщение отредактировал(а) azalia - 20.5.2015, 21:09 |
||||||
|
|||||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
response.setContentType ("text/html; charset=utf-8");
должно работать. 1. Фильтр это только для того, чтобы не писать это каждый раз. Пока нет смысла. 2. Проверьте настройки браузера. Проверьте в другом браузере. 3. Проверьте кодировку файла с исходным кодом сервлета. 4. Если сервер старый Tomcat, там требовалось в элементе Connector в файле server. xml добавить атрибут seBodyEncodingForURI="true" примерно так (но только в старый, до версии 5 включительно): <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/> |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
я все уже это проделывала http://forum.vingrad.ru/index.php?showtopi...t&p=2639605 использую Notepad++, в нем выставлена кодировка UTF-8 (без BOM), пересохранила еще раз в простом блокноте с выставлением кодировки utf-8... Томкат 7, свеже установленный... я не знаю чего еще можно сделать... пусть остается так, мне не принципиально, буду на латинице пока работать. Добавлено через 12 минут и 4 секунды кстати, вспомнила, а может ли повлиять на кодировку смена пути к Томкат? раньше у меня Томкат был установлен по пути С:/Tomcat 7.0 я его не переустанавливала, а вручную сменила путь на С:/Tomcat (переименовала папку) соответсвенно везде перенастроила пути и в реестре windows тоже для запуска службы а вот где кодировка прописывается - не знаю... |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Перемещение, пожалуй, не могло повлиять. Больше предположений нет. В последних версиях Tomcat с подобными казусами я не встречался.
как обрабатывать зависит от того, в какой базе вы XML храните и в каком виде. У Oracle, например есть тип данных XMLType, он построен над CLOB и в нем можно по хpath довольно просто находить нужное значение. Это сообщение отредактировал(а) mbasil - 20.5.2015, 22:03 |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
в данный момент использую ms sqlserver, в самой базе без проблем все получается, а вот удаленные запросы пока не очень. нашла работу с типом sqlxml, пока осваиваю... получилось пока только запросить данные сплошным текстом, без структуры xml |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
1. Извлечь "сырой" XML можно посредством запроса с помощью JDBC. В Java встроены XML анализаторы DOM,SAX,STAX,JAXB, поэтому (если не привлекать какие-либо доролнительные фреймворки) можно разобрать извлеченный XML выбранным встроенным средством (ну это конечно потребует усилий), а потом получить, что нужно.
2.Для проверки кириллицы, чтобы сильно не ломать голову, скачайте и инсталлируйте NetBeans. В него встроены два сервера: Tomcat и GlassFish. Инсталляция проста, можете выбрать только встроенный Tomcat и не ставить GlassFish. Проект заготовки web приложения можно сгенерировать в несколько щелчков мышки. Проверьте, как выводится кириллица. Затем, в случае успеха, скопируйте свои написки в этот проект. Ну уж совсем потом можно NetBeans'ом подцепить ваш Tomcat для чистоты эксперимента и развернуть проект на нем. Все равно, продолжать работу лучше в графической среде, а не в командной строке. Необходимо только установить CATALINA_HOME на нужную версию Tomcat и не "барахтаться" одновременно с двумя. |
|||
|
||||
azalia |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
ну вот, а я надеялась что с ними не придется мучится, неужели без них никак? думала, что мне придется только запросить из базы нужные данные с использованием xpath и вывести полученные данные на печать, разве sqlxml не компенсирует все эти затраты на парсинг? зачем его тогда создали...
хорошо попробую так, если места хватит на виртуальной машине... Это сообщение отредактировал(а) azalia - 20.5.2015, 22:55 |
||||
|
|||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Я не слишком хорошо знаю MSSQL, так что возможно имеются средства базы, позволяющие запрос по xpath.
|
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
А эта ошибка о чем говорит? Не определен такой объект?
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Не импортирован. Нормальная IDE сразу покажет такую ошибку и предложит пути решения. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Установила NetBeans 8 + Tomcat 8
Проект не выполняется, пишет ошибку:
Как с этим бороться? |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
1. Проверьте переменную окружающей среды CATALINA_HOME, на какой из серверов она указывает (запускаться должен только один) . Переменную TOMCAT_HOME лучше не использовать, так как она работает только в Windows.
2 Обязательно должна быть установлена переменная JAVA_HOME. Если вы используете версию 8, то и JAVA_HOME должна указывать на JDK версии 8. При использовании Tomcat не устанавливайте JDK в директорию с пробелом, типа "Program Files" 3. В файле CATALINA_HOME/conf/server.xml должен использоваться порт, который свободен. По умолчанию он хочет 8080. <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/> Проверьте - не занят ли порт или просто замените. Я обычно использую номер 8089 4. Для запуска сервера через его административную утилиту manager, NetBeans'у нужен администратор. В файле CATALINA_HOME/conf/tomcatusers должна быть запись, похожая на: <tomcat-users> <user name="admin" password="password" roles=" manager,script-manager" /> ... </tomcat-users> 5. При работе через NetBeans не запускайте сервер вручную, а перейдите на закладку Services, разверните узел Servers, найдите пиктограмму кота и щелкнув по ней правой кнопкой мыши выберите Start. Проверьте предварительно, чтобы Tomcat не был ранее стартован другими средствами. Там же можно в диалоговом окошке настроить свойства сервера. Посмотрите, какой там номер порта и при необходимости измените. Останавливайте тоже оттуда. Это сообщение отредактировал(а) mbasil - 21.5.2015, 20:45 |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Не получилось у меня подружиться с NetBeans. Все снесла, включая Tomcat 8.
Установила Eclipse и Tomcat 7. Заработало... Хотя тоже пришлось помучиться. |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Не знаю, может я не совсем корректно задам вопрос, но мне не понятен один момент.
Почему при SAХ-парсинге в одном из примеров в параметре QNAME указывается не префикс, а имя тега? логичнее было бы там указывать префикс?
Это сообщение отредактировал(а) azalia - 22.5.2015, 13:45 |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Почему это логичнее? Элемент может быть любым из пространства имен, а префикс ведь придуман для создания уникального пространства имен, объединяющего набор элементов.
То есть QNAME это квалифицированное имя элемента, как один префикс может сказать - какой из них? Не забывайте тот факт, что мы имеем дело с методом обратного вызова (callback method) Это сообщение отредактировал(а) mbasil - 22.5.2015, 14:47 |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Я понимаю что префикс нужен для уникальности... Значит, если бы у тега был префикс, то было бы тогда так? myHandler.startElement(null, "contact", "с:contact", null); При этом еще тогда первый null (namespaceURI) должен быть заполнен, типа: http://adcd.com/abcd и это будет соответствовать XML: <с:contact xmlns:с="http://adcd.com/abcd"> <c:name>Вася</c:name> <c:phone>12345</c:phone> </c:contact> Это сообщение отредактировал(а) azalia - 22.5.2015, 15:13 |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Префикс для Target Namespace можно опускать, поэтому то здесь Local Namt и Qualified Name совпадают, но если вы посмотрите документацию, то увидите, что в определенных ситуациях может быть опущено одно, или другое имя.
Это сообщение отредактировал(а) mbasil - 22.5.2015, 18:57 |
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
спасибо за подсказку, похоже это надо просто потренироваться... у меня уже назрел другой вопрос
![]() А как в сервлет вывести содержимое объекта типа xml на экран? Каждый раз когда я пытаюсь обратиться .getString(), выдаются ошибки: "Выполняется доступ к данным. Данные недоступны для этого столбца или параметра." или "Не удается считать данные из этого экземпляра, данные уже считаны"
Т.е. я так понимаю они уже прочитаны и распарсены (в консоли виден результат парсинга), а как теперь их вывести в браузер? или их надо предварительно куда-то еще записывать? Если я буду делать все без всяких парсеров и просто обращаться к результирующему набору sql, то данные в браузер через .getString() выводятся, т.е. автоматически извлекаются из столбца типа xml в виде обычных строк текста (причем если смотреть получаемый код html, то там остается некоторая информация о тегах) и все.... это ведь нельзя назвать xml-данными? Это сообщение отредактировал(а) azalia - 22.5.2015, 20:42 |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Все просто. Вы в своем обработчике, реализующем ContentHandler должны в методах startElement(), endElement() и characters() ПРИНЯТЬ данные, которые Вам засылает анализатор, я уже напоминал, что это callback методы. Кстати SAX подходит для обработки очень больших документов, структура которых полностью стабильна, так как надо много писать текста. Для небольших по размеру и относительно стабильных по структуре источников я предпочитаю JAXB, который был разработан для веб-сервисов и артефакты Java просто генерирует. В этом случае сложность не в написании програмы (как в SAX), а в том, чтобы разобраться с процессом генерирования и в сгенерированных классах.
|
|||
|
||||
azalia |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
А для меня как-то пока сложно
![]()
Так наверно будет не совсем правильно, да? Если реализовывать методы через обычные java-классы (в зависимости от целей обработки для каждого метода пусть будет отдельный java-класс), то снова вопрос как передать результат обработки в сервлет? Или на каждую кнопку вызова (на клиенте) делать отдельный сервелет с отдельной функциональностью? Под кнопкой вызова я подразумеваю, чтобы сначала нажималась кнопка "получить данные", потом когда получаешь данные давалась возможность изменить данные (добавить или удалить - 2 кнопки). Надо сюда подключать еще работу с сессиями? Выход из этого какой? Примерчика нет никакого? У меня по отдельности вроде бы еще получается что-то сделать, а все вместе соединить не могу. |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Настоятельно предлагаю все-таки для каждого вопроса открывать новый топик - может вам бы и другие помогли, но продираться сквозь все страницы и пытаться найти вопрос очень неудобно.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |