Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > построение графа страниц сайта на jsp


Автор: Atum 1.6.2012, 17:06
Добрый день ! 

подскажите как можно решить следующую задачу : 

Имеется сайт написанный на jsp  . структура - множество папок и множество включений страниц в страницы 

(как во время компиляции так и с помощью ajax ) 


Чего хочется - найти инструмент который бы отображал структуры сайта графически в виде графа ...

как это делают в базах данных программы  DbVisualizer  и им подобные.

Хочется визуально понять какая связь между файлами в проекте .

(грубо говоря - я передаю программе ссылку на папку проекта,
 а она мне выводит схемку графическую в которой нарисовано что файл index  включает в себя - то-то и то-то...)

Автор: AntonSaburov 1.6.2012, 18:39
Мало перспективное занятие - большинство приложений пишется по шаблону MVC и страница ничего не дает в этом случае. А делать сайт именно на JSP (подобно сайтам на PHP) - дурной тон. Так что предлагаю не делать такое вообще.

Автор: IDVsbruck 6.6.2012, 15:39
Ну, возможно человек имеет в виду не карту вьюшек на сервере, а что-то типа "карта сайта", только в автоматическом режиме. Так сказать, не инфа с сервера, а внешняя.
Я недавно задавался такой целью - для демонстрашки работы сайта нужен был граф сайта - какие связи, что куда пережидит и т.д. Чисто как графическое решение не нашел, но вот Визио может по заданному адресу сайта сделать дерево (точнее, граф, так как много циклических связей). Правда, реализация мне не понравилась и не подошла. Но для документирования, дамаю, самое оно.

Автор: Atum 6.6.2012, 16:03
Цитата(IDVsbruck @ 6.6.2012,  15:39)
Ну, возможно человек имеет в виду не карту вьюшек на сервере, а что-то типа "карта сайта", только в автоматическом режиме. Так сказать, не инфа с сервера, а внешняя.
Я недавно задавался такой целью - для демонстрашки работы сайта нужен был граф сайта - какие связи, что куда пережидит и т.д. Чисто как графическое решение не нашел, но вот Визио может по заданному адресу сайта сделать дерево (точнее, граф, так как много циклических связей). Правда, реализация мне не понравилась и не подошла. Но для документирования, дамаю, самое оно.


Да именно граф,  но изнутри по страницам 
фактически обходим все папки и ищем вхождение файлов  и строим граф .

Код - как идея ! 
Код

public class Viewer {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {
        // TODO code application logic here
        

          File folder = new File("C:/NBP/WebApplication1/web");
          printTree(folder);

        }
    
    
    public static void printTree(File root) throws FileNotFoundException, IOException{
         File[] files = root.listFiles();
         for (File file : files) {
            if (file.isDirectory()){
                System.out.println(file.getAbsolutePath());
                printTree(file);
            }else{
                String path =  file.getAbsolutePath();
                if(path.contains(".jsp")){
                   if(find(file)){
                     System.out.println(path);
                   }
                   
                }
            }
        }
         
    }
    
    public static boolean  find(File file) throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        String str;
         boolean result = false;
        while ((str = in.readLine()) != null) {
          if(str.contains(".jsp")){
              result = true;
               System.err.println("    "+str);
          }
          }

        in.close();

return result;
    }
        
        




по данным строим граф.

т.е. каждая страница (на примере index.jsp )

function.jsp ( набор глобальных переменных и функции, все либы что требуются)
header.jsp ( заголовки и начало тело html )

 index.jsp ( ссылки на другие страницы )

footer.jsp (  конец html  документа.)


Автор: AntonSaburov 6.6.2012, 16:34
Цитата(Atum @  6.6.2012,  16:03 Найти цитируемый пост)
Да именно граф,  но изнутри по страницам 
фактически обходим все папки и ищем вхождение файлов  и строим граф .

Сделайте рекурсивный обход нужной директории - пример ниже. Но я бы все-таки не шел по такому пути - НЕ НАДО ДЕЛАТЬ JSP картой сайта. Плохая это идея

Код

import java.io.File;

/**
 * Пример программы использования стандартного класса File
 * для рекурсивного обхода директорий, начиная с текущей
 */
public class Main {

    public static void main(String[] args) {
        Main m = new Main();
        // Обращение к переменной среды user.dir в классе System
        // возвращает текующую директорию - здесь можно подставить другую
        String root = System.getProperty("user.dir");
        // Входим в рекурсивную функцию
        m.showFileList(root);
    }

    private void showFileList(String root) {
        // Создаем объект с указанием файла/директории
        File fileRoot = new File(root);
        // Получаем список файлов и директорий в указанном файле - мы знаем что это директория
        // Можно использовать FilenameFilter
        String[] list = fileRoot.list();
        // Перебираем все файлы внути директории
        for (String s : list) {
            // Создаем объект с указанием файла/директории
            File fileLocal = new File(root + File.separator + s);
            // Печатаем
            System.out.println(fileLocal.getAbsolutePath());
            System.out.println();
            // Если этот объект тоже директория - обрабатываем его как и родителя
            // т.е. снова вызываем showFileList, только уже для новой директории
            if (fileLocal.isDirectory()) {
                showFileList(fileLocal.getAbsolutePath());
            }
        }

    }
}


Автор: Atum 7.6.2012, 15:11
Цитата

 Но я бы все-таки не шел по такому пути - НЕ НАДО ДЕЛАТЬ JSP картой сайта. Плохая это идея


Почему это плохо? 

Автор: AntonSaburov 7.6.2012, 17:41
Потому что JSP-страница по правильному шаблону НЕ СОДЕРЖИТ логику получения данных - она их только отображает. Т.е. если пойти на страницу прямо по ссылке, то скоре всего она не отобразит данные, которые для нее требуются - их там просто не будет. Чтобы нагляднее -обычно делается так:

1. С браузера приходит URL
2. Web-Server (например Tomcat) вызывает соответствующий сервлет
3. Сервлет ходит по всяким истоникам данных (базы данных, файлы, другие системы и т.д. и т.п.)
4. Сервлет собирает все в один набор данных и вызывает JSP-страницу, которой передает уже сформированный пакет данных.
5. JSP отображает переданный ей пакет данных.

А Вы хотите все шаги уместить в JSP. Да, она конечно может тоже собрать данные. Но это будет стратегически неверный вариант построения системы.
Будет каша в виде одной страницы, внутри которой вся логика. Что потом крайне плохо развивается - например захотите Вы сделать мобильный вариант сайта.
Если исходить из MVC - то достаточно просто добавить еще одно отображение (та же JSP). Но вся логика получения данных уже есть. В случае если все на JSP - придется делать копию страницы или как-то вызывать через include, что делает код настолько нечитаемым, что поддержка будет ужасным трудом.

Автор: Atum 8.6.2012, 11:17
Цитата(AntonSaburov @ 7.6.2012,  17:41)
Потому что JSP-страница по правильному шаблону НЕ СОДЕРЖИТ логику получения данных - она их только отображает. Т.е. если пойти на страницу прямо по ссылке, то скоре всего она не отобразит данные, которые для нее требуются - их там просто не будет. Чтобы нагляднее -обычно делается так:

1. С браузера приходит URL
2. Web-Server (например Tomcat) вызывает соответствующий сервлет
3. Сервлет ходит по всяким истоникам данных (базы данных, файлы, другие системы и т.д. и т.п.)
4. Сервлет собирает все в один набор данных и вызывает JSP-страницу, которой передает уже сформированный пакет данных.
5. JSP отображает переданный ей пакет данных.

А Вы хотите все шаги уместить в JSP. Да, она конечно может тоже собрать данные. Но это будет стратегически неверный вариант построения системы.
Будет каша в виде одной страницы, внутри которой вся логика. Что потом крайне плохо развивается - например захотите Вы сделать мобильный вариант сайта.
Если исходить из MVC - то достаточно просто добавить еще одно отображение (та же JSP). Но вся логика получения данных уже есть. В случае если все на JSP - придется делать копию страницы или как-то вызывать через include, что делает код настолько нечитаемым, что поддержка будет ужасным трудом.

я кажется понимаю о чем вы !

Но у меня немного другая задача: 

Мне как раз и надо построить и отобразить графически все эти зависимости 

логики получения данных мне не надо - нужен сам факт включения той или иной страницы -без отображения  какой либо логики!

и желательно в виде графической схемы.

просто когда мы создаем проект в IDE -  среда понимает  его и отображает его в виде дерева - папочки и файлы ...

я хочу иметь аналогичное отображение но в виде включения одних jsp в другие . 

как то так .

UPD 

Это как в netbeans - когда вы создаете десктоп приложение - есть возможность визуально его проектировать - размещать кнопки контролы итд ...

я хочу так же видеть как одна jsp  включает в себя ссылку на другую jsp...

Автор: AntonSaburov 9.6.2012, 14:45
Так надо не файловую систему отобразить, а именно варианты include ? Если так, то тут увы тупое считывание JSP-страниц (в виде файлов) и поиск в них директив включения других страниц. И построение структуры типа дерева. Нудненькая работа - хотя может поискать в Инете - вдруг кто такой уже занимался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)