Может ли кто-нибудь порекомендовать простой фреймворк для веб-приложений Java?

Я пытаюсь приступить к работе над тем, что, как я надеюсь, будет относительно быстрым веб-приложением на Java, но большинство фреймворков, которые я пробовал (Apache Wicket, Liftweb), требуют стольких настроек, конфигурирования и попыток обернуть мою голову вокруг Maven, заставляя все это хорошо играть с Eclipse, что я провел все выходные, просто пытаясь добраться до точки, где я напишу свою первую строку кода!

Может ли кто-нибудь порекомендовать простую структуру веб-приложений Java, которая не включает Maven, ужасно сложные структуры каталогов или бесчисленные файлы XML, которые необходимо редактировать вручную?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
65
0
181 668
33
Перейти к ответу Данный вопрос помечен как решенный

Ответы 33

Мне нравится писать простые старые сервлеты + контейнер сервлетов Winstone. Оттуда я прибегаю к библиотекам шаблонов (скорость, XSLT и т. д.) И доступа к БД (спящий режим, крутящий момент и т. д.), Поскольку они мне нужны, вместо того, чтобы заниматься реальной структурой.

Минимальная "структура" Java с отображением URI в стиле Velocity + Play: Драмлин.

Peter Cardona 10.11.2013 08:17

Вы ищете http://grails.org/

Вы кодируете его на Groovy, динамическом языке, основанном на Java, который без проблем работает вместе с кодом Java, классами и библиотеками. Синтаксис несложен для изучения и не отличается от Java. Попробуйте, это несколько минут, чтобы запустить и запустить веб-сайт. Просто следуйте http://grails.org/Installation и http://grails.org/Quick+Start

Greetz, GHad

Спасибо, но мне действительно нужен фреймворк Java или Scala с натяжкой. Мне нужно что-то с минимальной кривой обучения, и необходимость изучать совершенно новый язык, независимо от того, насколько он может быть простым, - это не то, что я имел в виду.

sanity 22.09.2008 23:38

Groovy действительно настолько похож на Java, что вы можете написать то, что фактически является синтаксисом Java, а затем, по мере того, как вы станете более уверенными, делать его более Groovy. Grails действительно является отличным фреймворком для быстрого прототипирования сайтов.

Peter Kelley 23.09.2008 03:10

FWIW, вы можете написать отличный код на Java - он отлично его скомпилирует.

Tim Howland 13.11.2008 02:02

и наоборот, вы можете писать код Java в Groovy. Groovy похож на java ++.

frankodwyer 31.12.2008 22:39

@sanity, Groovy намного ближе к Java, чем Scala. Grails также построен на Spring и Hibernate, которые по сути являются стандартом для корпоративных приложений Java, потому что они надежны.

Reverend Gonzo 26.11.2010 04:58

Я не использовал его, поскольку AppFuse предназначен для облегчения неприятной настройки, которая поставляется с Java Web Development.

Вы пробовали DWR? http://directwebremoting.org

Grails написан для Groovy, а не для Java. AppFuse просто сокращает время настройки, необходимое для запуска любого количества фреймворков Webapp, вместо того, чтобы продвигать какую-либо из них.

Я бы предложил Spring MVC. После выполнения хорошо написанных руководств вы получите простую и удобную модель, автоматически подключаемую (без конфигурации XML!) К любой технологии просмотра, которая вам нравится.

Хотите добавить в список клиентов действие «удалить»? Просто добавьте метод с именем «delete» в контроллер клиента, и он автоматически подключится к URL-адресу / customers / delete.

Необходимо привязать параметры запроса к объекту? Просто добавьте экземпляр целевого объекта в свой метод, и Spring MVC будет использовать отражение для привязки ваших параметров, что упростит написание вашей логики, как если бы клиент для начала передал строго типизированный объект.

Устали от принудительного разделения труда в MVC? Просто сделайте так, чтобы ваш метод возвратил void, и напишите свой ответ прямо в Writer сервлета, если вам это нравится.

Мне нравится Spring MVC, при использовании функций 2.5 требуется очень мало XML.

Оцените WaveMaker, чтобы создать быстрое и простое веб-приложение. У них есть дизайнер перетаскивания на основе браузера для виджетов Dojo / JavaScript, а бэкэнд - это 100% Java.

Полосы рамки - отличный фреймворк. Единственная задействованная конфигурация - это вставка нескольких строк в ваш web.xml.

Это очень простой веб-фреймворк Java на основе запросов.

Я нарезал канавку В самом деле на Полосы. Полная настройка включает в себя вырезание и вставку XML в файл web.xml вашего приложения, и тогда все готово. Конфигурация не требуется, поскольку Stripes - это фреймворк, основанный на соглашении по настройке. Переопределение поведения по умолчанию выполняется с помощью аннотаций Java 1.5. Документация отличная. Я потратил 1-2 часа на чтение учебника и настройку своего первого приложения.

Я пока не могу провести подробное сравнение со Struts или Spring-MVC, так как я еще не построил в нем полномасштаб (как в Struts), но похоже, что он будет масштабироваться до этого уровня архитектура вполне приличная.

Полоски: неплохо. книга по этому поводу вышла от прагматичных программистов: http://www.pragprog.com/titles/fdstr/stripes. Нет XML. Требуется java 1.5 или новее.

гобелен: пробовали старую версию 3.х. Мне сказали, что текущая версия 5.x находится в стадии бета-тестирования и довольно хороша.

Полосы должны быть лучше с точки зрения заботы о maven, без xml и быстрого оборачивания головы.

BR,
~ А

(Обновлено для Spring 3.0)

Я тоже использую Spring MVC.

Вам нужно скачать Spring с здесь

Чтобы настроить веб-приложение для использования Spring, добавьте в web.xml следующий сервлет.

<web-app>
    <servlet>
        <servlet-name>spring-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Затем вам нужно создать файл конфигурации Spring /WEB-INF/spring-dispatcher-servlet.xml.

Ваша первая версия этого файла может быть такой простой, как:

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:mvc = "http://www.springframework.org/schema/mvc" xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
        http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package = "com.acme.foo" />    
   <mvc:annotation-driven />

</beans>

Затем Spring автоматически обнаружит классы, аннотированные @Controller.

Тогда простой контроллер:

package com.acme.foo;

import java.util.logging.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/person")
public class PersonController {

    Logger logger = Logger.getAnonymousLogger();

    @RequestMapping(method = RequestMethod.GET)
    public String setupForm(ModelMap model) {
        model.addAttribute("person", new Person());
        return "details.jsp";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processForm(@ModelAttribute("person") Person person) {
        logger.info(person.getId());
        logger.info(person.getName());
        logger.info(person.getSurname());
        return "success.jsp";
   }
}

И details.jsp

<%@ taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<form:form commandName = "person">
<table>
    <tr>
        <td>Id:</td>
        <td><form:input path = "id" /></td>
    </tr>
    <tr>
        <td>Name:</td>
        <td><form:input path = "name" /></td>
    </tr>
    <tr>
        <td>Surname:</td>
        <td><form:input path = "surname" /></td>
    </tr>
    <tr>
        <td colspan = "2"><input type = "submit" value = "Save Changes" /></td>
    </tr>
</table>
</form:form>

Это лишь верхушка айсберга в отношении того, что может сделать Spring ...

Надеюсь это поможет.

Spring, безусловно, хороший и широко распространенный фреймворк, но он был запрошен для простая структура веб-приложений Java. ;-)

cuh 01.10.2010 12:41

Куда пойти details.jsp? Я настроил это, как описано, и получил: 2012-09-24 21: 57: 31.236: WARN: oejs.ServletHandler: /details.jsp java.lang.NullPointerException в java.net.URLEncoder.encode (URLEncoder.java: 205) ...

kburns 25.09.2012 06:00

Это именно та проблема, которой хотел избежать оригинальный плакат. Необходимость писать акры этого XML здесь, этого XML там, большого количества шаблонного кода, что делает простые задачи сложными, а сложные задачи невозможными. Разве не должно быть наоборот?

Laryx Decidua 25.02.2013 18:24

Tapestry 5 можно очень быстро настроить, используя архетипы maven. См. Руководство по Tapestry 5: http://tapestry.apache.org/tapestry5/tutorial1/

Я действительно не понимаю, что такого особенного в том, чтобы заставить работать maven + eclipse, если вам не нужно слишком сильно менять pom.xml :)

Большинство фреймворков, использующих maven, имеют архетипы maven, которые могут генерировать проект-заглушку.

Итак, в основном шаги должны быть такими:

  1. Установить maven
  2. Добавить переменную пути к классу M2_REPO в eclipse
  3. Создать проект с архетипом
  4. Импортировать проект в eclipse

Что касается Wicket, нет причин, по которым вы не могли бы использовать его без maven. Преимущество maven в том, что он заботится обо всех зависимостях, поэтому вам не нужно этого делать. С другой стороны, если единственное, что вы хотите сделать, это создать прототип пары страниц, Wicket может оказаться излишним. Но, если ваше приложение вырастет, в конечном итоге преимущества Wicket будут продолжать проявляться с каждой добавленной формой, ссылкой или страницей :)

Правильный ответ IMO зависит от двух вещей: 1. Какова цель веб-приложения, которое вы хотите написать? Вы только сказали нам, что хотите написать это быстро, но не о том, что вы на самом деле пытаетесь сделать. Например. ему нужна база данных? Это какое-то бизнес-приложение (подсказка: возможно, поиск по запросу "строительные леса")? ..или игру? ..или вы просто экспериментируете с sthg? 2. С какими фреймворками вы сейчас больше всего знакомы? Что часто занимает больше всего времени, так это чтение документации и выяснение того, как все (на самом деле) работает. Если вы хотите, чтобы это было сделано быстро, придерживайтесь того, что вы уже хорошо знаете.

После многих болезненных опытов со Struts, Tapestry 3/4, JSF, JBoss Seam, GWT я пока буду придерживаться Wicket. Wicket Bench для Eclipse удобен, но не готов на 100%, но все же полезен. Плагин MyEclipse для развертывания в Tomcat - ace. Нет Maven просто развернуть один раз, изменения автоматически копируются в Tomcat. Магия.

Мое предложение: Wicket 1.4, MyEclipse, Subclipse, Wicket Bench, Tomcat 6. На установку уйдет около часа, но большая часть этого будет загружена tomcat и подключаемыми модулями Eclipse.

Подсказка: не используйте библиотеки Wicket Bench, а вручную установите библиотеки Wicket 1.4 в проект.

На этот сайт у меня ушло около 2 часов, чтобы написать http://ratearear.co.uk - не ходите туда с работы !! А это примерно 3 дня работы http://tnwdb.com

Удачи. Тим

Apache Wicket, Liftweb) require so much set-up, configuration

Я не согласен, я использую Wicket для всех своих проектов и никогда не оглядывался назад! настройка не займет много времени, даже часа, чтобы настроить полную среду для работы с Wicket ..

Согласен, я только начал использовать его пару дней назад и запустил свою среду менее чем за час (Wicket + Wicket-Spring + Hibernate). Я влюбился.

Allain Lalonde 14.02.2009 00:09

... пока вы не дойдете до чего-то необычного. Калитка на самом деле не простая.

Christian 01.06.2011 10:17

Час - это долгое время. Play Framework требует около 2 минут.

sanity 09.06.2011 21:36

... до тех пор, пока вам не потребуется масштабировать приложение для более чем одного сервера или более чем горстки пользователей. Тогда Уикет больше тебе не друг.

xpmatteo 25.01.2013 12:59
Ответ принят как подходящий

Сам не пробовал, но думаю

http://www.playframework.org/

имеет большой потенциал ...

исходящий от php и классического asp, это первый веб-фреймворк java, который звучит многообещающе для меня ...

Редактировать исходный вопрос, задавший вопрос - 2011-06-09

Просто хотел предоставить обновление.

Я выбрал Play, и это было именно то, о чем я просил. Он требует очень небольшой настройки и работает сразу после установки. Необычно то, что он избегает некоторых распространенных передовых практик Java в пользу того, чтобы все было как можно проще.

В частности, он интенсивно использует статические методы и даже проводит некоторый самоанализ имен переменных, передаваемых методам, что не поддерживается API отражения Java.

Позиция Play состоит в том, что ее первая цель - быть полезной веб-платформой, а соблюдение общих передовых практик и идиом Java является вторичным по отношению к этому. Для меня этот подход имеет смысл, но пуристам Java он может не понравиться, и было бы лучше с Apache Wicket.

Таким образом, если вы хотите создать веб-приложение с удобством и простотой, сопоставимым с фреймворком вроде Ruby on Rails, но на Java и с преимуществами инструментов Java (например, Eclipse), то Play Framework - отличный выбор.

Фреймворк Play тяжело учится и тормозит JEE. Он пытается создать свою собственную экосистему, держитесь от нее подальше.

user452425 07.12.2012 23:11

Попробуйте отладить код фреймворка Play 2.0. Если вы не знаете Scala, вам придется нелегко.

Aliaksei Nikuliak 28.11.2013 11:27

Инструмент web4j позиционирует себя как простой и легкий. Некоторые моменты по этому поводу:

  • использует один xml-файл (файл web.xml, необходимый для всех сервлетов)
  • нет зависимости от Maven (или любого другого стороннего инструмента / банка)
  • полный стек, с открытым исходным кодом (BSD)
  • наименьшее количество классов любой полнофункциональной java-фреймворка
  • SQL помещается в текстовые файлы
  • поощряет использование неизменяемых объектов
  • минимальный необходимый набор инструментов (JSP / JSTL, Java, SQL)

Grails - это то, что вам нужно, если вам нравится легко выполнять CRUD и создавать быстрые прототипы приложения, также хорошо работает с Eclipse. Следуйте руководству «Создайте свое первое приложение Grails» здесь http://grails.org/Tutorials, и вы сможете настроить и запустить собственное приложение менее чем за час.

Попробуйте Apache Click

Он похож на Wicket, но гораздо более продуктивен и прост в освоении.

Основная причина использования Click заключается в том, что это один из немногих фреймворков, которые я понимаю, как он работает (не совсем, но, по крайней мере, в какой-то степени, чтобы чувствовать себя с ним комфортно).

Gilberto 08.05.2013 05:03

попробуйте Wavemaker http://wavemaker.com Бесплатно, просто в использовании. Чтобы научиться создавать великолепные Java-приложения с помощью WaveMaker, потребуется всего несколько недель!

Это очень субъективно, но я нашел виджеты Wavemaker действительно уродливыми :-)

Laryx Decidua 25.02.2013 18:27

Недавно я нашел фреймворк AribaWeb, который выглядит очень многообещающим. Он предлагает хорошую функциональность (даже AJAX), хорошую документацию. написан на Groovy / Java и даже включает Tomcat-Server. Попытка попасть в Spring действительно разозлила меня.

Вы можете попробовать JRapid. Используя Domain Driven Design, вы определяете свое приложение, и оно генерирует полный стек для вашего веб-приложения. Он использует известные фреймворки с открытым исходным кодом и создает очень красивый и готовый к использованию пользовательский интерфейс.

Замок

http://maven.castleframework.org/nexus/content/repositories/releases/

установить с помощью maven.

попробуйте Ваадин! Очень просто, и вы также сможете легко работать с пользовательским интерфейсом! www.vaadin.com

Поскольку GWT практически мертв, это не рекомендуется.

Robert de W 31.08.2013 22:44

Я также рекомендую Apache Click. Если вы пройдете тест на десять минут (я думаю, это время, которое вы потратите, чтобы прочитать Краткое руководство пользователя), вы не вернетесь!

С уважением,

Жилберто

На днях я нашел действительно легкий веб-фреймворк Java.

Он называется Jodd и дает вам многие основы, которые вы ожидаете от Spring, но в действительно легком пакете размером менее 1 МБ.

http://jodd.org/

Это не только веб-фреймворк; есть контейнер ioc, механизм aop, механизм отображения db, инструменты обработки html (декоратор, минификатор ...) и т. д.

igr 18.06.2012 13:05

Джодд действительно очень впечатляет

Hakkar 19.06.2012 04:25

Попробуйте это: http://skingston.com/SKWeb

Можно было бы добавить еще несколько функций и улучшений, но это просто и работает.

Сейчас он отключен, неудобно.

madth3 20.10.2012 04:19

Также обратите внимание на activeweb. он простой, легкий и использует несколько других вещей, которые мне нравятся (guice, maven ...). Его контроллеры могут обслуживать все, что вы хотите, включая json, Html, простой текст, PDF-файлы, изображения ... Вы можете создавать спокойные контроллеры и даже использовать аннотации, чтобы определить, какие HTTP-методы (POST, GET, ...) принимает метод контроллера.

Общим свойством веб-приложений Java является то, что они обычно используют сервлеты, что обычно означает, что веб-сервер также выполняет Java. Это способствует воспринимаемой сложности, ИМХО. Но вы можете создавать Java-приложения в традиционном стиле Unix: «делай одно и делай это хорошо» без снижения производительности.

Вы также можете использовать SCGI, это намного проще, чем FastCGI. Сначала я попробую. Но если не получится:

Как написать приложение FastCGI на Java

  1. Создайте пустой рабочий каталог и войдите в него
  2. Загрузите набор разработчика FastCGI: wget --quiet --recursive --no-parent --accept=java --no-directories --no-host-directories "http://www.fastcgi.com/devkit/java/"
  3. mkdir -p com/fastcgi
  4. mv *.java com/fastcgi
  5. Теперь вам нужно применить крошечный патч к devkit (замените оператор == на <= в строке 175 или используйте этот скрипт для этого):

    echo -e "175c\nif (count <= 0) {\n.\nw\nn\nq" | ed -s com/fastcgi/FCGIInputStream.java

  6. Создайте тестовое приложение TinyFCGI.java (источник ниже)
  7. Скомпилируйте все: javac **/*.java (**, вероятно, будет работать только в zsh)
  8. Запустите сервер FastCGI: java -DFCGI_PORT=9884 TinyFCGI (оставьте его работающим в фоновом режиме)
  9. Теперь настройте, например, Apache для использования сервера:

    • Используя Apache 2.4, вы можете использовать mod_proxy_fcgi следующим образом:
      1. Используя Ubuntu, обновитесь до Apache 2.4, используя, например, этот PPA
      2. Включите мод: sudo a2enmod proxy_fcgi
      3. Создайте /etc/apache2/conf-enabled/your_site.conf с содержимым ниже
      4. Перезагрузите Apache: sudo apache2ctl restart
  10. Теперь вы можете получить доступ к веб-приложению по адресу http://localhost/your_site.

  11. Результаты сравнения ниже

TinyFCGI.java

import com.fastcgi.FCGIInterface;
import java.io.*;
import static java.lang.System.out;

class TinyFCGI {
    public static void main (String args[]) {
        int count = 0;
        FCGIInterface fcgiinterface = new FCGIInterface();
        while(fcgiinterface.FCGIaccept() >= 0) {
            count++;
            out.println("Content-type: text/html\n\n");
            out.println("<html>");
            out.println(
                "<head><TITLE>FastCGI-Hello Java stdio</TITLE></head>");
            out.println("<body>");
            out.println("<H3>FastCGI-HelloJava stdio</H3>");
            out.println("request number " + count +
                               " running on host "
                               + System.getProperty("SERVER_NAME"));
            out.println("</body>");
            out.println("</html>");
        }
    }
}

your_site.conf

<Location /your_site>
  ProxyPass fcgi://localhost:9884/
</Location>

Результаты тестов

работа

$ ./wrk -t1 -c100 -r10000 http://localhost/your_site 
Making 10000 requests to http://localhost/your_site
  1 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     3.58s    13.42s    1.06m    94.42%
    Req/Sec     0.00      0.00     0.00    100.00%
  10000 requests in 1.42m, 3.23MB read
  Socket errors: connect 0, read 861, write 0, timeout 2763
  Non-2xx or 3xx responses: 71
Requests/sec:    117.03
Transfer/sec:     38.70KB

ab

$ ab -n 10000 -c 100 localhost:8800/your_site
Concurrency Level:      100
Time taken for tests:   12.640 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3180000 bytes
HTML transferred:       1640000 bytes
Requests per second:    791.11 [#/sec] (mean)
Time per request:       126.404 [ms] (mean)
Time per request:       1.264 [ms] (mean, across all concurrent requests)
Transfer rate:          245.68 [Kbytes/sec] received

осада

$ siege -r 10000 -c 100 "http://localhost:8800/your_site"
** SIEGE 2.70
** Preparing 100 concurrent users for battle.
The server is now under siege...^C
Lifting the server siege...      done.
Transactions:              89547 hits
Availability:             100.00 %
Elapsed time:             447.93 secs
Data transferred:          11.97 MB
Response time:              0.00 secs
Transaction rate:         199.91 trans/sec
Throughput:             0.03 MB/sec
Concurrency:                0.56
Successful transactions:       89547
Failed transactions:               0
Longest transaction:            0.08
Shortest transaction:           0.00

Я бы подумал, что придерживаться JSP, сервлетов и JSTL После более чем 12 лет работы с веб-фреймворками в нескольких компаниях, с которыми я работал, я всегда возвращаюсь к старому доброму JSP. Да, есть некоторые вещи, которые вам нужно написать самостоятельно, которые некоторые фреймворки делают автоматически. Но если вы подойдете к нему правильно и создадите несколько базовых утилит поверх ваших сервлетов, это даст лучшую гибкость, и вы сможете легко делать все, что захотите. Я не нашел реальных преимуществ писать ни в одном из фреймворков. И я продолжаю искать.

Глядя на все ответы выше, также означает, что не существует единой хорошей структуры и правил.

Взгляните на Ninja Web Framework.

Это чистая среда Java MVC в традициях Rails. Он не использует конфигурацию на основе xml и имеет все необходимое для немедленного начала работы: управление сеансом, управление безопасностью, рендеринг html, рендеринг и анализ json, рендеринг и анализ xml. Он также имеет встроенную среду тестирования и на 100% совместим с традиционными контейнерами сервлетов.

Тем не менее, он использует Maven, но при правильном использовании Maven делает разработку программного обеспечения очень простой. Также он позволяет сразу использовать любой Ide :)

Кстати, разработка Ninja действительно продуктивна - внесите изменения в свой код и сразу увидите результаты.

Выезд: http://www.ninjaframework.org.

Мне это напоминает рельсы. Красивый. Но никакой книги или другого подробного справочника.

SanSolo 24.11.2013 12:18

Другие вопросы по теме