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

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

25.08.2020, 12:34. Показов 2488. Ответов 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
2857 / 1364 / 407
Регистрация: 11.08.2017
Сообщений: 4,365
Записей в блоге: 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
2857 / 1364 / 407
Регистрация: 11.08.2017
Сообщений: 4,365
Записей в блоге: 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
2857 / 1364 / 407
Регистрация: 11.08.2017
Сообщений: 4,365
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru