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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как извлечь xml-данные? jsp+servlets+xpath+jdbc 
:(
    Опции темы
azalia
Дата 17.5.2015, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток!

Может кто подскажет как правильней запрашивать xml-данные хранящиеся в БД через xpath-выражения при помощи сервлетов и jsp?
Это надо будет в форме <FORM> задавать уже готовые xpath-выражения и передавать их в сервлет, а сервлет уже будет коннектится к БД и доставать согласно этим выражениям нужные данные?


Это сообщение отредактировал(а) azalia - 19.5.2015, 22:15
PM   Вверх
AntonSaburov
Дата 18.5.2015, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Я бы сделал через отправку XPAth в сервлет, который уже ходил бы в базу, доставал данные и вызывал JSP, которая все это рисовала и выводила бы форму для ввода нового выражения.
PM MAIL WWW ICQ   Вверх
azalia
Дата 18.5.2015, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не могу отправить данные формы... Что-то видимо насочиняла не то....

Выкладываю что есть на данный момент:

JSP:

Код

<html>
<head>
<title>Books Search</title></head>
<body>
<form action="BooksJsp" method="POST">

<select name="/books/book[@id]"> 
    <option value="/books/book[@id='1']">Книга 1</option>
    <option value="/books/book[@id='2']">Книга 2</option>
</select>
<input type="submit" name="Найти книгу" value="Найти книгу">
</form>
</body>
</html>


Хотя, я такой формы ни разу за всю свою жизнь не видела smile

Сервлет:

Код

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class BooksJsp extends HttpServlet {
 
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   response.setContentType("text/html");
   request.setCharacterEncoding("UTF-8");
   PrintWriter out = response.getWriter();
   String inputName=request.getParameter("name");
   String mtd=request.getMethod();
   String url=request.getRequestURI();
   String prt=request.getProtocol();
   if(inputName==null) {
   //response.sendError(505, "Propucheno imya имя");
   out.println("<html><body>");
   out.println("<h3>Вы выбрали книгу:" + inputName+"</h3>");
   out.println("<h3>Metod:" + mtd+"</h3>");
   out.println("<h3>URL:" + url+"</h3>");
   out.println("<h3>Protokol:" + prt+"</h3>");
   out.println("</body></html>");
   } else {
   out.println("<html><body>");
   out.println("<h3>Вы выбрали книгу:" + inputName+"</h3>");
   out.println("<h3>Metod:" + mtd+"</h3>");
   out.println("<h3>URL:" + url+"</h3>");
   out.println("<h3>Protokol:" + prt+"</h3>");
   out.println("</body></html>");
   } 
   }


Вывод браузера:

Код


???? ?????±???°?»?? ??????????:null
Metod:POST
URL:/testApp/BooksJsp
Protokol:HTTP/1.1


Это сообщение отредактировал(а) azalia - 19.5.2015, 22:16
PM   Вверх
AntonSaburov
Дата 19.5.2015, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 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 на досуге - там много важного и нужного есть.
PM MAIL WWW ICQ   Вверх
mbasil
Дата 20.5.2015, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну во-первых не 
response.setContentType("text/html");
а
response.setContentType("text/html,UTF-8");

чтобы текст на кириллице увидеть в ответе
PM MAIL   Вверх
azalia
Дата 20.5.2015, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mbasil @  20.5.2015,  16:43 Найти цитируемый пост)
чтобы текст на кириллице увидеть в ответе 


не помогает...

JSP:

Код

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>


Сервлет:

Код

response.setContentType ("text/html; charset=utf-8");
PrintWriter out = response.getWriter ();
request.setCharacterEncoding ("utf-8");


server.xml

Код

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
           useBodyEncodingForURI="true"
           URIEncoding="UTF-8"/>


этот код тоже не помогает:

Код

out.println("<html>");
out.println("<head>");
out.println("<meta charset='utf-8'>");
out.println("<title></title>");
out.println("</head>");
out.println("<body>");



Может ли быть проблема в старом ПО? IE6, Windows XP...
Установила браузер Chrome 43 - в нем такая же беда...

Может все перевести в windows-1251? или как там...

Это сообщение отредактировал(а) azalia - 20.5.2015, 20:42
PM   Вверх
mbasil
Дата 20.5.2015, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
azalia
Дата 20.5.2015, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mbasil @  20.5.2015,  20:39 Найти цитируемый пост)
А поводу получения значения параметра, гсп. Сабуров писал же, что надо запрашивать не "name", а по видимому:

String inputName=request.getParameter("/books/book[@id]");  

Кстати, А зачем Вы дали параметру такое странное имя?



Да, я поменяла name (перепутала раньше), теперь выводится...

Оно такое странное, потому что мне надо как-то сохранить путь xpath в какую-нибудь переменную и потом ее подставлять в запрос к БД. На оригинальность не претендую, я новичок в этом деле.
PM   Вверх
mbasil
Дата 20.5.2015, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Имя переменной связано с ее значением не буквально, а мнемонически, а посему должно как имя любой переменной соответствовать смыслу значения, а не содержимому. Просто имена переменным надо давать  пристойные.
PM MAIL   Вверх
azalia
Дата 20.5.2015, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mbasil @  20.5.2015,  20:39 Найти цитируемый пост)
Чему не помогает?

В случае response.setContentType ("text/html; charset=utf-8");

текст на кириллице должен выводиться.


Не помогает замена кода
response.setContentType ("text/html")
на
response.setContentType ("text/html; charset=utf-8");
или на
response.setContentType("text/html,UTF-8");

сейчас картина в браузере такая:

Код

привет ghjg
Contact Name 1XXX-XXX-XXXX


перевожу: привет ghjg = привет ghjg

код:
Код

out.println("<h3>привет ghjg</h3>");


интернет весь уже обшарила, советуют еще фильтры применять, но этого мне не хочется как-то делать...

Добавлено через 14 минут и 53 секунды
Цитата(mbasil @  20.5.2015,  21:05 Найти цитируемый пост)
Имя переменной связано с ее значением не буквально, а мнемонически, а посему должно как имя любой переменной соответствовать смыслу значения, а не содержимому. Просто имена переменным надо давать  пристойные. 


хорошо, я поняла, спасибо smile
обзову по-другому, только теперь не знаю как выбранное значение обрабатывать дальше в сервлете.

Это сообщение отредактировал(а) azalia - 20.5.2015, 21:09
PM   Вверх
mbasil
Дата 20.5.2015, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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"/>

 


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


Шустрый
*


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

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



Цитата(mbasil @  20.5.2015,  21:20 Найти цитируемый пост)
1. Фильтр это только для того, чтобы не писать это каждый раз. Пока нет смысла.
2. Проверьте настройки браузера. Проверьте в другом браузере.
3. Проверьте  кодировку файла с исходным кодом сервлета.
4. Если сервер старый Tomcat, там требовалось в элементе Connector в файле server. xml добавить атрибут 


я все уже это проделывала
http://forum.vingrad.ru/index.php?showtopi...t&p=2639605

использую Notepad++, в нем выставлена кодировка UTF-8 (без BOM), пересохранила еще раз в простом блокноте с выставлением кодировки utf-8...
Томкат 7, свеже установленный...

я не знаю чего еще можно сделать...
пусть остается так, мне не принципиально, буду на латинице пока работать.

Добавлено через 12 минут и 4 секунды
кстати, вспомнила, а может ли повлиять на кодировку смена пути к Томкат?

раньше у меня Томкат был установлен по пути С:/Tomcat 7.0
я его не переустанавливала, а вручную сменила путь на С:/Tomcat (переименовала папку)
соответсвенно везде перенастроила пути и в реестре windows тоже для запуска службы
а вот где кодировка прописывается - не знаю...
PM   Вверх
mbasil
Дата 20.5.2015, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Перемещение, пожалуй, не могло повлиять. Больше предположений нет. В последних версиях Tomcat с подобными казусами я не встречался.
как обрабатывать зависит от того, в какой базе вы XML храните и в каком виде.
У Oracle, например есть тип данных XMLType, он построен над CLOB и в нем можно по хpath  довольно просто находить нужное значение.

Это сообщение отредактировал(а) mbasil - 20.5.2015, 22:03
PM MAIL   Вверх
azalia
Дата 20.5.2015, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mbasil @  20.5.2015,  21:57 Найти цитируемый пост)
как обрабатывать зависит от того, в какой базе вы XML храните и в каком виде.
У Oracle, например есть тип данных XMLType, он построен над CLOB и в нем можно по хpath  довольно просто находить нужное значение.


в данный момент использую ms sqlserver,  в самой базе без проблем все получается, а вот удаленные запросы пока не очень.
нашла работу с типом sqlxml, пока осваиваю...
получилось пока только запросить данные сплошным текстом, без структуры xml

PM   Вверх
mbasil
Дата 20.5.2015, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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

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


 




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


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

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