Подобие указателя на функцию или целый класс как аргумент сервлету?

Тема в разделе "Java", создана пользователем J-Pro, 26 июл 2006.

Статус темы:
Закрыта.
  1. J-Pro

    J-Pro Гость

    Всем привет.

    На форуме я новенький, но не в программировании :)
    Год назад перешёл с С++ на Яву, нравится, пишу веб-приложения.

    Есть такой вопрос: есть задача написать сервлет, создающий из буфера, в котором содержится XML-документ, другой документ - xls, то есть Microsoft Excel'я. Существует около 50-ти различных функций, генерирующих ХМЛ-документ, который впоследствие должен будет преобразиться в экзелевский, попадя в сервлет.

    Вопрос в следующем: как сервлету передать:
    1. ЛИБО весь ХМЛ-документ в виде класса Document, можно ли, к примеру, методом POST?
    2. ЛИБО весь ХМЛ-документ в виде непосредственно буфера с тэгами, тем же POST'ом? Возможно? И правильно ли?
    3. ЛИБО каким-то образом передать подобие указателя на функцию?
    Играться с кучей параметров, switch'ем - это слишком громоздко, к тому же, если передавать какие-то константы в виде параметров, а потом, в свиче вызывать необходимую ф-цию, придётся передавать и параметры для ф-ции. Это слишком громоздко.

    Возможен ли один из трёх вышеперечисленных вариантов? И какой наиболее оптимальный? Если третий, то как вообще это реализовать?
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Что-то не совсем понятно. Нужно передать xml-документ с клиента на сервер? Тогда нужно освоиться с вопросами загрузки файлов, или использовать готовые компоненты, типа Jakarta Commons FileUpload.
    А указателей на функцию в Java нет, вместо этого используются интерфейсы.
     
  3. J-Pro

    J-Pro Гость

    Нет, дело в том, что есть 50, к примеру, ф-ций, каждая из которых читает какую-то информацию и преобразует её в XML-документ. Структура этих документов, в принципе, одинакова, из каждого можно сделать таблицу. Разве что количество столбцов и записей отличается.

    Поясню, у меня есть веб-приложение, состоящее из JSP и сервлетов. Естественно, есть свои классы, как-то читающие и преобразующие данные.

    Так вот, я хочу создать сервлет, который будет получать либо что-то вроде указателя на необходимую ф-цию, которая будет возвращать нужный XML, либо XML-буфер, либо класс Document, в котором и будет XML. Просто я не хочу делать для каждой функции отдельный сервлет, а всё в одном, т.к. сервлет будет составлять таблицу из документа, а потом пихать её в файл. Действия-то одинаковые. Но нужно знать, какую функцию вызывать, либо уже иметь этот буфер.
     
  4. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Напрашивается такое решение. Создаешь интерфейс для своих функций:
    Код (Text):
    public interface MyXmlGenerator
    {
    public Document getXML();
    };
    Каждый класс, содержащий нужные тебе методы (функции), заставляешь этот интерфейс реализовывать. В реализации метода getXML() вызываешь функции, создающие XML.
    Далее создаешь, скажем, HashMap, в который складываешь объекты этих классов, используя в качестве ключей некоторые строковые значения.
    Далее сервлету передаются в качестве параметра эти самые строковые значения. Сервлет берет такой параметр, вытаскивает из HashMap'а нужный объект и вызывает на нем getXML(), получая нужный документ.
     
  5. J-Pro

    J-Pro Гость

    Дело в том, что у каждого класса таких функций (генерации ХМЛ) может быть несколько. Есть один класс, базовый, у него есть ф-ция getAll, возвращающая Document. От этого класса наследуются другие, у каждого из них добавляются ещё другие ф-ции, к примеру, getAllByNumber и т.д. Было бы классно просто, к примеру, переать указатель на необходимую ф-цию... или вообще супер - весь Document.

    Вообще, дело в чём... каждый класс возвращает ХМЛ, я его парсю и составляю ХТМЛ-таблицу, показывая её в браузере. Так вот, в каждом таком месте мне необходимо разместить ссылочку, которая называется "экспорт", по которой ЧТО-ТО(в моём случае я говорил о сервлете) будет эту же показанную ХМЛ-таблицу записывать в файл на диске, ровно в таком же виде, со всеми тегами и т.д. Так вот, для этого, ХМЛ нужно ещё раз взять и разобрать.

    В принципе, идеально было бы просто взять кусок кода со страницы, содержащего таблицу, и записать его в файл. Проблема была бы решена. Но проблема в том, что таблица ХТМЛ формируется в JavaScript'е, используя AJAX. А оттуда, к сожалению, на диск писать нельзя...
     
  6. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    А если, скажем, создать некий фильтр, который, получив определенный параметр (генерируемый ссылочкой "экспорт"), будет XML-документ не JavaScript'у на растерзание сдавать, а делать из него пусть даже тот-же HTML, только пользователю отправлять в виде простого файла (application/octet-stream или как там этот MIME-тип называется.. не помню).
    Соответственно, через этот фильтр будут проходить все обращения к генерирующим XML-методам.
     
  7. J-Pro

    J-Pro Гость

    Честно говоря, не полностью понял Вашу затею, LuMee, вернее, боюсь, что понял неверно.

    Пару часов назад, не найдя альтернативы, я решил поступить следующим образом:

    Сервлет получает один аргумент, плюс ещё кое-что, о чём позже. Аргумент этот - число, с которым ассоциирована функция, т.е. сервлет по нему определяет какую ф-цию вызвать(простым switch),
    "ещё кое-что" - это набор аргументов для функции. Всё равно сколько, ведь, из сервлета можно получить список аргументов и просто по порядку подставить их в вызываемую ф-цию.

    Вроде бы, проблема решается.... НО в некоторых функциях аргументами являются классы :huh: А как их передать сервлету - не представляю :( :( :(
     
  8. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Что-то совсем запутался...
    Насколько я понимаю, есть некая иерархия классов, содержащих методы, которые генерируют XML. К этим классам обращаются сервлеты (или JSP), которые возвращают полученные документы клиенту. Клиент, в свою очередь, из этого XML создает уже таблицу с помощью JavaScript, так?
    Значит от клиента на сервер передаются некие параметры, по которым тот определяет, какой из сервлетов (а соответственно и классов) задействовать для получения XML документа.
    Если так, то можно создать фильтр, который этот возвращаемый документ будет преобразовывать в HTML (по тем же алгоритмам, что и JavaScript-код на клиенте) и править заголовок ответа с целью изменения MIME-типа, дабы ответ возвращался как просто файл.
    Поправьте, если чего не допонял :huh:
     
Загрузка...
Похожие Темы - Подобие указателя на
  1. Dmitry-V
    Ответов:
    2
    Просмотров:
    876
  2. Lizzz
    Ответов:
    1
    Просмотров:
    1.243
  3. morg4n
    Ответов:
    3
    Просмотров:
    1.701
  4. Stashevckiy
    Ответов:
    4
    Просмотров:
    3.484
Статус темы:
Закрыта.

Поделиться этой страницей