Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951

Не могу вернуть JSON через сервлет

25.08.2020, 12:34. Показов 2443. Ответов 12

Студворк — интернет-сервис помощи студентам
Добрый день всем, не могу разобраться с сервлетом, сам сервлет должен возвращать строку с JSON.

Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package DUZDT;
 
import static DUZDT.ParserSVG.fileSvgToString;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
 
@WebServlet("/getPathsJson")
public class GetPathsServlet extends HttpServlet 
{
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        {                            
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");                
            try
                {
                String jsonString = new String();
                jsonString = fileSvgToString("stationXMLs/full_svg.xml");  
                response.getWriter().write(jsonString);              
                }
            finally{response.getWriter().close();}  
                  
        }     
}
Функция fileSvgToString возвращает строку с JSON. Функция проверена и работает, но запрос не возвращает ничего.
Сам файл full_svg.xml не пуст. Однако отладчик показывает на точке останова что jsonString пустая строка.

Однако вот такое работает:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package DUZDT;
 
import static DUZDT.ParserSVG.fileSvgToString;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
 
@WebServlet("/getPathsJson")
public class GetPathsServlet extends HttpServlet 
{
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        {                            
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");                     
            try
                {
                response.getWriter().write("[{\"pathName\": \"path22\", \"allPath\": {\"0\": { \"x\": 3823.8979, \"y\": 1195.8703 }}}]");                
                }
            finally{response.getWriter().close();}  
                 
        }     
}
тут все выводится на страницу в браузере.


Скорее всего у меня неправильная организация классов или файлов в проекте NetBeans. Кто может помочь?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.08.2020, 12:34
Ответы с готовыми решениями:

Вернуть в Ajax-success $json из другого $json
Здравствуйте, уважаемые форумчане! Столкнулся со следующей проблемой. Есть код: <?php $json .= '<script> var...

Вернуть в Ajax-success $json из другого $json
Здравствуйте, уважаемые форумчане! Столкнулся со следующей проблемой. Есть код: <?php $json .= '<script> ...

Не могу подгрузить JSON через метод GET
Добрый день. Через GET получаю JSON ответ от сервера. Если делаю console.log(data); то у меня в консоли выводится object Object и внутри...

12
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
25.08.2020, 12:43  [ТС]
Вот так выглядит дериктория с веб-сервлетом в NetBeans:


GetPathsServlet -это сам сервлет

ParserSVG - это основной класс где есть функция преобразования xml-ки в JSON(функция fileSvgToString):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package DUZDT;
 
import java.io.IOException;
import java.io.FileWriter;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.util.*;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;  
 
public class ParserSVG {
    
    //мейн функция
    public static void main(String[] args) 
    {           
        String jsonStr =  new String();
            try
            {
                fileSvgToString("full_svg.xml");
                FileWriter file = new FileWriter("final.json");
                file.write(jsonStr);
                file.flush();
            }
            catch (Exception ex) {ex.printStackTrace(System.out);} 
    }
    
    //функция, формирующая map из строки вида "m 3396.9374,1382.5745 135.1146,-16.3857 91.33,-1.3431 994.1535,0.5372 30.3538,-4.2978"
    public static Map<Integer, PathCoord> stringToMap(String choordString)
        {
            Map<Integer, PathCoord> choordMap = new HashMap<Integer, PathCoord>();
            try
                {                    
                    choordString.trim();//убираем пробелы если они есть
                    //проверяем начинается строка с тегом m
                    if(choordString.startsWith("m"))
                        {
                            choordString = choordString.substring(1, choordString.length());//убираем тег m, он нам не понадобится, вообще из литер только он там должен быть
                            choordString = choordString.trim();
                            String[] cords = choordString.split(" ");
                            for (int i = 0; i < cords.length; i ++) 
                                {                            
                                    PathCoord pathcoord =  new PathCoord();//создаем экземпляр объекта, хранящего пары координат                           
                                    pathcoord.setXY(Double.parseDouble(cords[i].split(",")[0]), Double.parseDouble(cords[i].split(",")[1]));
                                    choordMap.put(i, pathcoord);                            
                                }            
                        }                    
                }catch (Exception ex) {ex.printStackTrace(System.out);}            
            return choordMap;
        }    
    
    public static String fileSvgToString (String filename)
        {
            String jsonStr = new String();
            ArrayList<SvgPath> listOfPathChords = new ArrayList<SvgPath>();
                try
                {                    
                    DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();// Создается построитель документа            
                    Document document = documentBuilder.parse(filename);// Создается дерево DOM документа из файла            
                    Node root = document.getDocumentElement();// Получаем корневой элемент
                    NodeList paths = root.getChildNodes();// Просматриваем все подэлементы корневого - т.е. пути
 
                    GsonBuilder builder = new GsonBuilder();
                    //builder.setPrettyPrinting(); //ФОРМАТИРОВАНИЕ ТАБУЛЯЦИЯ JSON
                    Gson gson = builder.create();
                    
                    Integer pathCount = 0; //каунтер для цикла, чтобы убедиться что все пути пройдены
                    for (int i = 0; i < paths.getLength(); i++) 
                        {
                            Node path = paths.item(i);                
                            // Если нода не текст, то это path - заходим внутрь
                            if (path.getNodeType() != Node.TEXT_NODE) 
                                {
                                    Element eElement = (Element) path;
                                    pathCount++;
                                    SvgPath svgpath =  new SvgPath();//создаем объект класса svgPath, куда все и пишем
                                    svgpath.setName(eElement.getAttribute("id")); //присваиваем имя пути
                                    svgpath.setChoord(stringToMap(eElement.getAttribute("d")));//добавляем мап с координатами
                                    //System.out.println("\n");
                                    listOfPathChords.add(svgpath);
                                }   
                        }
                            System.out.println("\n" + pathCount);
                            jsonStr = gson.toJson(listOfPathChords);
                            System.out.println(jsonStr);
                }
                catch (ParserConfigurationException ex) {ex.printStackTrace(System.out);} 
                catch (SAXException ex) {ex.printStackTrace(System.out);} 
                catch (IOException ex) {ex.printStackTrace(System.out);}
                catch (Exception ex) {ex.printStackTrace(System.out);}                
            return jsonStr;
        }      
}
PathCoord и SvgPath - это классы,ь могу скинуть кому интересно...
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
25.08.2020, 12:45
Цитата Сообщение от Electroflower Посмотреть сообщение
Функция fileSvgToString возвращает строку с JSON. Функция проверена и работает,
Цитата Сообщение от Electroflower Посмотреть сообщение
Однако отладчик показывает на точке останова что jsonString пустая строка.
Чему верить, 1-му или 2-му?
А если взять jsonString = "[{"pathName": "path22", "allPath": {"0": { "x": 3823.8979, "y": 1195.8703 }}}]" то есть протестировать ту самую функцию, то что будет?
0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
25.08.2020, 12:49  [ТС]
ViktorFX, щас попробую, скорее всего все оки будет)

Добавлено через 1 минуту
ViktorFX, да, так все оки работает

Добавлено через 42 секунды
Цитата Сообщение от ViktorFX Посмотреть сообщение
Чему верить, 1-му или 2-му?
Я полностью проверяла сначала на обычном проекте функции...
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
25.08.2020, 12:51
Цитата Сообщение от Electroflower Посмотреть сообщение
Скорее всего у меня неправильная организация классов или файлов в проекте NetBeans.
Не понимаю суть проблемы (в этой теме я не разбираюсь), просто выведете в консоль и посмотрите что вы извлеваете. У вас там пара строчек основного кода, думаю что найти в какой из строчек что-то не извлекается или не то извлекается, найти не сложно.
0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
25.08.2020, 12:52  [ТС]
ViktorFX, функция работает, мне просто кажется неправильно то ли я файл положила, то ли неправильно расположены функции, может отдельно их писать или прямо в сервлет?
Тут вопрос организации

Добавлено через 51 секунду
Цитата Сообщение от ViktorFX Посмотреть сообщение
просто выведете в консоль и посмотрите что вы извлеваете
так вот как раз в консольном прожекте все оки работает, в чем тут проблема я никак не пойму
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
25.08.2020, 12:58
Electroflower, не понимаю вас, jsonString = fileSvgToString("stationXMLs/full_svg.xml"); - чему равно?
что выводит System.out.println(fileSvgToString("stationXMLs/full_svg.xml")); ?
Тут вам либо выводит что надо - правильно, либо невыводит - неправильно. Тут ответ да/нет.
0
Модератор
Эксперт Java
 Аватар для alecss131
2839 / 1348 / 403
Регистрация: 11.08.2017
Сообщений: 4,303
Записей в блоге: 2
25.08.2020, 13:01
Electroflower, попробуйте добавить в метод fileSvgToString строчку вида if (!new File(filename).exists()) throw new IOException("File not found");. Мне почему то кажется что файл лежит не там, в сервлетах файлы обычно в другом месте, знаю только в мавен проектах где.
1
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
25.08.2020, 15:41  [ТС]
Цитата Сообщение от ViktorFX Посмотреть сообщение
jsonString = fileSvgToString("stationXMLs/full_svg.xml"); - чему равно?
тут строка пустая получается

Добавлено через 1 минуту
Цитата Сообщение от ViktorFX Посмотреть сообщение
System.out.println(fileSvgToString("stat ionXMLs/full_svg.xml"));
тоже не находит, видимо alecss131 прав...

Добавлено через 52 секунды
alecss131,
Java
1
if (!new File(filename).exists()) jsonStr = "File not found";
выводит "File not found"

Добавлено через 5 минут
видимо, файлы надо класть в другое место...

Добавлено через 1 час 2 минуты
не пойму, куда класть файлы(
0
Модератор
Эксперт Java
 Аватар для alecss131
2839 / 1348 / 403
Регистрация: 11.08.2017
Сообщений: 4,303
Записей в блоге: 2
25.08.2020, 15:52
Electroflower, можно воспользоваться небольшим хаком
Java
1
if(!new File(filename).exists()) jsonStr = new File(filename).getAbsolutePath();
тогда будет понятно где ищется файл.
а вообще это же ресурс, то есть он внутри jar/war поэтому его читать следует через ресурсы. вариант вне сервлета работает потому что ide не упаковывает файлы для запуска. ресурс лучше всего брать через стрим

Добавлено через 1 минуту
у меня в сервлете такая строчка выдала вообще рабочий стол, если в filename указать относительный путь
1
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
25.08.2020, 17:12  [ТС]
alecss131, хм, ссылается на C:\apache-tomcat-7.0.55\bin\stationPathsXML\full_svg.xml
Естественно никакого файла там нет...
Спасибо, буду читать искать..

Добавлено через 47 минут
Вдруг кто знает куда положить файлы для сервлета с веб-сервером tomcaб то пишите!
0
Модератор
Эксперт Java
 Аватар для alecss131
2839 / 1348 / 403
Регистрация: 11.08.2017
Сообщений: 4,303
Записей в блоге: 2
25.08.2020, 21:18
Цитата Сообщение от Electroflower Посмотреть сообщение
Вдруг кто знает куда положить файлы для сервлета с веб-сервером tomcaб то пишите!
попробуйте файл в папку webapp положить, пр крайней мере в мавен проекте так src/main/webapp и в результирующем war файле ресурс оказывается в корне
0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
26.08.2020, 10:39  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
попробуйте файл в папку webapp
у меня нет такой директории...

Добавлено через 4 минуты
alecss131, что интересно, когда я пишу фулл путь к файлу на диске то как бы находит его, но чтения не происходит, интересно почему?
Пишу вот так:
Java
1
2
if(!new File(filename).exists()) jsonStr = new File(filename).getAbsolutePath() + " " + "File not found";
          else {jsonStr = new File(filename).getAbsolutePath() + " " + "File was found!";};
Он выдает директорию какую надо и сообщение File was found!

Для тестирования я пробую на обычном проекте десктопном и он тоже не соглашается читать полный путь для фала, пишут что успешно выполнилось все и пишет:
Java
1
java.net.MalformedURLException: unknown protocol: c
если путь начинался с С диска, для других дисков точно такое же сообщение но с соответствующей буквой.

Добавлено через 51 секунду
При этом он не читает файл будто...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.08.2020, 10:39
Помогаю со студенческими работами здесь

Не могу запустить сервлет
Начал изучать сервлеты. Установил томкат, запустил сервер. Написал просто класс HelloServlet.java скомпилил и бросил в папку...

Не могу развернуть сервлет
Ошибка: Starting GlassFish Server Could not start GlassFish Server: Authorization failed for another server running on administrator...

Не могу через указатель на двумерный массив вернуть все значения в другой массив
Не могу через указатель на двумерный массив вернуть все значения в другой массив возвращается только первая строка, либо нули, либо...

Не могу собрать сервлет в Spring
Есть HomeController package com.mycomp.newshit; import java.text.DateFormat; import java.util.Date; import java.util.Locale; ...

НЕ могу передать параметры с тега в сервлет
Здравствуйте. Подскажите мне, почему при получении параметров с тега &lt;select&gt; выдает null? Что я делаю не так? public class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru