Впервые я столкнулся, например. Фреймворк Ruby Sinatra или PHP Zend Framework, мне было интересно, есть ли что-то адекватное в Java, здесь все кажется таким раздутым. Несмотря на то, что вокруг существует множество фреймворков, я пока не нашел ни одного, который я считаю идеальным для той архитектуры, которую я хотел бы реализовать.
Я хотел разработать веб-приложение, которое было бы тяжело для Javascript, с большей частью логики приложения, реализованной на клиенте, серверная часть Java более или менее просто служила бы хранилищем данных или выполняла сложные вычисления.
Я просмотрел здесь связанные вопросы, но не смог найти идеального ответа, у каждого из предложенных решений была причуда, которая не соответствовала требованиям.
Итак, это то, что я ищу, фреймворк с открытым исходным кодом со следующими функциями:
- Соглашение о конфигурации
- Нет конфигурации XML, кроме web.xml
- Чистая Java (без Scala, без Groovy,...)
- естественные URL-адреса в стиле REST, такие как /news/2011/july (без .do, без .jsp, ...)
- REST-осведомленный
- это не должно заставлять меня развертываться на сервере приложений (например, EJB должен быть необязательным)
- поддержка сеанса была бы хорошей, но не обязательной
- генерация кода, как в Rails, была бы замечательной, но не обязательной
- минимум зависимостей, небольшие габариты
- MVC would be nice, but
- I'd like to be able to choose the M part, choose the persistence libraries on my own (no bundling).
- Нет автоматически сгенерированного кода для представления, ни HTML, ни Javascript, ни CSS
- Интегрированный язык шаблонов был бы хорош, но он должен быть минималистичным (простой поток управления, доступ к переменным шаблона).
- Поддержка макета (т.е. вы можете указать общий шаблон для похожих видов)
- Свободный выбор фреймворка Javascript для представлений
В основном это будет означать структуру MVC, которая выполняет маршрутизацию за меня и предлагает поддержку шаблонов для представлений, но все остальное полностью модульное, никакой магии. Есть ли какая-нибудь минималистичная структура, которая бы это обеспечивала (или, по крайней мере, была бы достаточно модульной, чтобы ее можно было настроить таким образом)?
Ответ 1 · рейтинг 15 · Daniel Fath
Как насчет Play Framework?
Соглашение о конфигурации
В Play всего несколько конфигурационных файлов. Большая часть его структуры является условной. Например, базовая структура выглядит так:
|
+---/app - All executable artifacts go here (java files, conf files and view templates).
| |
| +---/model - Your model Java classes.
| |
| +---/view - Your view templates.
| |
| +---/controller - Your controller classes
|
|---/conf - Contains all configuration files for the application. Initially contains application configuration and routing table.
|
|---/lib - Libraries your appliaction needs. Added automatically to classpath.
|
|---/log
|
|---/public - Public stuff are your static assets that your server gives directly
|
|---/test
|
|---/tmp - All your temporarily compiled .class files are here
Нет конфигурации XML, кроме web.xml
Play не имеет XML-конфигурации, в том числе web.xml. Вместо этого у него есть файл маршрутизации. Посмотрите пример ниже, что он использует для маршрутизации.
Чистая Java (без Scala, без Groovy,...)
Это чистая Java, но вы можете использовать Scala или Groovy через плагин.
- естественные URL-адреса в стиле REST, такие как /news/2011/july (без .do, без .jsp, ...)
- REST-осведомленный
С сайта:
Play is a real "Share nothing" system. Ready for REST, it is easily scaled by running multiple instances of the same application on several servers.
На самом деле маршрутизация в стиле Rest довольно проста:
# Play 'routes' configuration file...
# Method URL path Controller
GET / Application.index
GET /about Application.about
POST /item Item.addItem
GET /item/{id} Item.getItem
GET /item/{id}.pdf Item.getItemPdf
Нетрудно догадаться, что куда идет, как только вы немного привыкнете к игре.
- это не должно заставлять меня развертываться на сервере приложений (например, EJB должен быть необязательным)
Это не так. Фактически вы развертываете, сохраняя свои файлы. EJB совершенно необязательны, как и .war, .ear и другие формы развертывания.
генерация кода, как в Rails, была бы замечательной, но не обязательной
Я не думаю, что он генерирует много кода, но я не уверен в этом на 100%. Он автоматически создает все необходимые папки и создает базовую примерную страницу. Я не знаю, генерирует ли Rails что-нибудь еще...
MVC был бы хорош, но
- я хотел бы иметь возможность выбирать часть M, выбирать библиотеки постоянства самостоятельно (без связывания).
- Нет автоматически сгенерированного кода для представления, ни HTML, Javascript или CSS
. Интегрированный язык шаблонов был бы хорош, но он должен быть минималистичным (простой поток управления,
См. MVC в Play.
- Думаю, это второстепенный контрпункт. Модели Play должны использовать JPA или расширять определенный класс Model, который поставляется с Play. Дополнительную информацию см. в разделе Play framework-model.
- Он не генерирует HTML, хотя вы можете использовать свой язык шаблонов внутри ваших
.html,.css,.js и других файлов для создания динамических страниц.
У меня есть встроенный язык шаблонов, основанный на языке шаблонов Groovy, например.
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !
Другие плюсы:
- Программировать довольно весело.
- Я упоминал о горячей замене, которая позволяет повторно развертывать приложение, сохраняя исходные файлы?
- Отличные журналы ошибок.
Минусы:
- Это 51 МБ, не уверен, что это можно назвать легким :/
Ответ 2 · рейтинг 3 · Moe Matar
В прошлом я использовал структуру Stripes в нескольких проектах, и мне кажется, что она соответствует все/большинство ваших критериев, особенно соглашение о конфигурации. Конфигурации XML нет - есть один файл stripes.properties с общей поведенческой конфигурацией (это одноразовое дополнение к вашему пути к классам). Однократное редактирование файла web.xml необходимо для настройки "диспетчера полос", который представляет собой фильтр, который направляет запросы соответствующим компонентам действий. Компоненты ActionBean обнаруживаются автоматически, поэтому вам не нужно даже обновлять файл web.xml при добавлении дополнительных компонентов Action Beans. Все ваши URL-адреса настраиваются с использованием аннотаций в компонентах действий, остальные поддерживаются, динамические привязки ActionBean, проверка и преобразование на стороне сервера с помощью встроенных аннотаций для простых типов с возможностью создания собственных обработчиков проверки и преобразователей для сложных типов. Работает с JSP и вашими пользовательскими библиотеками JS/CSS. Документация и форумы поддержки великолепны. Это быстро узнать, если вы будете следовать их учебник.