Альтернативы JSP для Spring MVC view layer
Я ищу создание нового приложения с нуля и, вероятно, буду использовать Spring MVC и, возможно, Spring Web Flow. Проекты, созданные Spring Roo, используют Spring MVC и, возможно, Web Flow. Какие есть хорошие альтернативы для технологии представлений, или JSP с тегами Spring и JSTL и jQuery - это путь?
16 ответов
В стандартном API Java EE единственной альтернативой JSP является Facelets. На данный момент (2010) JSF является единственной платформой MVC, которая изначально поддерживает Facelets.
Spring MVC поддерживает из коробки только JSP, но имеет настраиваемый распознаватель представлений, который позволяет в любом случае использовать Facelets. Другими кандидатами являются сторонние шаблоныные структуры, такие как Velocity, Freemarker и Thymeleaf, которые можно настроить в качестве технологии просмотра для Spring MVC. В документации Spring есть примеры интеграции с Velocity и Freemarker.
Я недавно обнаружил Thymeleaf.
Похоже, это полная замена для JSP и имеет интеграцию с Spring MVC. Шаблонный подход больше похож на HTML и может быть более приемлемым для ваших дизайнеров пользовательского интерфейса. У них есть небольшая статья, которая сравнивает два решения бок о бок.
Недавно я начал использовать обычный HTML и jQuery для презентации в Spring MVC, создавая только представление JSON.
Пока что все идет хорошо, и хотя мне приходится выполнять работу с javascript, это значительно облегчает взаимодействие с моим дизайнером и ускоряет обработку, когда у него есть изменения, потому что мне не нужно конвертировать его HTML в мой JSP. Жюри все еще отсутствует в общей ремонтопригодности сайта.
В Spring MVC вы можете иметь столько технологий просмотра, сколько пожелаете. У меня есть FreeMarker и JSP View Resolvers. Когда я сталкиваюсь с тем, что во Freemarker это слишком сложно (или просто более удобно в JSP), я создаю представление JSP. Например, Spring JSLT отлично справляется с обработкой форм. Для этого я использую представления JSP, но для почти всего остального у меня есть представления freemarker.
Взгляните на документацию Spring MVC, чтобы узнать, как настроить несколько преобразователей представлений, в основном:
<bean name="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
<property name="order" value="1"/> <!--NOTICE THE ORDER-->
</bean>
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="2"/> <!--NOTICE THE ORDER-->
</bean>
Документация Springs также предлагает Freemarker. Freemarker (насколько я могу судить) быстр и имеет некоторую интеграцию функций Spring, таких как привязка.
Spring MVC обеспечивает интеграцию со многими различными технологиями просмотра. Я бы порекомендовал использовать FreeMarker или Velocity.
Хотя это старый вопрос, я подумал, что предложу перспективную альтернативу - Scalate.
Scalate - мощная сила в шаблонах. Единственной вероятностью является то, что Scalate требует много зависимостей (хотя для этого требуется Scala, вам не требуется писать в Scala).
Мой текущий фаворит - Handlebars.java, который имеет интеграцию Spring.
(Мой предыдущий ответ был плохо датирован здесь.) Freemarker по крайней мере так же хорош, как Velocity. Но Thymeleaf выглядит еще более убедительным, и вместе с layout-dialect это может сделать ненужными каркасы шаблонов, такие как sitemesh и tile. Для JSF критика Thoughtworks кажется обоснованной:
Мы по-прежнему видим, что команды сталкиваются с проблемами при использовании JSF - JavaServer Faces - и рекомендуем вам избегать этой технологии. Команды, кажется, выбирают JSF, потому что это стандарт Java EE, без реальной оценки того, подходит ли им модель программирования. Мы считаем, что JSF имеет недостатки, потому что его модель программирования поощряет использование собственных абстракций, а не полное использование базовой веб-модели. JSF, как и веб-формы ASP.NET, пытается создавать деревья компонентов с сохранением состояния в верхней HTML-разметке и HTTP-протоколе без сохранения состояния. Улучшения в JSF 2.0 и 2.2, такие как введение представлений без состояния и продвижение GET, - это шаги в правильном направлении, возможно, даже признание того, что оригинальная модель была ошибочной, но мы считаем, что это слишком поздно. Вместо того, чтобы справляться со сложностью JSF, мы рекомендуем командам использовать простые фреймворки и тесно работать с веб-технологиями, включая HTTP, HTML и CSS.
Вы также можете использовать Angular (клиентская структура) для своего слоя View в Spring MVC.
Я использую Stripes и Spring вместе. Полосы остаются в стороне от вас большую часть времени, но приятно увеличивают весну, когда вам это нужно, я нахожу.
Я использую скорость и Spring MVC. Кроме того, я размещаю свое приложение на движке Googles App, и у меня нет проблем.
Я предлагаю не смотреть на структуру представления, как описано в большинстве вышеперечисленного, которое не было написано поверх Spring MVC, так как вы столкнетесь с такими проблемами, как обратные передачи, что означает, что вы не сможете отправить данные из этой технологии представления. и получить ответ от Север. Например, проверка, редактирование представления данных, которые обновляются обратно с данными с сервера, НЕ РАБОТАЕТ.
Это связано с тем, что в некоторых вышеупомянутых технологиях Java-бины не используют жизненный цикл контейнера Spring. Вы сможете использовать их только для примера запроса без сохранения состояния. Например, с JSF вы не сможете использовать обратные передачи, так как обратные передачи jsf работают только в том случае, если вы используете жизненный цикл jsf, и если вы используете среду разрешения JSF для Spring Framework с mvc, вы не сможете выполнять обратную передачу, поэтому вам нужно заменить jsf Контроллер сервлетов вместо пружинного контроллера MVC.
Опять же, поскольку ваше полное требование к проекту неясно, и если вы не хотите, чтобы требовалось обратное выполнение, вы можете использовать некоторые из вышеуказанных вариантов.
Одним из примеров технологии представления, которая написана на вершине mvc Spring, является zk mvc на основе фреймворка zk, в котором вы можете расширить свои контроллеры mvc spring из ZK GenericForwardComposer для обработки событий. Вы всегда можете использовать Spring для управления жизненным циклом этих контроллеров с помощью Spring Framework.
Вы можете Google, чтобы найти аналог других продуктов.
Этот обзор основан на высоком уровне дизайна жизненного цикла фреймворка.
Всего наилучшего!!!
Я думаю, что Tiles может помочь вам.
Вы можете определить шаблоны и использовать JSTL внутри.
Как насчет phpj?
Его можно использовать в качестве шаблонов представления или создать систему веб-сервера с нуля.
Я сделал phpj, потому что я не хотел бы постоянно обновлять свое приложение и загружать его с tomcat, поэтому я могу использовать статические местоположения для моего веб-приложения с использованием конфигураций, подобных apache