Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Облегченная веб-инфраструктура Java - особые требования

Автор вопроса: embossОтветов: 3

Впервые я столкнулся, например. Фреймворк 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, которая выполняет маршрутизацию за меня и предлагает поддержку шаблонов для представлений, но все остальное полностью модульное, никакой магии. Есть ли какая-нибудь минималистичная структура, которая бы это обеспечивала (или, по крайней мере, была бы достаточно модульной, чтобы ее можно было настроить таким образом)?

  • Как именно Spring 3 терпит неудачу? Я думаю, что он удовлетворяет всем функциональным возможностям, которые вы хотите. Вы можете выполнить множество настроек на основе аннотаций. Это слишком тяжеловесно? Ray Toal 10.07.2011
  • @Ray Toal: я должен признать, что некоторое время назад у меня был опыт работы со Spring. В то время он казался монолитным, и, на мой вкус, в инъекциях зависимостей было слишком много волшебства. Но это могло измениться. Не могли бы вы дать несколько ссылок, которые могли бы продемонстрировать, насколько это соответствует описанию? С удовольствием познакомлюсь с ними, заранее спасибо! emboss 10.07.2011
  • Если вы ищете фреймворки, которые не раздуты, я бы не использовал Zend в качестве сравнения. Perception 10.07.2011
  • @Perception: Хорошо, я должен был быть более конкретным и просто сослаться на часть ZF MVC :) emboss 10.07.2011
  • @emboss: список новых функций в Spring 3 находится по адресу static.springsource.org/spring/docs/3.0.x/. Это правда, что Spring массивен и намного больше, чем среда MVC, но он относительно ненавязчив и теперь упакован в несколько разных jar-файлов, поэтому работа с одним только MVC более или менее возможна. (Кроме того, аннотации немного упрощают ситуацию. Если вы действительно хотите, чтобы Java казалась легковесной, Lombok projectlombok.org стоит посмотреть.) Ray Toal 10.07.2011

frameworksjava

Ответы

Ответ 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. Документация и форумы поддержки великолепны. Это быстро узнать, если вы будете следовать их учебник.

Ответ 3 · рейтинг 3 · Rohit

Spring Roo: мне было легко начать. Он может генерировать код пользовательского интерфейса, но его использование зависит от вас.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы