Какой наилучший способ создать модульное веб-приложение java [закрыто]

StackOverflow https://stackoverflow.com/questions/71692

  •  09-06-2019
  •  | 
  •  

Вопрос

Я создаю небольшой веб-сайт на Java (Spring MVC с представлениями JSP) и пытаюсь найти наилучшее решение для создания и включения нескольких повторно используемых модулей (например, "последние новости", "предстоящие события" ...).

Итак, вопрос заключается в следующем:Портлеты, плитки или какая-то другая технология?

Это было полезно?

Решение

Если вы используете Spring MVC, то я бы рекомендовал использовать портлеты.В Spring портлеты - это просто облегченные контроллеры, поскольку они отвечают только за фрагмент всей страницы, и их очень легко написать.Если вы используете Spring 2.5, то можете пользоваться всеми преимуществами новой поддержки аннотаций, и они прекрасно вписываются во все приложение Spring с внедрением зависимостей и другими преимуществами использования Spring.

Контроллер портлета практически ничем не отличается от контроллера сервлета, вот простой пример:

@RequestMapping("VIEW")
@Controller
public class NewsPortlet {

    private NewsService newsService;

    @Autowired
    public NewsPortlet(NewsService newsService) {
        this.newsService = newsService;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String view(Model model) {
        model.addAttribute(newsService.getLatests(10));
        return "news";        
    }
}

Здесь служба новостей будет автоматически введена в контроллер.Метод view добавляет в модель объект List, который будет доступен как ${newsList} в JSP.Spring будет искать представление с именем news.jsp на основе возвращаемого значения метода.RequestMapping сообщает Spring, что этот компонент предназначен для режима просмотра портлета.

В конфигурации XML необходимо только указать, где расположены представление и контроллеры:

<!-- look for controllers and services here -->
<context:component-scan base-package="com.example.news"/>

<!-- look for views here -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/news/"/>
    <property name="suffix" value=".jsp"/>
</bean>

Если вы хотите просто встроить портлеты в свое существующее приложение, вы можете создать контейнер портлетов, например Экзо, Солнце, или Апач.Если вы хотите создать свое приложение в виде набора портлетов, возможно, вам захочется рассмотреть полномасштабное портальное решение, такое как Портал Liferay.

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

Плитка может причинять боль.Значительное улучшение по сравнению с тем, что было раньше (т.е.ничего), но скорее ограничивающий.

Калитка возможно, это больше то, что вы ищете, если только вы не остановились на JSP.

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

Если вам просто нужны "повторно используемые компоненты", используйте Файлы тегов JSP, они предельно просты, но чрезвычайно мощны, поскольку они такие же, как обычные JSP.

У меня был опыт использования плиток, и связанная с этим сложность просто не стоит того.

Я большой поклонник GWT.Это позволяет вам писать свои компоненты как обычные классы Java, а затем вы можете вставлять их на свои страницы по своему желанию.Все это в конечном итоге компилируется в Javascript.

Вот пример:

public class MyApplication implements EntryPoint, HistoryListener
{
    static final String INIT_STATE = "status";

    /**
     * This is the entry point method.  Instantiates the home page.
     */
    public void onModuleLoad ()
    {
        RootPanel.get ().setStyleName ("root");
        initHistorySupport ();
    }

    private void initHistorySupport ()
    {
        History.addHistoryListener (this);

        // check to see if there are any tokens passed at startup via the browser’s URI
        String token = History.getToken ();
        if (token.length () == 0)
        {
            onHistoryChanged (INIT_STATE);
        }
        else
        {
            onHistoryChanged (token);
        }
    }


    /**
     * Fired when the user clicks the browser's 'back' or 'forward' buttons.
     *
     * @param historyToken the token representing the current history state
     */
    public void onHistoryChanged (String historyToken)
    {
        RootPanel.get ().clear ();
        Page page;
        if (Page1.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page1 ();
        }
        else if (Page2.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page2 ();
        }
        else if (Page3.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page3 ();
        }
        RootPanel.get ().add (page);
    }
}

У меня был большой опыт работы с портлетами в сочетании с Ajax JSF (ICEfaces) и Liferay Portal, и я бы никому их не рекомендовал - все выглядит хорошо при чтении руководства и настоящий ад на практике.Конечно, я думаю, что они намного удобнее и легче с Spring MVC и JSP, но в любом случае, портлеты не являются хорошо поддерживаемой технологией, имхо.

Я не уверен на 100%, что означает "повторно используемые компоненты" в данном контексте, но если вы имеете в виду, что хотите, чтобы определенные общие элементы появлялись на каждой странице, такие как баннер, нижний колонтитул, навигационные ссылки и т.д., то смотрите не дальше Сайтмеш.Моя команда успешно использовала его в паре интернационализированных веб-приложений.

Гобелен это платформа Java web app framework с акцентом на простое создание повторно используемых компонентов.

Я использовал sitemesh, и он хорош для обертывания набора страниц стандартными верхними и нижними колонтитулами, но Tapestry лучше подходит для создания компонентов, которые используются на многих страницах, возможно, много раз на странице.Компоненты Tapestry могут принимать другие компоненты в качестве параметров, что позволяет переносить стиль Sitemesh.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top