Это очень сложный вопрос, потому что я недавно попал в вашу ситуацию и постараюсь дать некоторое представление. По сути, с Java существует множество вариантов для фреймворков, и никто не может сказать, какая из них лучше всего подходит для вас, что мы можем сделать, это дать вам описание некоторых технологий.
Вот то, с чем я столкнулся в поисках тех же самых ответов, которые вы хотите.
В Java есть множество технологий, которые пытаются обеспечить решение с полным стеком. Эти технологии можно разбить на другие технологии, но они хорошо работают, когда вы используете их вместе.
По сути, существует три уровня веб-приложений: уровень представления, бизнес и уровень данных. Уровень представления - это внешний интерфейс, который видит пользователь. Обычно вы можете смешивать и сочетать технологии для этих трех слоев. Например, вы можете использовать интерфейс полосы с Spring Framework для IOC и Hibernate в качестве ORM.
Существует множество великолепных технологий, которые вы можете использовать для уровня представления, включая Spring-MVC, STRUTS, Stripes, Wicket, JSF / SEAM и Tapestry. Большинство из них используют JSP для представления с использованием JSTL, за исключением wicket, который фактически полностью отделяет html от логики с помощью Java-компонентов (POJOS). У обоих подходов есть свои преимущества и недостатки. Преимущество подхода с калиткой заключается в том, что у вас есть статическая проверка типов и полное разделение html, чтобы вы могли передать его своему дизайнеру.
Обычно для бизнес-уровня люди используют некую платформу Inversion of Control (IOC) для внедрения зависимостей (DI). Популярными средами для IOC являются Spring и Seam, они связаны с такими технологиями, как Spring-security, и обычно поддерживаются другими технологиями. Похоже, что Google Guice популярен для прямого интерфейса DI.
Наконец, для слоя данных большинство людей склонны использовать Hibernate или JPA. Есть и другие, но я не имею опыта работы с ними и не могу предложить больше информации.
Гобелен - это еще один фреймворк, который пытается быть полным стеком, исходя из того, что я понимаю, и использует подход, похожий на калитку (или, я полагаю, Wicket использует гобеленовый) подход. Grails - это еще один полнофункциональный фреймворк, использующий Groovy и построенный на основе Spring и Hibernate. Если вам нравятся Rails, Grails довольно хорош.
Большинство из этих технологий имеют много доступной информации и очень активные списки рассылки / IRC-чаты. Что вам нужно сделать, это взглянуть на них, а затем решить, какой подход является правильным для вас. Никто здесь не может сказать вам, что вам понравится.
Если вам нужна рекомендация, я бы однажды использовал стек Wicket / Guice / Hibernate.