Лучший способ агрегировать страницы JSP, как мы строим LEGO - PullRequest
1 голос
/ 20 декабря 2011

Я пришел в мир Java после многих лет разработки на основе XML / XSLT, и постепенно я становлюсь все более и более подозрительным - похоже, я упускаю что-то действительно важное в идеологии создания веб-приложений на Java.

Именно так мы строим макет, когда мы думаем xslt: мы собираем все необходимые данные в один XML-файл, который можно преобразовать в HTML-макет.

В некоторых иллюстративных псевдо-XML-языках это может выглядеть примерно так:

   <data xmlns:x="..." xmlns:xi="..."> 
      <x:get url="http://ourrestapi.net/rrrrrest" xpath="/rest/rest/rest[2]">
        <x:param name="sortBy" value="desc" />
      </x:get>
      <x:get url="http://ourrestapi.net/userdata">
        <x:guard test="authorized">
         <x:param name="login" value="john" />
        </x:guard>
      </x:get>
      <xi:include href="common.xml" />
  </data>

Полагаю, этого достаточно, чтобы проиллюстрировать идею.Вот такой подход я постоянно пытался реализовать в мире сервлетов / jsp.Не удивительно, проблема сводится к вопросу, который, как я полагаю, является классическим вопросом новичка в jsp: «Как я могу включить вывод сервлета на странице jsp?»

Правильный ответ (поправьте меня, если яЯ ошибаюсь) - Я не должен.Я должен использовать цепочку запросов.Насколько я понимаю (еще раз, поправьте меня, если я запутываю факты), это означает, что я должен вызвать servletA, который помещает соответствующие данные в текущий запрос, а затем пересылает его так, servletB и так далее.В конце мы перенаправлены на страницу со всеми заполненными атрибутами.

Что касается меня, я могу назвать, по крайней мере, две основные трудности с этим подходом:

  • Я должен где-то хранитьпорядок переадресации.Должен ли сервлет A теперь перенаправлять на servletB, или кто-то еще, не знает, что надзорный объект должен выполнять эту работу.
  • Если мы храним все в атрибутах запроса, например, в Strings, на случай, если нам нужно параметризовать вызов servletBЧто касается данных, которые мы получаем в сервлете А, мы должны предоставить некоторые утомительные работы по сериализации / десериализации.

Итак, мой вопрос - , каков наилучший подход для добавления данных на страницу JSP из нескольких различных источников .

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

Ответы [ 2 ]

0 голосов
/ 10 марта 2012

Именно так мы строим макет, когда мы думаем о xslt [.....], так что это был подход, который я постоянно пытался реализовать в мире сервлетов / jsp

Почему?Java и XSLT - разные звери.Вы делаете это, потому что ваше приложение ориентировано на XML, а XSLT дает вам возможность его обрабатывать, или это просто потому, что ваш мозг сосредоточен на мышлении XSLT?

Если ваше приложение имеет в своей основе XML и ваш подходоправдано, тогда, возможно, взгляните на Apache Cocoon , который должен уметь обрабатывать конвейеры XML.В комментариях упоминались также некоторые другие фреймворки, поэтому я укажу один аспект Spring : он имеет XSLT-представления .

Если ваши данные нелегкопреобразовать в XML, но вы делаете это, так что вы можете обрабатывать его с помощью XSLT только потому, что XSLT вам более знаком, чем JSP, тогда вы делаете это неправильно.

Что касается сбора данных из нескольких источников, сервлет /Цепочка JSP не очень хорошая идея.Это низкоуровневые компоненты, и (как вы сами заметили) для создания рабочего процесса приложения требуется внешняя координация.Обычно сервлеты / JSP координируются с помощью веб-фреймворков, построенных на их основе.

Веб-фреймворки Java в основном MVC, поэтому в MVC сбор данных выполняется в модели (модель содержит бизнес-логику и координацию саналогично данным), затем отправьте их контроллеру, который выберет соответствующий вид для рендеринга данных.Если ваши данные действительно являются XML (или легко конвертируемыми в XML), то на этом этапе может помочь представление XSLT (JSP на самом деле не были предназначены для обработки XML).

Как вы сказали сами, мир Java «действительно, действительно огромен и зрел», поэтому вы можете решить эту проблему разными способами (то есть существует множество способов снять шкуру с кошки).Нужно ли в конечном итоге объединить фрагменты JSP?Как насчет Sitemesh , Apache Tiles , пользовательских JSP-тегов , чертовски даже портлетов ... множества платформ, библиотек и т. Д., КоторыеВы могли бы использовать.

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

0 голосов
/ 20 декабря 2011

Я не думаю, что цепочка сервлетов является очень популярным способом заполнения данных запроса, особенно с помощью перенаправлений, так как это очистит ваш запрос.

Как правило, независимо от того, какая используемая внутренняя структура (больше не сервлеты), будет предоставлять данные из одной или нескольких служб.

Что заставляет вас думать, что атрибуты запроса должны быть строками? Они могут быть любого типа, который вы хотите. Параметры запроса , данные, поступающие из JSP, будут строками, и для создания объектов домена из параметров запроса должна использоваться некоторая форма преобразования типов. Большинство фреймворков имеют эту функциональность, встроенную в ту или иную форму.

...